From 424d3ba603c894e401e2994dc826eb9a10eadd2f Mon Sep 17 00:00:00 2001 From: GOENS Quinten Date: Fri, 3 May 2024 11:03:04 +0200 Subject: [PATCH] Added menu to website, added eurocontrol logo, rendered website --- .nojekyll | 0 _quarto.yml | 186 ++++ docs/.nojekyll | 0 docs/00-executive-summary.html | 640 ++++++------- docs/00_foreword.html | 669 ++++++------- docs/01-intro.html | 898 ++++++++---------- docs/02-system_overview.html | 675 +++++++------ docs/03-traffic_characterisation.html | 774 ++++++++------- .../figure-html/fig-annual-network-1.png | Bin 216277 -> 31694 bytes .../fig-annual-traffic-timeline-1.png | Bin 321980 -> 40482 bytes .../figure-html/fig-apt-annual-change-1.png | Bin 128264 -> 32708 bytes .../figure-html/fig-fleet-mix-1.png | Bin 109977 -> 27156 bytes .../figure-html/fig-fleetmix-timeline-1.png | Bin 295917 -> 42283 bytes .../figure-html/fig-peak-day-1.png | Bin 115050 -> 48294 bytes .../figure-html/fig-timeline-peak-day-1.png | Bin 277579 -> 82831 bytes .../figure-html/unnamed-chunk-7-1.png | Bin 90835 -> 25891 bytes .../figure-html/unnamed-chunk-9-1.png | Bin 91873 -> 27591 bytes docs/04-predictability.html | 764 ++++++++------- .../fig-early-vs-late-arrivals-1.png | Bin 234731 -> 51585 bytes .../fig-early-vs-late-departures-1.png | Bin 170490 -> 40332 bytes .../figure-html/fig-evolution-ARR-punc-1.png | Bin 255611 -> 65027 bytes .../figure-html/fig-evolution-DEP-punc-1.png | Bin 249177 -> 66707 bytes .../figure-html/unnamed-chunk-11-1.png | Bin 180055 -> 45932 bytes .../figure-html/unnamed-chunk-5-1.png | Bin 179082 -> 45207 bytes docs/05-capacity_and_throughput.html | 779 ++++++++------- .../figure-html/fig-arrival-throughput-1.png | Bin 199221 -> 50231 bytes .../figure-html/fig-bli-pli-1.png | Bin 148247 -> 54633 bytes .../figure-html/fig-capsovertime-1.png | Bin 155294 -> 29137 bytes .../figure-html/fig-capvsthru-1.png | Bin 98647 -> 22613 bytes .../fig-departure-throughput-1.png | Bin 190011 -> 49884 bytes .../fig-peak-declared-cpacity-1.png | Bin 85075 -> 23554 bytes docs/06-efficiency.html | 789 ++++++++------- .../figure-html/fig-asma-1.png | Bin 86861 -> 24318 bytes .../fig-asma-vs-traffic-volume-1.png | Bin 140926 -> 32875 bytes .../figure-html/fig-bra-txit-timeline-1.png | Bin 136920 -> 26112 bytes .../figure-html/fig-eur-txit-timeline-1.png | Bin 130140 -> 23984 bytes .../figure-html/fig-txit-annual-1.png | Bin 93647 -> 26349 bytes .../figure-html/fig-txot-annual-1.png | Bin 94612 -> 28208 bytes .../figure-html/fig-txot-eur-monthly-1.png | Bin 171776 -> 29942 bytes .../figure-html/fig-txot-monthly-1.png | Bin 167809 -> 32152 bytes .../figure-html/fig-txot-txit-mapping-1.png | Bin 158471 -> 38677 bytes docs/08-conclusions.html | 641 ++++++------- docs/99-references.html | 652 ++++++------- ...-ANS-Performance-in-Brazil-and-Europe.docx | Bin 9771555 -> 0 bytes ...f-ANS-Performance-in-Brazil-and-Europe.pdf | Bin 3738785 -> 0 bytes docs/index.html | 654 ++++++------- docs/media/EUROCONTROL-logo-standard-rgb.svg | 18 + docs/search.json | 392 -------- docs/site_libs/bootstrap/bootstrap-icons.css | 406 +------- docs/site_libs/bootstrap/bootstrap-icons.woff | Bin 176200 -> 137124 bytes docs/site_libs/bootstrap/bootstrap.min.css | 12 +- docs/site_libs/bootstrap/bootstrap.min.js | 6 +- docs/site_libs/clipboard/clipboard.min.js | 4 +- docs/site_libs/quarto-html/anchor.min.js | 6 +- docs/site_libs/quarto-html/popper.min.js | 4 +- .../quarto-syntax-highlighting.css | 32 - docs/site_libs/quarto-html/quarto.js | 369 +++---- docs/site_libs/quarto-nav/quarto-nav.js | 78 +- .../quarto-search/autocomplete.umd.js | 4 +- docs/site_libs/quarto-search/fuse.min.js | 6 +- docs/site_libs/quarto-search/quarto-search.js | 194 +--- media/EUROCONTROL-logo-standard-rgb.svg | 18 + 62 files changed, 4204 insertions(+), 5466 deletions(-) create mode 100644 .nojekyll create mode 100644 docs/.nojekyll delete mode 100644 docs/Operational-Comparison-of-ANS-Performance-in-Brazil-and-Europe.docx delete mode 100644 docs/Operational-Comparison-of-ANS-Performance-in-Brazil-and-Europe.pdf create mode 100644 docs/media/EUROCONTROL-logo-standard-rgb.svg delete mode 100644 docs/search.json create mode 100644 media/EUROCONTROL-logo-standard-rgb.svg diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/_quarto.yml b/_quarto.yml index 2e7883a..deeec9c 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -25,6 +25,191 @@ book: # - 07-environment.qmd - 08-conclusions.qmd - 99-references.qmd + navbar: + background: light + search: false + title: false + logo: "media/EUROCONTROL-logo-standard-rgb.svg" + left: + - text: "AIU Home" + menu: + - text: "**Home**" + icon: "house-fill" + href: "https://ansperformance.eu" + # --- + - text: " **Traffic**" + href: "https://ansperformance.eu/traffic/" + + - text: " Daily Traffic Dashboard" + icon: "arrow-return-right" + href: "https://www.eurocontrol.int/Economics/DailyTrafficVariation-States.html" + + - text: "Traffic Forecast" + icon: "arrow-return-right" + href: "https://ansperformance.eu/traffic/statfor/" + # --- + - text: " **Efficiency & Environment**" + href: "https://ansperformance.eu/efficiency/" + - text: "CO2 emissions" + icon: "arrow-return-right" + href: "https://ansperformance.eu/efficiency/emissions/" + - text: "Horizontal Flight Efficiency" + icon: "arrow-return-right" + href: "https://ansperformance.eu/efficiency/hfe/" + + - text: "Vertical Flight Efficiency" + icon: "arrow-return-right" + href: "https://ansperformance.eu/efficiency/vfe/" + + - text: "Terminal Holdings" + icon: "arrow-return-right" + href: "https://ansperformance.eu/efficiency/asma/" + + - text: "Taxi-out" + icon: "arrow-return-right" + href: "https://ansperformance.eu/efficiency/taxiout/" + + # --- + - text: " **Economics**" + href: "https://ansperformance.eu/economics/" + + - text: "Service Units" + icon: "arrow-return-right" + href: "https://www.eurocontrol.int/ServiceUnits/Dashboard/EnRouteMainDashboard.html" + + - text: "Unit Rates and Costs" + icon: "arrow-return-right" + href: "https://www.eurocontrol.int/ServiceUnits/Dashboard/EnRouteUnitRates.html" + + - text: "ATM Cost Effectiveness" + icon: "arrow-return-right" + href: "https://ansperformance.eu/ACE/" + + - text: "ANSPs Financial Situation" + icon: "arrow-return-right" + href: "https://ansperformance.eu/economics/finance/" + + - text: "CBA" + icon: "arrow-return-right" + href: "https://ansperformance.eu/economics/cba/" + + # --- + - text: " **Stakeholder views**" + href: "https://ansperformance.eu/dashboard/stakeholder/" + + - text: "Airport View" + icon: "arrow-return-right" + href: "https://ansperformance.eu/airport/" + + - text: "ANSP View" + icon: "arrow-return-right" + href: "https://ansperformance.eu/ansp/" + + - text: "FAB View" + icon: "arrow-return-right" + href: "https://ansperformance.eu/dashboard/stakeholder/fab/" + + - text: "State View" + icon: "arrow-return-right" + href: "https://ansperformance.eu/dashboard/stakeholder/state/" + + # --- + - text: " **Publications**" + href: "https://ansperformance.eu/publications/" + + - text: "Data" + icon: "arrow-return-right" + href: "https://ansperformance.eu/data/" + + # --- + - text: " **Reference**" + href: "https://ansperformance.eu/reference/" + + # --- + - text: " **External**" + + - text: "Single European Sky Portal" + icon: "arrow-return-right" + href: "https://www.eurocontrol.int/prudata/dashboard/" + + - text: "ICAO GANP" + icon: "arrow-return-right" + href: "https://www4.icao.int/ganpportal/" + + - text: "About" + menu: + - text: "About the PRC" + href: "https://ansperformance.eu/about/prc/" + + - text: "About the PRU" + href: "https://ansperformance.eu/about/us/" + + - text: "Release notes" + href: "https://ansperformance.eu/post/" + + - text: "Disclaimer" + href: "https://ansperformance.eu/about/disclaimer/" + + - text: "Areas" + menu: + - text: "Traffic" + href: "https://ansperformance.eu/traffic/" + + - text: "Capacity & delays" + href: "https://ansperformance.eu/capacity/" + + - text: "Efficiency & environment" + href: "https://ansperformance.eu/efficiency/" + + - text: "Economics" + href: "https://ansperformance.eu/economics/" + + - text: "Views" + menu: + - text: "Airports" + href: "https://ansperformance.eu/dashboard/stakeholder/airport/" + + - text: "Air Navigation Service Provider" + href: "https://ansperformance.eu/ansp/" + + - text: "Functional Airspace Block" + href: "https://ansperformance.eu/fab/" + + - text: "State" + href: "https://ansperformance.eu/dashboard/stakeholder/state/" + + - text: "Publications" + href: "https://ansperformance.eu/publications/" + + - text: "Data" + href: "https://ansperformance.eu/data/" + + - text: "Reference" + menu: + - text: "Data downloads" + href: "https://ansperformance.eu/data/" + + - text: "Definitions" + href: "https://ansperformance.eu/definition/" + + - text: "Methodology" + href: "https://ansperformance.eu/methodology/" + + - text: "Acronyms" + href: "https://ansperformance.eu/acronym/" + + - text: "Bibliography" + href: "https://ansperformance.eu/bibliography/" + + - text: "---" + + - text: " ICAO GANP" + href: "https://www4.icao.int/ganpportal/" + + - text: "SES" + menu: + - text: " Single European Sky (SES) Portal" + href: "https://www.eurocontrol.int/prudata/dashboard/" appendices: - A1-appendix.qmd @@ -33,6 +218,7 @@ downloads: [pdf, docx] #bibliography: book.bib #, packages.bib] bibliography: references.bib + format: html: theme: cosmo diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/docs/00-executive-summary.html b/docs/00-executive-summary.html index eb1f1e9..efd894d 100644 --- a/docs/00-executive-summary.html +++ b/docs/00-executive-summary.html @@ -2,7 +2,7 @@ - + @@ -17,7 +17,7 @@ ul.task-list{list-style: none;} ul.task-list li input[type="checkbox"] { width: 0.8em; - margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */ + margin: 0 0.8em 0.2em -1.6em; vertical-align: middle; } @@ -42,18 +42,12 @@ - +
- +
-
+
- -
- -

The Performance Section of the Brazilian Department of Airspace Control and the Performance Review Unit of EUROCONTROL jointly developed this third edition of the Brazil-Europe comparison of Air Navigation System Performance. This edition of the bi-regional report builds on the previous comparison reports using commonly agreed metrics and definitions to compare, understand, and improve the performance of air navigation services. This report and previous editions are available at

  • https://ansperformance.eu/global/brazil or
  • @@ -210,14 +447,10 @@

    Executive Summary

    This report updates the earlier editions and assessment of the operational air navigation system performance in both regions, Brazil and Europe, extending the time frame and incorporating additional analyses. This edition focuses on a subset of the eleven Key Performance Areas identified by the ICAO Global Air Navigation Plan, in particular Predictability, Capacity and Efficiency.

    -
    -
    -
    - -
    -
    -Figure 1: Key Performance Areas addressed in this edition -
    +
    +
    +

    +

    Figure 1: Key Performance Areas addressed in this edition

    @@ -291,23 +524,9 @@

    Executive Summary

    icon: icon }; anchorJS.add('.anchored'); - const isCodeAnnotation = (el) => { - for (const clz of el.classList) { - if (clz.startsWith('code-annotation-')) { - return true; - } - } - return false; - } const clipboard = new window.ClipboardJS('.code-copy-button', { - text: function(trigger) { - const codeEl = trigger.previousElementSibling.cloneNode(true); - for (const childEl of codeEl.children) { - if (isCodeAnnotation(childEl)) { - childEl.remove(); - } - } - return codeEl.innerText; + target: function(trigger) { + return trigger.previousElementSibling; } }); clipboard.on('success', function(e) { @@ -343,9 +562,10 @@

    Executive Summary

    // clear code selection e.clearSelection(); }); - function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) { + function tippyHover(el, contentFn) { const config = { allowHTML: true, + content: contentFn, maxWidth: 500, delay: 100, arrow: false, @@ -355,17 +575,8 @@

    Executive Summary

    interactive: true, interactiveBorder: 10, theme: 'quarto', - placement: 'bottom-start', + placement: 'bottom-start' }; - if (contentFn) { - config.content = contentFn; - } - if (onTriggerFn) { - config.onTrigger = onTriggerFn; - } - if (onUntriggerFn) { - config.onUntrigger = onUntriggerFn; - } window.tippy(el, config); } const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]'); @@ -380,238 +591,6 @@

    Executive Summary

    return note.innerHTML; }); } - const xrefs = window.document.querySelectorAll('a.quarto-xref'); - const processXRef = (id, note) => { - // Strip column container classes - const stripColumnClz = (el) => { - el.classList.remove("page-full", "page-columns"); - if (el.children) { - for (const child of el.children) { - stripColumnClz(child); - } - } - } - stripColumnClz(note) - if (id === null || id.startsWith('sec-')) { - // Special case sections, only their first couple elements - const container = document.createElement("div"); - if (note.children && note.children.length > 2) { - container.appendChild(note.children[0].cloneNode(true)); - for (let i = 1; i < note.children.length; i++) { - const child = note.children[i]; - if (child.tagName === "P" && child.innerText === "") { - continue; - } else { - container.appendChild(child.cloneNode(true)); - break; - } - } - if (window.Quarto?.typesetMath) { - window.Quarto.typesetMath(container); - } - return container.innerHTML - } else { - if (window.Quarto?.typesetMath) { - window.Quarto.typesetMath(note); - } - return note.innerHTML; - } - } else { - // Remove any anchor links if they are present - const anchorLink = note.querySelector('a.anchorjs-link'); - if (anchorLink) { - anchorLink.remove(); - } - if (window.Quarto?.typesetMath) { - window.Quarto.typesetMath(note); - } - // TODO in 1.5, we should make sure this works without a callout special case - if (note.classList.contains("callout")) { - return note.outerHTML; - } else { - return note.innerHTML; - } - } - } - for (var i=0; i res.text()) - .then(html => { - const parser = new DOMParser(); - const htmlDoc = parser.parseFromString(html, "text/html"); - const note = htmlDoc.getElementById(id); - if (note !== null) { - const html = processXRef(id, note); - instance.setContent(html); - } - }).finally(() => { - instance.enable(); - instance.show(); - }); - } - } else { - // See if we can fetch a full url (with no hash to target) - // This is a special case and we should probably do some content thinning / targeting - fetch(url) - .then(res => res.text()) - .then(html => { - const parser = new DOMParser(); - const htmlDoc = parser.parseFromString(html, "text/html"); - const note = htmlDoc.querySelector('main.content'); - if (note !== null) { - // This should only happen for chapter cross references - // (since there is no id in the URL) - // remove the first header - if (note.children.length > 0 && note.children[0].tagName === "HEADER") { - note.children[0].remove(); - } - const html = processXRef(null, note); - instance.setContent(html); - } - }).finally(() => { - instance.enable(); - instance.show(); - }); - } - }, function(instance) { - }); - } - let selectedAnnoteEl; - const selectorForAnnotation = ( cell, annotation) => { - let cellAttr = 'data-code-cell="' + cell + '"'; - let lineAttr = 'data-code-annotation="' + annotation + '"'; - const selector = 'span[' + cellAttr + '][' + lineAttr + ']'; - return selector; - } - const selectCodeLines = (annoteEl) => { - const doc = window.document; - const targetCell = annoteEl.getAttribute("data-target-cell"); - const targetAnnotation = annoteEl.getAttribute("data-target-annotation"); - const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation)); - const lines = annoteSpan.getAttribute("data-code-lines").split(","); - const lineIds = lines.map((line) => { - return targetCell + "-" + line; - }) - let top = null; - let height = null; - let parent = null; - if (lineIds.length > 0) { - //compute the position of the single el (top and bottom and make a div) - const el = window.document.getElementById(lineIds[0]); - top = el.offsetTop; - height = el.offsetHeight; - parent = el.parentElement.parentElement; - if (lineIds.length > 1) { - const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]); - const bottom = lastEl.offsetTop + lastEl.offsetHeight; - height = bottom - top; - } - if (top !== null && height !== null && parent !== null) { - // cook up a div (if necessary) and position it - let div = window.document.getElementById("code-annotation-line-highlight"); - if (div === null) { - div = window.document.createElement("div"); - div.setAttribute("id", "code-annotation-line-highlight"); - div.style.position = 'absolute'; - parent.appendChild(div); - } - div.style.top = top - 2 + "px"; - div.style.height = height + 4 + "px"; - div.style.left = 0; - let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter"); - if (gutterDiv === null) { - gutterDiv = window.document.createElement("div"); - gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter"); - gutterDiv.style.position = 'absolute'; - const codeCell = window.document.getElementById(targetCell); - const gutter = codeCell.querySelector('.code-annotation-gutter'); - gutter.appendChild(gutterDiv); - } - gutterDiv.style.top = top - 2 + "px"; - gutterDiv.style.height = height + 4 + "px"; - } - selectedAnnoteEl = annoteEl; - } - }; - const unselectCodeLines = () => { - const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"]; - elementsIds.forEach((elId) => { - const div = window.document.getElementById(elId); - if (div) { - div.remove(); - } - }); - selectedAnnoteEl = undefined; - }; - // Handle positioning of the toggle - window.addEventListener( - "resize", - throttle(() => { - elRect = undefined; - if (selectedAnnoteEl) { - selectCodeLines(selectedAnnoteEl); - } - }, 10) - ); - function throttle(fn, ms) { - let throttle = false; - let timer; - return (...args) => { - if(!throttle) { // first call gets through - fn.apply(this, args); - throttle = true; - } else { // all the others get throttled - if(timer) clearTimeout(timer); // cancel #2 - timer = setTimeout(() => { - fn.apply(this, args); - timer = throttle = false; - }, ms); - } - }; - } - // Attach click handler to the DT - const annoteDls = window.document.querySelectorAll('dt[data-target-cell]'); - for (const annoteDlNode of annoteDls) { - annoteDlNode.addEventListener('click', (event) => { - const clickedEl = event.target; - if (clickedEl !== selectedAnnoteEl) { - unselectCodeLines(); - const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active'); - if (activeEl) { - activeEl.classList.remove('code-annotation-active'); - } - selectCodeLines(clickedEl); - clickedEl.classList.add('code-annotation-active'); - } else { - // Unselect the line - unselectCodeLines(); - clickedEl.classList.remove('code-annotation-active'); - } - }); - } const findCites = (el) => { const parentEl = el.parentElement; if (parentEl) { @@ -653,12 +632,12 @@

    Executive Summary

-