Skip to content

A GitHub repository for a fictional company's website, serving as an educational platform in security, web design, and systems analysis and design.

License

Notifications You must be signed in to change notification settings

michaelborck-website/cloudcore

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

70 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> <meta charset="utf-8"> <meta name="generator" content="quarto-1.4.551"> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"> <title>CloudCore Networks</title> <style> code{white-space: pre-wrap;} span.smallcaps{font-variant: small-caps;} div.columns{display: flex; gap: min(4vw, 1.5em);} div.column{flex: auto; overflow-x: auto;} div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;} 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 quarto-dev/quarto-cli#4556 */ vertical-align: middle; } /* CSS for syntax highlighting */ pre > code.sourceCode { white-space: pre; position: relative; } pre > code.sourceCode > span { line-height: 1.25; } pre > code.sourceCode > span:empty { height: 1.2em; } .sourceCode { overflow: visible; } code.sourceCode > span { color: inherit; text-decoration: inherit; } div.sourceCode { margin: 1em 0; } pre.sourceCode { margin: 0; } @media screen { div.sourceCode { overflow: auto; } } @media print { pre > code.sourceCode { white-space: pre-wrap; } pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; } } pre.numberSource code { counter-reset: source-line 0; } pre.numberSource code > span { position: relative; left: -4em; counter-increment: source-line; } pre.numberSource code > span > a:first-child::before { content: counter(source-line); position: relative; left: -1em; text-align: right; vertical-align: baseline; border: none; display: inline-block; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; padding: 0 4px; width: 4em; } pre.numberSource { margin-left: 3em; padding-left: 4px; } div.sourceCode { } @media screen { pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; } } </style> <script src="site_libs/quarto-nav/quarto-nav.js"></script> <script src="site_libs/quarto-nav/headroom.min.js"></script> <script src="site_libs/clipboard/clipboard.min.js"></script> <script src="site_libs/quarto-search/autocomplete.umd.js"></script> <script src="site_libs/quarto-search/fuse.min.js"></script> <script src="site_libs/quarto-search/quarto-search.js"></script> <meta name="quarto:offset" content="./"> <script src="site_libs/quarto-html/quarto.js"></script> <script src="site_libs/quarto-html/popper.min.js"></script> <script src="site_libs/quarto-html/tippy.umd.min.js"></script> <script src="site_libs/quarto-html/anchor.min.js"></script> <link href="site_libs/quarto-html/tippy.css" rel="stylesheet"> <link href="site_libs/quarto-html/quarto-syntax-highlighting.css" rel="stylesheet" id="quarto-text-highlighting-styles"> <script src="site_libs/bootstrap/bootstrap.min.js"></script> <link href="site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet"> <link href="site_libs/bootstrap/bootstrap.min.css" rel="stylesheet" id="quarto-bootstrap" data-mode="light"> <script id="quarto-search-options" type="application/json">{ "location": "navbar", "copy-button": false, "collapse-after": 3, "panel-placement": "end", "type": "overlay", "limit": 50, "keyboard-shortcut": [ "f", "/", "s" ], "show-item-context": false, "language": { "search-no-results-text": "No results", "search-matching-documents-text": "matching documents", "search-copy-link-title": "Copy link to search", "search-hide-matches-text": "Hide additional matches", "search-more-match-text": "more match in this document", "search-more-matches-text": "more matches in this document", "search-clear-button-title": "Clear", "search-text-placeholder": "", "search-detached-cancel-button-title": "Cancel", "search-submit-button-title": "Submit", "search-label": "Search" } }</script> <script src="./scripts/simple-timeline-access.js"></script> <link rel="stylesheet" href="styles.css"> </head> <body class="nav-fixed"> <div id="quarto-search-results"></div> <header id="quarto-header" class="headroom fixed-top"> <nav class="navbar navbar-expand-lg " data-bs-theme="dark"> <div class="navbar-container container-fluid"> <div class="navbar-brand-container mx-auto"> <a class="navbar-brand" href="./index.html"> <span class="navbar-title">CloudCore Networks</span> </a> </div> <div id="quarto-search" class="" title="Search"></div> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarCollapse"> <ul class="navbar-nav navbar-nav-scroll me-auto"> <li class="nav-item"> <a class="nav-link" href="./index.html"> <span class="menu-text">Home</span></a> </li> <li class="nav-item dropdown "> <a class="nav-link dropdown-toggle" href="#" id="nav-menu-solutions" role="button" data-bs-toggle="dropdown" aria-expanded="false"> <span class="menu-text">Solutions</span> </a> <ul class="dropdown-menu" aria-labelledby="nav-menu-solutions"> <li> <a class="dropdown-item" href="./index.html#solutions"> <span class="dropdown-text">Cloud Hosting</span></a> </li> <li> <a class="dropdown-item" href="./index.html#solutions"> <span class="dropdown-text">Managed Services</span></a> </li> <li> <a class="dropdown-item" href="./index.html#solutions"> <span class="dropdown-text">Security &amp; Compliance</span></a> </li> </ul> </li> <li class="nav-item"> <a class="nav-link" href="./about.html"> <span class="menu-text">About</span></a> </li> <li class="nav-item"> <a class="nav-link" href="./pricing.html"> <span class="menu-text">Pricing</span></a> </li> <li class="nav-item dropdown "> <a class="nav-link dropdown-toggle" href="#" id="nav-menu-resources" role="button" data-bs-toggle="dropdown" aria-expanded="false"> <span class="menu-text">Resources</span> </a> <ul class="dropdown-menu" aria-labelledby="nav-menu-resources"> <li> <a class="dropdown-item" href="./docs/policies.html"> <span class="dropdown-text">Documentation</span></a> </li> <li> <a class="dropdown-item" href="./docs/support.html"> <span class="dropdown-text">Support Center</span></a> </li> <li> <a class="dropdown-item" href="./blog/index.html"> <span class="dropdown-text">Blog</span></a> </li> <li> <a class="dropdown-item" href="./chatbots/index.html"> <span class="dropdown-text">Customer Portal</span></a> </li> </ul> </li> <li class="nav-item dropdown "> <a class="nav-link dropdown-toggle" href="#" id="nav-menu-docs" role="button" data-bs-toggle="dropdown" aria-expanded="false"> <span class="menu-text">Docs</span> </a> <ul class="dropdown-menu" aria-labelledby="nav-menu-docs"> <li> <a class="dropdown-item" href="./docs/interviews.html"> <span class="dropdown-text">Transcripts</span></a> </li> <li> <a class="dropdown-item" href="./docs/policies.html"> <span class="dropdown-text">Policies</span></a> </li> <li> <a class="dropdown-item" href="./docs/support.html"> <span class="dropdown-text">Other</span></a> </li> <li> <a class="dropdown-item" href="./docs/articles.html"> <span class="dropdown-text">In the News</span></a> </li> <li> <a class="dropdown-item" href="./docs/logs.html"> <span class="dropdown-text">Logs</span></a> </li> </ul> </li> </ul> <ul class="navbar-nav navbar-nav-scroll ms-auto"> <li class="nav-item"> <a class="nav-link" href="./legal.html"> <span class="menu-text">Educational Site</span></a> </li> <li class="nav-item"> <a class="nav-link" href="./contact.html"> <span class="menu-text">Contact Us</span></a> </li> </ul> </div> <!-- /navcollapse --> <div class="quarto-navbar-tools"> </div> </div> <!-- /container-fluid --> </nav> </header> <!-- content --> <div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar"> <!-- sidebar --> <!-- margin-sidebar --> <div id="quarto-margin-sidebar" class="sidebar margin-sidebar"> <nav id="TOC" role="doc-toc" class="toc-active"> <h2 id="toc-title">On this page</h2> <ul> <li><a href="#contributing-to-cloudcore-networks-educational-platform" id="toc-contributing-to-cloudcore-networks-educational-platform" class="nav-link active" data-scroll-target="#contributing-to-cloudcore-networks-educational-platform">Contributing to CloudCore Networks Educational Platform</a> <ul class="collapse"> <li><a href="#code-of-conduct" id="toc-code-of-conduct" class="nav-link" data-scroll-target="#code-of-conduct">Code of Conduct</a></li> <li><a href="#how-to-contribute" id="toc-how-to-contribute" class="nav-link" data-scroll-target="#how-to-contribute">How to Contribute</a> <ul class="collapse"> <li><a href="#reporting-bugs" id="toc-reporting-bugs" class="nav-link" data-scroll-target="#reporting-bugs">Reporting Bugs</a></li> <li><a href="#suggesting-enhancements" id="toc-suggesting-enhancements" class="nav-link" data-scroll-target="#suggesting-enhancements">Suggesting Enhancements</a></li> <li><a href="#pull-requests" id="toc-pull-requests" class="nav-link" data-scroll-target="#pull-requests">Pull Requests</a></li> </ul></li> <li><a href="#setting-up-your-environment" id="toc-setting-up-your-environment" class="nav-link" data-scroll-target="#setting-up-your-environment">Setting Up Your Environment</a></li> <li><a href="#questions-or-additional-help" id="toc-questions-or-additional-help" class="nav-link" data-scroll-target="#questions-or-additional-help">Questions or Additional Help</a></li> </ul></li> </ul> </nav> </div> <!-- main --> <main class="content" id="quarto-document-content"> <section id="contributing-to-cloudcore-networks-educational-platform" class="level1"> <h1>Contributing to CloudCore Networks Educational Platform</h1> <p>We are thrilled that you are interested in contributing to the CloudCore Networks Educational Platform! This document provides guidelines for contributions to this project. We want to create a welcoming environment for everyone interested in contributing, so we ask that you follow these guidelines to ensure a smooth collaboration process.</p> <section id="code-of-conduct" class="level2"> <h2 class="anchored" data-anchor-id="code-of-conduct">Code of Conduct</h2> <p>By participating in this project, you agree to uphold the standards of our Code of Conduct. Please take a moment to read <a href="./CODE_OF_CONDUCT.html">CODE_OF_CONDUCT.md</a> to understand what behaviors will and will not be tolerated.</p> </section> <section id="how-to-contribute" class="level2"> <h2 class="anchored" data-anchor-id="how-to-contribute">How to Contribute</h2> <p>Contributing to this platform can be in various forms, such as submitting bug reports, suggesting enhancements, and creating pull requests with updates or new features.</p> <section id="reporting-bugs" class="level3"> <h3 class="anchored" data-anchor-id="reporting-bugs">Reporting Bugs</h3> <p>Before submitting a bug report, please check the <a href="https://github.com/teaching-repositories/cloudcore/issues">issue tracker</a> to see if it has already been reported. If it is new, open a new issue with the following:</p> <ul> <li><strong>Descriptive title</strong> - Use a clear and descriptive title to identify the problem.</li> <li><strong>Detailed description</strong> - Provide a more detailed explanation of the issue.</li> <li><strong>Reproduction steps</strong> - List the steps to reproduce the behaviour.</li> <li><strong>Expected behaviour</strong> - Describe what you expected to happen.</li> <li><strong>Actual behaviour</strong> - Describe what actually happened. Include screenshots if possible.</li> <li><strong>Environment details</strong> - Add information like the browser version, Quarto version, and OS.</li> </ul> </section> <section id="suggesting-enhancements" class="level3"> <h3 class="anchored" data-anchor-id="suggesting-enhancements">Suggesting Enhancements</h3> <p>Enhancement suggestions are also welcome. Please open an issue and provide:</p> <ul> <li><strong>Descriptive title</strong> - Use a clear and descriptive title for the enhancement suggestion.</li> <li><strong>Detailed description</strong> - Provide a detailed explanation of the suggested enhancement.</li> <li><strong>Possible implementation</strong> - Discuss a possible approach to implement the enhancement, if applicable.</li> <li><strong>Additional context</strong> - Add any other context or screen shots about the feature request.</li> </ul> </section> <section id="pull-requests" class="level3"> <h3 class="anchored" data-anchor-id="pull-requests">Pull Requests</h3> <p>We love direct contributions to the codebase! Here’s a quick guide on how to make a clean pull request:</p> <ol type="1"> <li><strong>Fork the repository</strong> - Start by forking the <a href="https://github.com/teaching-repositories/cloudcore">repository</a> on GitHub.</li> <li><strong>Create a branch</strong> - Create a branch in your fork for your contributions.</li> <li><strong>Make your changes</strong> - Add your changes to this branch, adhering to the coding standards and documentation style of the project.</li> <li><strong>Write descriptive commit messages</strong> - Use clear and descriptive messages for your commits.</li> <li><strong>Test your changes</strong> - Ensure your changes do not break any existing functionality and add any relevant tests if introducing new features.</li> <li><strong>Submit a pull request</strong> - Push your changes to your fork and then submit a pull request to the main repository. Provide a clear and contextually rich description of what your pull request does.</li> </ol> </section> </section> <section id="setting-up-your-environment" class="level2"> <h2 class="anchored" data-anchor-id="setting-up-your-environment">Setting Up Your Environment</h2> <p>Here’s a quick primer on setting up your development environment to contribute to this project:</p> <div class="sourceCode" id="cb1"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">git</span> clone https://github.com/teaching-repositories/cloudcore.git</span> <span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="bu">cd</span> cloudcore</span> <span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="co"># install dependencies, setup environment, etc.</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </section> <section id="questions-or-additional-help" class="level2"> <h2 class="anchored" data-anchor-id="questions-or-additional-help">Questions or Additional Help</h2> <p>If you need more information or assistance, feel free to reach out through our community forums or directly on the project’s issues page.</p> <p>Thank you for contributing to CloudCore Networks’ Educational Platform! We look forward to your contributions and are excited to see what you bring to this educational initiative.</p> </section> </section> </main> <!-- /main --> <script id="quarto-html-after-body" type="application/javascript"> window.document.addEventListener("DOMContentLoaded", function (event) { const toggleBodyColorMode = (bsSheetEl) => { const mode = bsSheetEl.getAttribute("data-mode"); const bodyEl = window.document.querySelector("body"); if (mode === "dark") { bodyEl.classList.add("quarto-dark"); bodyEl.classList.remove("quarto-light"); } else { bodyEl.classList.add("quarto-light"); bodyEl.classList.remove("quarto-dark"); } } const toggleBodyColorPrimary = () => { const bsSheetEl = window.document.querySelector("link#quarto-bootstrap"); if (bsSheetEl) { toggleBodyColorMode(bsSheetEl); } } toggleBodyColorPrimary(); const icon = ""; const anchorJS = new window.AnchorJS(); anchorJS.options = { placement: 'right', 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; } }); clipboard.on('success', function(e) { // button target const button = e.trigger; // don't keep focus button.blur(); // flash "checked" button.classList.add('code-copy-button-checked'); var currentTitle = button.getAttribute("title"); button.setAttribute("title", "Copied!"); let tooltip; if (window.bootstrap) { button.setAttribute("data-bs-toggle", "tooltip"); button.setAttribute("data-bs-placement", "left"); button.setAttribute("data-bs-title", "Copied!"); tooltip = new bootstrap.Tooltip(button, { trigger: "manual", customClass: "code-copy-button-tooltip", offset: [0, -8]}); tooltip.show(); } setTimeout(function() { if (tooltip) { tooltip.hide(); button.removeAttribute("data-bs-title"); button.removeAttribute("data-bs-toggle"); button.removeAttribute("data-bs-placement"); } button.setAttribute("title", currentTitle); button.classList.remove('code-copy-button-checked'); }, 1000); // clear code selection e.clearSelection(); }); var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//); var mailtoRegex = new RegExp(/^mailto:/); var filterRegex = new RegExp("https:\/\/cloudcore\.serveur\.au"); var isInternal = (href) => { return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href); } // Inspect non-navigation links and adorn them if external	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)'); for (var i=0; i<links.length; i++) { const link = links[i]; if (!isInternal(link.href)) { // undo the damage that might have been done by quarto-nav.js in the case of // links that we want to consider external if (link.dataset.originalHref !== undefined) { link.href = link.dataset.originalHref; } } } function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) { const config = { allowHTML: true, maxWidth: 500, delay: 100, arrow: false, appendTo: function(el) { return el.parentElement; }, interactive: true, interactiveBorder: 10, theme: 'quarto', 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"]'); for (var i=0; i<noterefs.length; i++) { const ref = noterefs[i]; tippyHover(ref, function() { // use id or data attribute instead here let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href'); try { href = new URL(href).hash; } catch {} const id = href.replace(/^#\/?/, ""); const note = window.document.getElementById(id); if (note) { return note.innerHTML; } else { return ""; } }); } 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<xrefs.length; i++) { const xref = xrefs[i]; tippyHover(xref, undefined, function(instance) { instance.disable(); let url = xref.getAttribute('href'); let hash = undefined; if (url.startsWith('#')) { hash = url; } else { try { hash = new URL(url).hash; } catch {} } if (hash) { const id = hash.replace(/^#\/?/, ""); const note = window.document.getElementById(id); if (note !== null) { try { const html = processXRef(id, note.cloneNode(true)); instance.setContent(html); } finally { instance.enable(); instance.show(); } } else { // See if we can fetch this fetch(url.split('#')[0]) .then(res => 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) { const cites = parentEl.dataset.cites; if (cites) { return { el, cites: cites.split(' ') }; } else { return findCites(el.parentElement) } } else { return undefined; } }; var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]'); for (var i=0; i<bibliorefs.length; i++) { const ref = bibliorefs[i]; const citeInfo = findCites(ref); if (citeInfo) { tippyHover(citeInfo.el, function() { var popup = window.document.createElement('div'); citeInfo.cites.forEach(function(cite) { var citeDiv = window.document.createElement('div'); citeDiv.classList.add('hanging-indent'); citeDiv.classList.add('csl-entry'); var biblioDiv = window.document.getElementById('ref-' + cite); if (biblioDiv) { citeDiv.innerHTML = biblioDiv.innerHTML; } popup.appendChild(citeDiv); }); return popup.innerHTML; }); } } }); </script> </div> <!-- /content --> <footer class="footer"> <div class="nav-footer"> <div class="nav-footer-left"> <p><strong>CloudCore Networks</strong><br> Enterprise cloud infrastructure solutions<br> ISO 27001:2013 Certified</p> </div> <div class="nav-footer-center"> <p><strong>Contact</strong><br> Perth: 11 Newcastle St, WA 6000<br> Malaga: 4 Millrose Dr, WA 6090<br> Email: info@cloudcore.com.au<br> Phone: +61 (8) 4587 8990</p> </div> <div class="nav-footer-right"> <p><strong>Legal</strong><br> <a href="./legal.html">Legal Disclaimer</a> | <a href="./legal.html#privacy-data-collection">Privacy</a><br> <a href="./legal.html#license">MIT License</a> | <a href="./legal.html#security-notice">Security Notice</a></p> <p>© 2024 CloudCore Networks (Fictional). All rights reserved.<br> <a href="./credits.html">Open Source Credits</a> | <a href="https://lordicon.com/">Icons by Lordicon.com</a> | <a href="./legal.html">Educational Disclaimer</a></p> </div> </div> </footer> </body></html>

About

A GitHub repository for a fictional company's website, serving as an educational platform in security, web design, and systems analysis and design.

Topics

License

Code of conduct

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •