1<!DOCTYPE html> 2<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> 3 4<meta charset="utf-8"> 5<meta name="generator" content="quarto-1.9.38"> 6 7<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"> 8 9<meta name="description" content="<p>Welcome to the Fisheries and Marine Ecosystem Model Intercomparison Project.</p>"> 10 11<title>Home | FishMIP</title> 12<style> 13/* Default styles provided by pandoc. 14** See https://pandoc.org/MANUAL.html#variables-for-html for config info. 15*/ 16code{white-space: pre-wrap;} 17span.smallcaps{font-variant: small-caps;} 18div.columns{display: flex; gap: min(4vw, 1.5em);} 19div.column{flex: auto; overflow-x: auto;} 20div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;} 21ul.task-list{list-style: none;} 22ul.task-list li input[type="checkbox"] { 23 width: 0.8em; 24 margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */ 25 vertical-align: middle; 26} 27</style> 28 29
30<script src="site_libs/quarto-nav/quarto-nav.js"></script>
vendor: 1 bytes, line 30
30
31<script src="site_libs/quarto-nav/headroom.min.js"></script>
vendor: 1 bytes, line 31
31
32<script src="site_libs/clipboard/clipboard.min.js"></script>
vendor: 1 bytes, line 32
32
33<script src="site_libs/quarto-search/autocomplete.umd.js"></script>
vendor: 1 bytes, line 33
33
34<script src="site_libs/quarto-search/fuse.min.js"></script>
vendor: 1 bytes, line 34
34
35<script src="site_libs/quarto-search/quarto-search.js"></script>
35 36<meta name="quarto:offset" content="./"> 37<link href=".//FishMIP_assets/one line logo/pngs/one-line-colour-logo_transparent_background.png" rel="icon" type="image/png">
38<script src="site_libs/quarto-html/quarto.js" type="module"></script>
vendor: 1 bytes, line 38
38
39<script src="site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
vendor: 1 bytes, line 39
39
40<script src="site_libs/quarto-html/popper.min.js"></script>
vendor: 1 bytes, line 40
40
41<script src="site_libs/quarto-html/tippy.umd.min.js"></script>
41 42<link href="site_libs/quarto-html/tippy.css" rel="stylesheet"> 43<link href="site_libs/quarto-html/quarto-syntax-highlighting-15634bcf2e68342d4ad2dfa704d543f6.css" rel="stylesheet" id="quarto-text-highlighting-styles">
44<script src="site_libs/bootstrap/bootstrap.min.js"></script>
44 45<link href="site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet"> 46<link href="site_libs/bootstrap/bootstrap-3e64310203e13f9486fedeb0de333de6.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
47<script src="site_libs/quarto-contrib/iconify-3.0.0/iconify-icon.min.js"></script>
vendor: 1 bytes, line 47
47
48<script id="quarto-search-options" type="application/json">{ 49 "location": "navbar", 50 "copy-button": false, 51 "collapse-after": 3, 52 "panel-placement": "end", 53 "type": "overlay", 54 "limit": 50, 55 "keyboard-shortcut": [ 56 "f", 57 "/", 58 "s" 59 ], 60 "show-item-context": false, 61 "language": { 62 "search-no-results-text": "No results", 63 "search-matching-documents-text": "matching documents", 64 "search-copy-link-title": "Copy link to search", 65 "search-hide-matches-text": "Hide additional matches", 66 "search-more-match-text": "more match in this document", 67 "search-more-matches-text": "more matches in this document", 68 "search-clear-button-title": "Clear", 69 "search-text-placeholder": "", 70 "search-detached-cancel-button-title": "Cancel", 71 "search-submit-button-title": "Submit", 72 "search-label": "Search" 73 } 74}</script>
74 75 76 77</head> 78 79<body class="nav-fixed fullcontent quarto-light"> 80 81<div id="quarto-search-results"></div> 82 <header id="quarto-header" class="headroom fixed-top"> 83 <nav class="navbar navbar-expand-lg " data-bs-theme="dark"> 84 <div class="navbar-container container-fluid"> 85 <div class="navbar-brand-container mx-auto"> 86 <a href="./index.html" class="navbar-brand navbar-brand-logo"> 87 <img src="./FishMIP_assets/one_line_colour_logo.png" alt="FishMIP Home" class="navbar-logo light-content"> 88 <img src="./FishMIP_assets/one_line_colour_logo.png" alt="FishMIP Home" class="navbar-logo dark-content"> 89 </a> 90 </div> 91 <div id="quarto-search" class="" title="Search"></div> 92 <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Toggle navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }"> 93 <span class="navbar-toggler-icon"></span> 94</button> 95 <div class="collapse navbar-collapse" id="navbarCollapse"> 96 <ul class="navbar-nav navbar-nav-scroll ms-auto"> 97 <li class="nav-item"> 98 <a class="nav-link active" href="./index.html" aria-current="page"> 99<span class="menu-text">Home</span></a> 100 </li> 101 <li class="nav-item"> 102 <a class="nav-link" href="./pages/about.html"> 103<span class="menu-text">Approach</span></a> 104 </li> 105 <li class="nav-item dropdown "> 106 <a class="nav-link dropdown-toggle" href="#" id="nav-menu-people" role="link" data-bs-toggle="dropdown" aria-expanded="false"> 107 <span class="menu-text">People</span> 108 </a> 109 <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="nav-menu-people"> 110 <li> 111 <a class="dropdown-item" href="./pages/sciencegroup.html"> 112 <span class="dropdown-text">Science Coordination Group</span></a> 113 </li> 114 <li> 115 <a class="dropdown-item" href="./pages/modellingteams.html"> 116 <span class="dropdown-text">Modelling Teams</span></a> 117 </li> 118 <li> 119 <a class="dropdown-item" href="./pages/workinggroups.html"> 120 <span class="dropdown-text">Working Groups</span></a> 121 </li> 122 <li> 123 <a class="dropdown-item" href="./pages/joinus.html"> 124 <span class="dropdown-text">Join us</span></a> 125 </li> 126 </ul> 127 </li> 128 <li class="nav-item"> 129 <a class="nav-link" href="./pages/publications.html"> 130<span class="menu-text">Publications</span></a> 131 </li> 132 <li class="nav-item dropdown "> 133 <a class="nav-link dropdown-toggle" href="#" id="nav-menu-data--tools" role="link" data-bs-toggle="dropdown" aria-expanded="false"> 134 <span class="menu-text">Data & Tools</span> 135 </a> 136 <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="nav-menu-data--tools"> 137 <li> 138 <a class="dropdown-item" href="./pages/protocols.html"> 139 <span class="dropdown-text">Protocols</span></a> 140 </li> 141 <li> 142 <a class="dropdown-item" href="./pages/tools.html"> 143 <span class="dropdown-text">Tools</span></a> 144 </li> 145 </ul> 146 </li> 147 <li class="nav-item dropdown "> 148 <a class="nav-link dropdown-toggle" href="#" id="nav-menu-news" role="link" data-bs-toggle="dropdown" aria-expanded="false"> 149 <span class="menu-text">News</span> 150 </a> 151 <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="nav-menu-news"> 152 <li> 153 <a class="dropdown-item" href="./pages/events.html"> 154 <span class="dropdown-text">Events</span></a> 155 </li> 156 <li> 157 <a class="dropdown-item" href="./pages/blogs.html"> 158 <span class="dropdown-text">Blog</span></a> 159 </li> 160 </ul> 161 </li> 162 <li class="nav-item compact"> 163 <a class="nav-link" href="https://bsky.app/profile/fishmarinemip.bsky.social" target="_blank"> <i class="bi bi-bluesky" role="img"> 164</i> 165<span class="menu-text"></span></a> 166 </li> 167 <li class="nav-item compact"> 168 <a class="nav-link" href="https://www.linkedin.com/company/fisheries-and-marine-ecosystem-model-intercomparison-project-fishmip" target="_blank"> <i class="bi bi-linkedin" role="img"> 169</i> 170<span class="menu-text"></span></a> 171 </li>
172 <li class="nav-item"> 173 <a class="nav-link" href="https://scholar.google.com/citations?hl=en&user=qC76LesAAAAJ&view_op=list_works&sortby=pubdate" target="_blank"> 174<span class="menu-text"><iconify-icon role="img" inline="" icon="fa7-brands:google-scholar" style="color: #2c3792fe; hover-color: #2c3792cc;" aria-label="Icon google-scholar from fa7-brands Iconify.design set." title="Google Scholar"></iconify-icon></span></a> 175 </li> 176 <li class="nav-item compact"> 177 <a class="nav-link" href="https://github.com/Fish-MIP" target="_blank"> <i class="bi bi-github" role="img"> 178</i> 179<span class="menu-text"></span></a> 180 </li> 181 <li class="nav-item compact"> 182 <a class="nav-link" href="https://www.youtube.com/@FishMIP" target="_blank"> <i class="bi bi-youtube" role="img"> 183</i> 184<span class="menu-text"></span></a> 185 </li> 186</ul> 187 </div> <!-- /navcollapse --> 188 <div class="quarto-navbar-tools"> 189</div> 190 </div> <!-- /container-fluid --> 191 </nav> 192</header> 193<!-- content --> 194<div id="quarto-content" class="quarto-container page-layout-custom page-navbar"> 195<!-- sidebar --> 196<!-- margin-sidebar --> 197<!-- main --> 198 199 200 201 202<div class="column-screen" style="padding: 0em; margin-top: -1em"> 203<div class="quarto-figure quarto-figure-center"> 204<figure class="figure"> 205<p><img src="images/shutterstock_169126697 (3).jpeg" class="banner img-fluid quarto-figure quarto-figure-center figure-img"></p> 206</figure> 207</div> 208</div> 209<div class="grid mx-3 px-4 my-2 py-2"> 210<section id="welcome-to-the-fisheries-and-marine-ecosystem-model-intercomparison-project-fishmip" class="level1 g-col-12" style="margin-left: 1.5em;, margin-left: 1.5em;"> 211<h1>Welcome to the Fisheries and Marine Ecosystem Model Intercomparison Project (FishMIP)</h1> 212</section> 213<div class="g-col-12 text-center" style="font-size: 1.5em"> 214<p>FishMIP is a network of more than 150 marine ecosystem modellers and researchers from around the world.</p> 215</div> 216<div class="g-col-12 text-center"> 217<p>Our goal is to bring together diverse marine ecosystem models to help better understand and project the long-term impacts of climate change on fisheries and marine ecosystems, and to use our findings to help inform policy.</p> 218</div> 219</div> 220<div class="grid mx-3 px-4 my-2 py-2"> 221<div class="g-col-12 g-col-xl-10 g-start-xl-2 text-center"> 222<div class="quarto-video ratio ratio-16x9"><iframe data-external="1" src="https://player.vimeo.com/video/927985005" frameborder="0" title="" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen=""></iframe></div> 223</div> 224</div> 225<div class="grid mx-4 px-4 my-2 py-2 align-items-center jutify-contents-evenly"> 226<section id="we-answer-questions-about-the-future-of" class="level1 g-col-12"> 227<h1>We answer questions about the future of:</h1> 228</section> 229<div class="grid g-col-5 g-start-2 mx-4 align-items-center jutify-contents-evenly"> 230<div class="g-col-4"> 231<p><img src="images/icons/ship-solid-full.svg" class="img-fluid"></p> 232</div> 233<section id="fish-fisheries" class="level3 g-col-8 text-center"> 234<h3 data-anchor-id="fish-fisheries">Fish & Fisheries</h3> 235</section> 236</div> 237<div class="grid g-col-5 mx-4 align-items-center jutify-contents-evenly"> 238<div class="g-col-4"> 239<p><img src="images/icons/utensils-solid-full.svg" class="img-fluid"></p> 240</div> 241<section id="seafood-supply" class="level3 g-col-8 text-center"> 242<h3 data-anchor-id="seafood-supply">Seafood supply</h3> 243</section> 244</div> 245<div class="grid g-col-5 g-start-2 mx-4 align-items-center jutify-contents-evenly"> 246<div class="g-col-4"> 247<p><img src="images/icons/fish-fins-solid-full.svg" class="img-fluid"></p> 248</div> 249<section id="marine-biodiversity" class="level3 g-col-8 text-center"> 250<h3 data-anchor-id="marine-biodiversity">Marine biodiversity</h3> 251</section> 252</div> 253<div class="grid g-col-5 mx-4 align-items-center jutify-contents-evenly"> 254<div class="g-col-4"> 255<p><img src="images/icons/earth-asia-solid-full.svg" class="img-fluid"></p> 256</div> 257<section id="marine-ecosystem-functioning" class="level3 g-col-8 text-center"> 258<h3 data-anchor-id="marine-ecosystem-functioning">Marine ecosystem functioning</h3> 259</section> 260</div> 261</div> 262<div class="grid column-screen mx-4 px-3 my-3"> 263<div class="g-col-12 g-col-xl-10 g-start-xl-2 text-center"> 264<div class="quarto-figure quarto-figure-center"> 265<figure class="figure"> 266<p><img src="images/nemow.jpg" class="column-page img-fluid quarto-figure quarto-figure-center figure-img" style="padding: 0em" width="1489"></p> 267</figure> 268</div> 269</div> 270<section id="part-of-a-wider-climate-impact-model-community" class="level1 g-col-12"> 271<h1>Part of a wider climate impact model community</h1> 272</section> 273<div class="g-col-12 text-center" style="margin-bottom: 3em;"> 274<p>FishMIP contributes to the <a href="https://www.isimip.org/"><strong>Intersectoral Impact ModelIntercomparisonProject (ISIMIP)</strong></a>.</p> 275</div> 276</div> 277 278 279 280
281<script id="quarto-html-after-body" type="application/javascript"> 282 window.document.addEventListener("DOMContentLoaded", function (event) { 283 const isCodeAnnotation = (el) => { 284 for (const clz of el.classList) { 285 if (clz.startsWith('code-annotation-')) { 286 return true; 287 } 288 } 289 return false; 290 } 291 const onCopySuccess = function(e) { 292 // button target 293 const button = e.trigger; 294 // don't keep focus 295 button.blur(); 296 // flash "checked" 297 button.classList.add('code-copy-button-checked'); 298 var currentTitle = button.getAttribute("title"); 299 button.setAttribute("title", "Copied!"); 300 let tooltip; 301 if (window.bootstrap) { 302 button.setAttribute("data-bs-toggle", "tooltip"); 303 button.setAttribute("data-bs-placement", "left"); 304 button.setAttribute("data-bs-title", "Copied!"); 305 tooltip = new bootstrap.Tooltip(button, 306 { trigger: "manual", 307 customClass: "code-copy-button-tooltip", 308 offset: [0, -8]}); 309 tooltip.show(); 310 } 311 setTimeout(function() { 312 if (tooltip) { 313 tooltip.hide(); 314 button.removeAttribute("data-bs-title"); 315 button.removeAttribute("data-bs-toggle"); 316 button.removeAttribute("data-bs-placement"); 317 } 318 button.setAttribute("title", currentTitle); 319 button.classList.remove('code-copy-button-checked'); 320 }, 1000); 321 // clear code selection 322 e.clearSelection(); 323 } 324 const getTextToCopy = function(trigger) { 325 const outerScaffold = trigger.parentElement.cloneNode(true); 326 const codeEl = outerScaffold.querySelector('code'); 327 for (const childEl of codeEl.children) { 328 if (isCodeAnnotation(childEl)) { 329 childEl.remove(); 330 } 331 } 332 return codeEl.innerText; 333 } 334 const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', { 335 text: getTextToCopy 336 }); 337 clipboard.on('success', onCopySuccess); 338 if (window.document.getElementById('quarto-embedded-source-code-modal')) { 339 const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', { 340 text: getTextToCopy, 341 container: window.document.getElementById('quarto-embedded-source-code-modal') 342 }); 343 clipboardModal.on('success', onCopySuccess); 344 } 345 var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//); 346 var mailtoRegex = new RegExp(/^mailto:/); 347 var filterRegex = new RegExp('/' + window.location.host + '/'); 348 var isInternal = (href) => { 349 return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href); 350 } 351 // Inspect non-navigation links and adorn them if external 352 var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)'); 353 for (var i=0; i<links.length; i++) { 354 const link = links[i]; 355 if (!isInternal(link.href)) { 356 // undo the damage that might have been done by quarto-nav.js in the case of 357 // links that we want to consider external 358 if (link.dataset.originalHref !== undefined) { 359 link.href = link.dataset.originalHref; 360 } 361 } 362 } 363 function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) { 364 const config = { 365 allowHTML: true, 366 maxWidth: 500, 367 delay: 100, 368 arrow: false, 369 appendTo: function(el) { 370 return el.parentElement; 371 }, 372 interactive: true, 373 interactiveBorder: 10, 374 theme: 'quarto', 375 placement: 'bottom-start', 376 }; 377 if (contentFn) { 378 config.content = contentFn; 379 } 380 if (onTriggerFn) { 381 config.onTrigger = onTriggerFn; 382 } 383 if (onUntriggerFn) { 384 config.onUntrigger = onUntriggerFn; 385 } 386 window.tippy(el, config); 387 } 388 const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]'); 389 for (var i=0; i<noterefs.length; i++) { 390 const ref = noterefs[i]; 391 tippyHover(ref, function() { 392 // use id or data attribute instead here 393 let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href'); 394 try { href = new URL(href).hash; } catch {} 395 const id = href.replace(/^#\/?/, ""); 396 const note = window.document.getElementById(id); 397 if (note) { 398 return note.innerHTML; 399 } else { 400 return ""; 401 } 402 }); 403 } 404 const xrefs = window.document.querySelectorAll('a.quarto-xref'); 405 const processXRef = (id, note) => { 406 // Strip column container classes 407 const stripColumnClz = (el) => { 408 el.classList.remove("page-full", "page-columns"); 409 if (el.children) { 410 for (const child of el.children) {
411 stripColumnClz(child); 412 } 413 } 414 } 415 stripColumnClz(note) 416 if (id === null || id.startsWith('sec-')) { 417 // Special case sections, only their first couple elements 418 const container = document.createElement("div"); 419 if (note.children && note.children.length > 2) { 420 container.appendChild(note.children[0].cloneNode(true)); 421 for (let i = 1; i < note.children.length; i++) { 422 const child = note.children[i]; 423 if (child.tagName === "P" && child.innerText === "") { 424 continue; 425 } else { 426 container.appendChild(child.cloneNode(true)); 427 break; 428 } 429 } 430 if (window.Quarto?.typesetMath) { 431 window.Quarto.typesetMath(container); 432 } 433 return container.innerHTML 434 } else { 435 if (window.Quarto?.typesetMath) { 436 window.Quarto.typesetMath(note); 437 } 438 return note.innerHTML; 439 } 440 } else { 441 // Remove any anchor links if they are present 442 const anchorLink = note.querySelector('a.anchorjs-link'); 443 if (anchorLink) { 444 anchorLink.remove(); 445 } 446 if (window.Quarto?.typesetMath) { 447 window.Quarto.typesetMath(note); 448 } 449 if (note.classList.contains("callout")) { 450 return note.outerHTML; 451 } else { 452 return note.innerHTML; 453 } 454 } 455 } 456 for (var i=0; i<xrefs.length; i++) { 457 const xref = xrefs[i]; 458 tippyHover(xref, undefined, function(instance) { 459 instance.disable(); 460 let url = xref.getAttribute('href'); 461 let hash = undefined; 462 if (url.startsWith('#')) { 463 hash = url; 464 } else { 465 try { hash = new URL(url).hash; } catch {} 466 } 467 if (hash) { 468 const id = hash.replace(/^#\/?/, ""); 469 const note = window.document.getElementById(id); 470 if (note !== null) { 471 try { 472 const html = processXRef(id, note.cloneNode(true)); 473 instance.setContent(html); 474 } finally { 475 instance.enable(); 476 instance.show(); 477 } 478 } else { 479 // See if we can fetch this 480 fetch(url.split('#')[0]) 481 .then(res => res.text()) 482 .then(html => { 483 const parser = new DOMParser(); 484 const htmlDoc = parser.parseFromString(html, "text/html"); 485 const note = htmlDoc.getElementById(id); 486 if (note !== null) { 487 const html = processXRef(id, note); 488 instance.setContent(html); 489 } 490 }).finally(() => { 491 instance.enable(); 492 instance.show(); 493 }); 494 } 495 } else { 496 // See if we can fetch a full url (with no hash to target) 497 // This is a special case and we should probably do some content thinning / targeting 498 fetch(url) 499 .then(res => res.text()) 500 .then(html => { 501 const parser = new DOMParser(); 502 const htmlDoc = parser.parseFromString(html, "text/html"); 503 const note = htmlDoc.querySelector('main.content'); 504 if (note !== null) { 505 // This should only happen for chapter cross references 506 // (since there is no id in the URL) 507 // remove the first header 508 if (note.children.length > 0 && note.children[0].tagName === "HEADER") { 509 note.children[0].remove(); 510 } 511 const html = processXRef(null, note); 512 instance.setContent(html); 513 } 514 }).finally(() => { 515 instance.enable(); 516 instance.show(); 517 }); 518 } 519 }, function(instance) { 520 }); 521 } 522 let selectedAnnoteEl; 523 const selectorForAnnotation = ( cell, annotation) => { 524 let cellAttr = 'data-code-cell="' + cell + '"'; 525 let lineAttr = 'data-code-annotation="' + annotation + '"'; 526 const selector = 'span[' + cellAttr + '][' + lineAttr + ']'; 527 return selector; 528 } 529 const selectCodeLines = (annoteEl) => { 530 const doc = window.document; 531 const targetCell = annoteEl.getAttribute("data-target-cell"); 532 const targetAnnotation = annoteEl.getAttribute("data-target-annotation"); 533 const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation)); 534 const lines = annoteSpan.getAttribute("data-code-lines").split(","); 535 const lineIds = lines.map((line) => { 536 return targetCell + "-" + line; 537 }) 538 let top = null; 539 let height = null; 540 let parent = null; 541 if (lineIds.length > 0) { 542 //compute the position of the single el (top and bottom and make a div) 543 const el = window.document.getElementById(lineIds[0]); 544 top = el.offsetTop; 545 height = el.offsetHeight; 546 parent = el.parentElement.parentElement; 547 if (lineIds.length > 1) { 548 const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]); 549 const bottom = lastEl.offsetTop + lastEl.offsetHeight; 550 height = bottom - top; 551 } 552 if (top !== null && height !== null && parent !== null) { 553 // cook up a div (if necessary) and position it 554 let div = window.document.getElementById("code-annotation-line-highlight"); 555 if (div === null) { 556 div = window.document.createElement("div"); 557 div.setAttribute("id", "code-annotation-line-highlight"); 558 div.style.position = 'absolute'; 559 parent.appendChild(div); 560 } 561 div.style.top = top - 2 + "px"; 562 div.style.height = height + 4 + "px"; 563 div.style.left = 0; 564 let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter"); 565 if (gutterDiv === null) { 566 gutterDiv = window.document.createElement("div"); 567 gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter"); 568 gutterDiv.style.position = 'absolute'; 569 const codeCell = window.document.getElementById(targetCell); 570 const gutter = codeCell.querySelector('.code-annotation-gutter'); 571 gutter.appendChild(gutterDiv); 572 } 573 gutterDiv.style.top = top - 2 + "px"; 574 gutterDiv.style.height = height + 4 + "px"; 575 } 576 selectedAnnoteEl = annoteEl; 577 } 578 }; 579 const unselectCodeLines = () => { 580 const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"]; 581 elementsIds.forEach((elId) => { 582 const div = window.document.getElementById(elId); 583 if (div) { 584 div.remove(); 585 } 586 }); 587 selectedAnnoteEl = undefined; 588 }; 589 // Handle positioning of the toggle 590 window.addEventListener( 591 "resize", 592 throttle(() => { 593 elRect = undefined; 594 if (selectedAnnoteEl) { 595 selectCodeLines(selectedAnnoteEl); 596 } 597 }, 10) 598 ); 599 function throttle(fn, ms) { 600 let throttle = false;
601 let timer; 602 return (...args) => { 603 if(!throttle) { // first call gets through 604 fn.apply(this, args); 605 throttle = true; 606 } else { // all the others get throttled 607 if(timer) clearTimeout(timer); // cancel #2 608 timer = setTimeout(() => { 609 fn.apply(this, args); 610 timer = throttle = false; 611 }, ms); 612 } 613 }; 614 } 615 // Attach click handler to the DT 616 const annoteDls = window.document.querySelectorAll('dt[data-target-cell]'); 617 for (const annoteDlNode of annoteDls) { 618 annoteDlNode.addEventListener('click', (event) => { 619 const clickedEl = event.target; 620 if (clickedEl !== selectedAnnoteEl) { 621 unselectCodeLines(); 622 const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active'); 623 if (activeEl) { 624 activeEl.classList.remove('code-annotation-active'); 625 } 626 selectCodeLines(clickedEl); 627 clickedEl.classList.add('code-annotation-active'); 628 } else { 629 // Unselect the line 630 unselectCodeLines(); 631 clickedEl.classList.remove('code-annotation-active'); 632 } 633 }); 634 } 635 const findCites = (el) => { 636 const parentEl = el.parentElement; 637 if (parentEl) { 638 const cites = parentEl.dataset.cites; 639 if (cites) { 640 return { 641 el, 642 cites: cites.split(' ') 643 }; 644 } else { 645 return findCites(el.parentElement) 646 } 647 } else { 648 return undefined; 649 } 650 }; 651 var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]'); 652 for (var i=0; i<bibliorefs.length; i++) { 653 const ref = bibliorefs[i]; 654 const citeInfo = findCites(ref); 655 if (citeInfo) { 656 tippyHover(citeInfo.el, function() { 657 var popup = window.document.createElement('div'); 658 citeInfo.cites.forEach(function(cite) { 659 var citeDiv = window.document.createElement('div'); 660 citeDiv.classList.add('hanging-indent'); 661 citeDiv.classList.add('csl-entry'); 662 var biblioDiv = window.document.getElementById('ref-' + cite); 663 if (biblioDiv) { 664 citeDiv.innerHTML = biblioDiv.innerHTML; 665 } 666 popup.appendChild(citeDiv); 667 }); 668 return popup.innerHTML; 669 }); 670 } 671 } 672 }); 673 </script>
673 674</div> <!-- /content --> 675<footer class="footer"> 676 <div class="nav-footer"> 677 <div class="nav-footer-left"> 678<p><img src="./FishMIP_assets/UN_OceanDecadeLogo.png" alt="UN Ocean Decade Logo" style="height: 7.5em; vertical-align: middle;"></p> 679</div> 680 <div class="nav-footer-center"> 681<p><br>Copyright © 2025 <a href="https://github.com/Fish-MIP">FishMIP</a></p> 682</div> 683 <div class="nav-footer-right"> 684<p>Built using <a href="https://quarto.org/">Quarto</a><br>Report website issues <a href="https://github.com/Fish-MIP/Fish-MIP.github.io/issues">here</a></p> 685</div> 686 </div> 687</footer> 688 689 690 691 692</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.