Merge with main
Merge branch 'main' into merel_content
This commit is contained in:
commit
24c8dac720
@ -5,6 +5,7 @@ steps:
|
|||||||
- name: build quarto site
|
- name: build quarto site
|
||||||
image: cynkra/quarto-r:1.4.169-4.3.1
|
image: cynkra/quarto-r:1.4.169-4.3.1
|
||||||
commands:
|
commands:
|
||||||
|
- 'echo "install.packages(\"rmarkdown\")" | r -'
|
||||||
- quarto render
|
- quarto render
|
||||||
- name: deploy to running app instance
|
- name: deploy to running app instance
|
||||||
image: git.coopcloud.tech/coop-cloud/docker-cp-deploy:latest
|
image: git.coopcloud.tech/coop-cloud/docker-cp-deploy:latest
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
|
||||||
|
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="generator" content="quarto-1.2.475">
|
<meta name="generator" content="quarto-1.3.353">
|
||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
|
|||||||
ul.task-list{list-style: none;}
|
ul.task-list{list-style: none;}
|
||||||
ul.task-list li input[type="checkbox"] {
|
ul.task-list li input[type="checkbox"] {
|
||||||
width: 0.8em;
|
width: 0.8em;
|
||||||
margin: 0 0.8em 0.2em -1.6em;
|
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@ -74,29 +74,31 @@ ul.task-list li input[type="checkbox"] {
|
|||||||
<span class="navbar-title">WASH Web</span>
|
<span class="navbar-title">WASH Web</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</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(); }">
|
<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>
|
<span class="navbar-toggler-icon"></span>
|
||||||
</button>
|
</button>
|
||||||
<div class="collapse navbar-collapse" id="navbarCollapse">
|
<div class="collapse navbar-collapse" id="navbarCollapse">
|
||||||
<ul class="navbar-nav navbar-nav-scroll me-auto">
|
<ul class="navbar-nav navbar-nav-scroll me-auto">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="./index.html">
|
<a class="nav-link" href="./index.html" rel="" target="">
|
||||||
<span class="menu-text">Home</span></a>
|
<span class="menu-text">Home</span></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="./vision.html">
|
<a class="nav-link" href="./vision.html" rel="" target="">
|
||||||
<span class="menu-text">Vision</span></a>
|
<span class="menu-text">Vision</span></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link active" href="./contact.html" aria-current="page">
|
<a class="nav-link active" href="./contact.html" rel="" target="" aria-current="page">
|
||||||
<span class="menu-text">Contact</span></a>
|
<span class="menu-text">Contact</span></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="./posts.html">
|
<a class="nav-link" href="./posts.html" rel="" target="">
|
||||||
<span class="menu-text">News</span></a>
|
<span class="menu-text">News</span></a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div id="quarto-search" class="" title="Search"></div>
|
<div class="quarto-navbar-tools ms-auto">
|
||||||
|
</div>
|
||||||
</div> <!-- /navcollapse -->
|
</div> <!-- /navcollapse -->
|
||||||
</div> <!-- /container-fluid -->
|
</div> <!-- /container-fluid -->
|
||||||
</nav>
|
</nav>
|
||||||
@ -139,12 +141,12 @@ ul.task-list li input[type="checkbox"] {
|
|||||||
<section id="nicolas-dickinson---wash-web-lead" class="level4">
|
<section id="nicolas-dickinson---wash-web-lead" class="level4">
|
||||||
<h4 class="anchored" data-anchor-id="nicolas-dickinson---wash-web-lead">Nicolas Dickinson - WASH Web Lead</h4>
|
<h4 class="anchored" data-anchor-id="nicolas-dickinson---wash-web-lead">Nicolas Dickinson - WASH Web Lead</h4>
|
||||||
<p>Founder of <a href="#0">WASHNote</a>. With over 15 years of experience in the WASH sector, Nick is highly specialized in the development of international and regional monitoring of WASH commitments and their enabling environments, providing country-led monitoring and evaluation of services, and facilitating trainings to a range of different organizations. Above all, he firmly believes in the need for making better use of data and digital systems to advance towards reaching SDG 6: clean water and sanitation for all by 2030.</p>
|
<p>Founder of <a href="#0">WASHNote</a>. With over 15 years of experience in the WASH sector, Nick is highly specialized in the development of international and regional monitoring of WASH commitments and their enabling environments, providing country-led monitoring and evaluation of services, and facilitating trainings to a range of different organizations. Above all, he firmly believes in the need for making better use of data and digital systems to advance towards reaching SDG 6: clean water and sanitation for all by 2030.</p>
|
||||||
<p><a href="dickinson@washnote.com">Email</a> | <a href="https://www.linkedin.com/in/nicolasdickinson/">LinkedIn</a></p>
|
<p><a href="mailto:dickinson@washnote.com" target="_blank">Email</a> | <a href="https://www.linkedin.com/in/nicolasdickinson/">LinkedIn</a></p>
|
||||||
</section>
|
</section>
|
||||||
<section id="merel-laauwen---wash-web-coordinator" class="level4">
|
<section id="merel-laauwen---wash-web-coordinator" class="level4">
|
||||||
<h4 class="anchored" data-anchor-id="merel-laauwen---wash-web-coordinator">Merel Laauwen - WASH Web Coordinator</h4>
|
<h4 class="anchored" data-anchor-id="merel-laauwen---wash-web-coordinator">Merel Laauwen - WASH Web Coordinator</h4>
|
||||||
<p>Merel works as an independent consultant in the WASH sector. Her work spans a variety of topics, from WASH systems strengthening to disaster preparedness in humanitarian settings. She graduated from the University of Oxford with an MSc in Water Science, Policy and Management, where her dissertation research focused on the use of systems thinking in the implementation of rural water treatment.</p>
|
<p>Merel works as an independent consultant in the WASH sector. Her work spans a variety of topics, from WASH systems strengthening to disaster preparedness in humanitarian settings. She graduated from the University of Oxford with an MSc in Water Science, Policy and Management, where her dissertation research focused on the use of systems thinking in the implementation of rural water treatment.</p>
|
||||||
<p><a href="merel@lwn.earth">Email</a> | <a href="https://www.linkedin.com/in/merel-laauwen/">LinkedIn</a></p>
|
<p><a href="mailto:merel@lwn.earth" target="_blank">Email</a> | <a href="https://www.linkedin.com/in/merel-laauwen/">LinkedIn</a></p>
|
||||||
|
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
@ -178,9 +180,23 @@ window.document.addEventListener("DOMContentLoaded", function (event) {
|
|||||||
icon: icon
|
icon: icon
|
||||||
};
|
};
|
||||||
anchorJS.add('.anchored');
|
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', {
|
const clipboard = new window.ClipboardJS('.code-copy-button', {
|
||||||
target: function(trigger) {
|
text: function(trigger) {
|
||||||
return trigger.previousElementSibling;
|
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) {
|
clipboard.on('success', function(e) {
|
||||||
@ -245,6 +261,92 @@ window.document.addEventListener("DOMContentLoaded", function (event) {
|
|||||||
return note.innerHTML;
|
return note.innerHTML;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
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";
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
// 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 findCites = (el) => {
|
||||||
const parentEl = el.parentElement;
|
const parentEl = el.parentElement;
|
||||||
if (parentEl) {
|
if (parentEl) {
|
||||||
|
144
_site/index.html
144
_site/index.html
@ -2,7 +2,7 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
|
||||||
|
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="generator" content="quarto-1.2.475">
|
<meta name="generator" content="quarto-1.3.353">
|
||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
|
|||||||
ul.task-list{list-style: none;}
|
ul.task-list{list-style: none;}
|
||||||
ul.task-list li input[type="checkbox"] {
|
ul.task-list li input[type="checkbox"] {
|
||||||
width: 0.8em;
|
width: 0.8em;
|
||||||
margin: 0 0.8em 0.2em -1.6em;
|
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@ -74,29 +74,31 @@ ul.task-list li input[type="checkbox"] {
|
|||||||
<span class="navbar-title">WASH Web</span>
|
<span class="navbar-title">WASH Web</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</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(); }">
|
<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>
|
<span class="navbar-toggler-icon"></span>
|
||||||
</button>
|
</button>
|
||||||
<div class="collapse navbar-collapse" id="navbarCollapse">
|
<div class="collapse navbar-collapse" id="navbarCollapse">
|
||||||
<ul class="navbar-nav navbar-nav-scroll me-auto">
|
<ul class="navbar-nav navbar-nav-scroll me-auto">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link active" href="./index.html" aria-current="page">
|
<a class="nav-link active" href="./index.html" rel="" target="" aria-current="page">
|
||||||
<span class="menu-text">Home</span></a>
|
<span class="menu-text">Home</span></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="./vision.html">
|
<a class="nav-link" href="./vision.html" rel="" target="">
|
||||||
<span class="menu-text">Vision</span></a>
|
<span class="menu-text">Vision</span></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="./contact.html">
|
<a class="nav-link" href="./contact.html" rel="" target="">
|
||||||
<span class="menu-text">Contact</span></a>
|
<span class="menu-text">Contact</span></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="./posts.html">
|
<a class="nav-link" href="./posts.html" rel="" target="">
|
||||||
<span class="menu-text">News</span></a>
|
<span class="menu-text">News</span></a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div id="quarto-search" class="" title="Search"></div>
|
<div class="quarto-navbar-tools ms-auto">
|
||||||
|
</div>
|
||||||
</div> <!-- /navcollapse -->
|
</div> <!-- /navcollapse -->
|
||||||
</div> <!-- /container-fluid -->
|
</div> <!-- /container-fluid -->
|
||||||
</nav>
|
</nav>
|
||||||
@ -110,14 +112,13 @@ ul.task-list li input[type="checkbox"] {
|
|||||||
<h2 id="toc-title">On this page</h2>
|
<h2 id="toc-title">On this page</h2>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#our-vision" id="toc-our-vision" class="nav-link active" data-scroll-target="#our-vision">Our vision</a></li>
|
<li><a href="#working-group-initiatives" id="toc-working-group-initiatives" class="nav-link active" data-scroll-target="#working-group-initiatives">Working group initiatives</a>
|
||||||
<li><a href="#working-groups" id="toc-working-groups" class="nav-link" data-scroll-target="#working-groups">Working groups</a>
|
|
||||||
<ul class="collapse">
|
<ul class="collapse">
|
||||||
<li><a href="#social-justice" id="toc-social-justice" class="nav-link" data-scroll-target="#social-justice">Social Justice</a></li>
|
<li><a href="#social-justice" id="toc-social-justice" class="nav-link" data-scroll-target="#social-justice">Social Justice</a></li>
|
||||||
<li><a href="#using-data-better" id="toc-using-data-better" class="nav-link" data-scroll-target="#using-data-better">Using Data Better</a></li>
|
<li><a href="#using-data-better" id="toc-using-data-better" class="nav-link" data-scroll-target="#using-data-better">Using Data Better</a></li>
|
||||||
<li><a href="#systems-thinking" id="toc-systems-thinking" class="nav-link" data-scroll-target="#systems-thinking">Systems Thinking</a></li>
|
<li><a href="#systems-thinking" id="toc-systems-thinking" class="nav-link" data-scroll-target="#systems-thinking">Systems Thinking</a></li>
|
||||||
<li><a href="#accountability-4ws" id="toc-accountability-4ws" class="nav-link" data-scroll-target="#accountability-4ws">Accountability: 4Ws</a></li>
|
<li><a href="#accountability-4ws" id="toc-accountability-4ws" class="nav-link" data-scroll-target="#accountability-4ws">Accountability: 4Ws</a></li>
|
||||||
<li><a href="#who-can-take-part" id="toc-who-can-take-part" class="nav-link" data-scroll-target="#who-can-take-part">Who can take part?</a></li>
|
<li><a href="#join" id="toc-join" class="nav-link" data-scroll-target="#join">Who can take part?</a></li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
@ -143,15 +144,14 @@ ul.task-list li input[type="checkbox"] {
|
|||||||
</header>
|
</header>
|
||||||
|
|
||||||
<p>WASH Web is a set of participatory initiatives to give you and everyone you know better access to water, sanitation and hygiene information. This web page is where you can find more information about taking part in various ways.</p>
|
<p>WASH Web is a set of participatory initiatives to give you and everyone you know better access to water, sanitation and hygiene information. This web page is where you can find more information about taking part in various ways.</p>
|
||||||
<section id="our-vision" class="level2">
|
<p>The WASH Web is made up of people and organizations that work to fill the water, sanitation and hygiene (WASH) gap to make data discoverable, usable and representative. WASH Web is meant to serve as an open platform and requires diverse inputs to work. Our vision cannot be realized without community support.</p>
|
||||||
<h2 class="anchored" data-anchor-id="our-vision">Our vision</h2>
|
<p><a href="#join">Please join us to contribute.</a></p>
|
||||||
<p>WASH Web helps organizations that work to fill the water, sanitation and hygiene (WASH) gap, by offering training and data management services to make data discoverable, usable and representative to facilitate an improved data environment which contributes to decision-making at scale. We aim to facilitate collaboration and working group discussions through four different “initiatives”. WASH Web is meant to serve as an open platform and requires input from others in the sector. Our vision cannot be realized without community support.</p>
|
<section id="working-group-initiatives" class="level1">
|
||||||
</section>
|
<h1>Working group initiatives</h1>
|
||||||
<section id="working-groups" class="level1">
|
<p>The work groups facilitate collaboration and discussions on four different initiatives for an improved and healthy data environment.</p>
|
||||||
<h1>Working groups</h1>
|
|
||||||
<section id="social-justice" class="level2">
|
<section id="social-justice" class="level2">
|
||||||
<h2 class="anchored" data-anchor-id="social-justice">Social Justice</h2>
|
<h2 class="anchored" data-anchor-id="social-justice">Social Justice</h2>
|
||||||
<p>Access to safe drinking water is a basic human right, and access to WASH systems is a social justice issue. What information is needed to improve access for marginalized people? Are there specific ethical issues around data collection and use that need to be addressed?</p>
|
<p>Access to safe drinking water is a basic human right, and access to WASH systems is a social justice issue. What information is needed to improve access for marginalized people? What specific ethical issues around data collection, privacy, data ownership, and use of data need to be addressed?</p>
|
||||||
</section>
|
</section>
|
||||||
<section id="using-data-better" class="level2">
|
<section id="using-data-better" class="level2">
|
||||||
<h2 class="anchored" data-anchor-id="using-data-better">Using Data Better</h2>
|
<h2 class="anchored" data-anchor-id="using-data-better">Using Data Better</h2>
|
||||||
@ -163,10 +163,10 @@ ul.task-list li input[type="checkbox"] {
|
|||||||
</section>
|
</section>
|
||||||
<section id="accountability-4ws" class="level2">
|
<section id="accountability-4ws" class="level2">
|
||||||
<h2 class="anchored" data-anchor-id="accountability-4ws">Accountability: 4Ws</h2>
|
<h2 class="anchored" data-anchor-id="accountability-4ws">Accountability: 4Ws</h2>
|
||||||
<p>The actors accountable for water and sanitation decision-making are often dispersed throughout diverse organizations. As a result, there is a scattered and disconnected WASH data ecosystem. The Registry aims to offer an overview of <strong>who</strong> is <strong>where, when,</strong> and doing <strong>what</strong> for formal change agents.</p>
|
<p>The actors accountable for water and sanitation decision-making are often dispersed throughout diverse organizations. As a result, there is a scattered and disconnected WASH data ecosystem. It is proposed to make a WASH Registry to offer an overview of <strong>who</strong> is <strong>where, when,</strong> and doing <strong>what</strong> for formal change agents. Can this make the WASH sector more accountable?</p>
|
||||||
</section>
|
</section>
|
||||||
<section id="who-can-take-part" class="level2">
|
<section id="join" class="level2">
|
||||||
<h2 class="anchored" data-anchor-id="who-can-take-part">Who can take part?</h2>
|
<h2 class="anchored" data-anchor-id="join">Who can take part?</h2>
|
||||||
<p>Citizens, suppliers, NGOs and governments can take part to better use evidence to and to make information accessible.</p>
|
<p>Citizens, suppliers, NGOs and governments can take part to better use evidence to and to make information accessible.</p>
|
||||||
<p>Are you interested in one of these initiatives? Please get in touch or add an issue on Github.</p>
|
<p>Are you interested in one of these initiatives? Please get in touch or add an issue on Github.</p>
|
||||||
<p>Contact form: <a href="https://washnote.com/contact/" class="uri">https://washnote.com/contact/</a></p>
|
<p>Contact form: <a href="https://washnote.com/contact/" class="uri">https://washnote.com/contact/</a></p>
|
||||||
@ -204,9 +204,23 @@ window.document.addEventListener("DOMContentLoaded", function (event) {
|
|||||||
icon: icon
|
icon: icon
|
||||||
};
|
};
|
||||||
anchorJS.add('.anchored');
|
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', {
|
const clipboard = new window.ClipboardJS('.code-copy-button', {
|
||||||
target: function(trigger) {
|
text: function(trigger) {
|
||||||
return trigger.previousElementSibling;
|
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) {
|
clipboard.on('success', function(e) {
|
||||||
@ -271,6 +285,92 @@ window.document.addEventListener("DOMContentLoaded", function (event) {
|
|||||||
return note.innerHTML;
|
return note.innerHTML;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
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";
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
// 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 findCites = (el) => {
|
||||||
const parentEl = el.parentElement;
|
const parentEl = el.parentElement;
|
||||||
if (parentEl) {
|
if (parentEl) {
|
||||||
|
121
_site/posts.html
121
_site/posts.html
@ -2,7 +2,7 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
|
||||||
|
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="generator" content="quarto-1.2.475">
|
<meta name="generator" content="quarto-1.3.353">
|
||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
|
|||||||
ul.task-list{list-style: none;}
|
ul.task-list{list-style: none;}
|
||||||
ul.task-list li input[type="checkbox"] {
|
ul.task-list li input[type="checkbox"] {
|
||||||
width: 0.8em;
|
width: 0.8em;
|
||||||
margin: 0 0.8em 0.2em -1.6em;
|
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@ -90,6 +90,7 @@ ul.task-list li input[type="checkbox"] {
|
|||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml-full.js" type="text/javascript"></script>
|
<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml-full.js" type="text/javascript"></script>
|
||||||
|
|
||||||
<link rel="stylesheet" href="styles.css">
|
<link rel="stylesheet" href="styles.css">
|
||||||
@ -106,29 +107,31 @@ ul.task-list li input[type="checkbox"] {
|
|||||||
<span class="navbar-title">WASH Web</span>
|
<span class="navbar-title">WASH Web</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</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(); }">
|
<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>
|
<span class="navbar-toggler-icon"></span>
|
||||||
</button>
|
</button>
|
||||||
<div class="collapse navbar-collapse" id="navbarCollapse">
|
<div class="collapse navbar-collapse" id="navbarCollapse">
|
||||||
<ul class="navbar-nav navbar-nav-scroll me-auto">
|
<ul class="navbar-nav navbar-nav-scroll me-auto">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="./index.html">
|
<a class="nav-link" href="./index.html" rel="" target="">
|
||||||
<span class="menu-text">Home</span></a>
|
<span class="menu-text">Home</span></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="./vision.html">
|
<a class="nav-link" href="./vision.html" rel="" target="">
|
||||||
<span class="menu-text">Vision</span></a>
|
<span class="menu-text">Vision</span></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="./contact.html">
|
<a class="nav-link" href="./contact.html" rel="" target="">
|
||||||
<span class="menu-text">Contact</span></a>
|
<span class="menu-text">Contact</span></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link active" href="./posts.html" aria-current="page">
|
<a class="nav-link active" href="./posts.html" rel="" target="" aria-current="page">
|
||||||
<span class="menu-text">News</span></a>
|
<span class="menu-text">News</span></a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div id="quarto-search" class="" title="Search"></div>
|
<div class="quarto-navbar-tools ms-auto">
|
||||||
|
</div>
|
||||||
</div> <!-- /navcollapse -->
|
</div> <!-- /navcollapse -->
|
||||||
</div> <!-- /container-fluid -->
|
</div> <!-- /container-fluid -->
|
||||||
</nav>
|
</nav>
|
||||||
@ -199,9 +202,23 @@ window.document.addEventListener("DOMContentLoaded", function (event) {
|
|||||||
icon: icon
|
icon: icon
|
||||||
};
|
};
|
||||||
anchorJS.add('.anchored');
|
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', {
|
const clipboard = new window.ClipboardJS('.code-copy-button', {
|
||||||
target: function(trigger) {
|
text: function(trigger) {
|
||||||
return trigger.previousElementSibling;
|
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) {
|
clipboard.on('success', function(e) {
|
||||||
@ -266,6 +283,92 @@ window.document.addEventListener("DOMContentLoaded", function (event) {
|
|||||||
return note.innerHTML;
|
return note.innerHTML;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
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";
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
// 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 findCites = (el) => {
|
||||||
const parentEl = el.parentElement;
|
const parentEl = el.parentElement;
|
||||||
if (parentEl) {
|
if (parentEl) {
|
||||||
|
471
_site/privacy.html
Normal file
471
_site/privacy.html
Normal file
@ -0,0 +1,471 @@
|
|||||||
|
<!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.3.353">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||||||
|
|
||||||
|
|
||||||
|
<title>WASH Web - PRIVACY POLICY</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 https://github.com/quarto-dev/quarto-cli/issues/4556 */
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
</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": 20,
|
||||||
|
"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-detached-cancel-button-title": "Cancel",
|
||||||
|
"search-submit-button-title": "Submit"
|
||||||
|
}
|
||||||
|
}</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 navbar-dark ">
|
||||||
|
<div class="navbar-container container-fluid">
|
||||||
|
<div class="navbar-brand-container">
|
||||||
|
<a class="navbar-brand" href="./index.html">
|
||||||
|
<span class="navbar-title">WASH Web</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" rel="" target="">
|
||||||
|
<span class="menu-text">Home</span></a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="./vision.html" rel="" target="">
|
||||||
|
<span class="menu-text">Vision</span></a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="./contact.html" rel="" target="">
|
||||||
|
<span class="menu-text">Contact</span></a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="./posts.html" rel="" target="">
|
||||||
|
<span class="menu-text">News</span></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="quarto-navbar-tools ms-auto">
|
||||||
|
</div>
|
||||||
|
</div> <!-- /navcollapse -->
|
||||||
|
</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="#scope" id="toc-scope" class="nav-link active" data-scroll-target="#scope">Scope</a></li>
|
||||||
|
<li><a href="#purpose" id="toc-purpose" class="nav-link" data-scroll-target="#purpose">Purpose</a></li>
|
||||||
|
<li><a href="#washnote" id="toc-washnote" class="nav-link" data-scroll-target="#washnote">WASHNote</a></li>
|
||||||
|
<li><a href="#what-data-how-long-and-where" id="toc-what-data-how-long-and-where" class="nav-link" data-scroll-target="#what-data-how-long-and-where">What data, how long, and where?</a></li>
|
||||||
|
<li><a href="#data-protection" id="toc-data-protection" class="nav-link" data-scroll-target="#data-protection">Data protection</a></li>
|
||||||
|
<li><a href="#what-are-your-data-protection-rights" id="toc-what-are-your-data-protection-rights" class="nav-link" data-scroll-target="#what-are-your-data-protection-rights">What are your data protection rights?</a></li>
|
||||||
|
<li><a href="#cookies" id="toc-cookies" class="nav-link" data-scroll-target="#cookies">Cookies</a>
|
||||||
|
<ul class="collapse">
|
||||||
|
<li><a href="#how-do-we-use-cookies" id="toc-how-do-we-use-cookies" class="nav-link" data-scroll-target="#how-do-we-use-cookies">How do we use cookies?</a></li>
|
||||||
|
<li><a href="#what-types-of-cookies-do-we-use" id="toc-what-types-of-cookies-do-we-use" class="nav-link" data-scroll-target="#what-types-of-cookies-do-we-use">What types of cookies do we use?</a></li>
|
||||||
|
<li><a href="#how-to-manage-cookies" id="toc-how-to-manage-cookies" class="nav-link" data-scroll-target="#how-to-manage-cookies">How to manage cookies</a></li>
|
||||||
|
</ul></li>
|
||||||
|
<li><a href="#minors" id="toc-minors" class="nav-link" data-scroll-target="#minors">Minors</a></li>
|
||||||
|
<li><a href="#how-to-contact-us" id="toc-how-to-contact-us" class="nav-link" data-scroll-target="#how-to-contact-us">How to contact us</a></li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
<!-- main -->
|
||||||
|
<main class="content" id="quarto-document-content">
|
||||||
|
|
||||||
|
<header id="title-block-header" class="quarto-title-block default">
|
||||||
|
<div class="quarto-title">
|
||||||
|
<h1 class="title">PRIVACY POLICY</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="quarto-title-meta">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<p>When you visit our websites and contact us or create an account on *.washweb.org, *.washnote.org, and *.washnote.com we receive information about you.</p>
|
||||||
|
<p>We also have a commitment to reducing the use of private data to the bare minimum to provide you with these websites and associated services.</p>
|
||||||
|
<p>We do our best to handle your information securely and with respect and care.</p>
|
||||||
|
<section id="scope" class="level2">
|
||||||
|
<h2 class="anchored" data-anchor-id="scope">Scope</h2>
|
||||||
|
<p>This privacy policy applies to all personal data that we process on all domains related to us. This concerns personal data of visitors and users of these websites.</p>
|
||||||
|
<p>We process the personal data of anyone who has visited our website and created an account, filled in data, or contacted us.</p>
|
||||||
|
<p>Personal data is data that can be traced back to you. If you want to know more, please visit the website of the <a href="https://www.autoriteitpersoonsgegevens.nl/themas/basis-avg">Dutch Data Protection Authority</a> or the <a href="https://gdpr.eu/">EU GDPR website</a>.</p>
|
||||||
|
</section>
|
||||||
|
<section id="purpose" class="level2">
|
||||||
|
<h2 class="anchored" data-anchor-id="purpose">Purpose</h2>
|
||||||
|
<p>We only use your personal data for the purpose for which we are allowed to use it based on our permission to use your personal data and based on data required to provide you with the service requested.</p>
|
||||||
|
<p>We have a commitment to keep this to the minimum required.</p>
|
||||||
|
<p>We don’t share your personal data with others.</p>
|
||||||
|
</section>
|
||||||
|
<section id="washnote" class="level2">
|
||||||
|
<h2 class="anchored" data-anchor-id="washnote">WASHNote</h2>
|
||||||
|
<p>WASHNote is responsible for the website (*.washnote.com, *.washnote.org, and *.washweb.org) and therefore the responsible organisation for the use of your personal data as described in this privacy statement. Our full details are:</p>
|
||||||
|
<p>WASHNote<br>
|
||||||
|
Sumatraweg 5A<br>
|
||||||
|
3072ZP Rotterdam<br>
|
||||||
|
62484885</p>
|
||||||
|
</section>
|
||||||
|
<section id="what-data-how-long-and-where" class="level2">
|
||||||
|
<h2 class="anchored" data-anchor-id="what-data-how-long-and-where">What data, how long, and where?</h2>
|
||||||
|
<p>We may use your name, address or business address, e-mail address, telephone number, and information you provide.</p>
|
||||||
|
<p>We keep your personal data for as long as we are required to do so by law and for as long as you use our services. We only process your personal data ourselves.</p>
|
||||||
|
<p>We process your data within the European Economic Area and we follow the the Dutch General Data Protection Regulation.</p>
|
||||||
|
<p>General rules that apply under Dutch law apply to our privacy statement.</p>
|
||||||
|
</section>
|
||||||
|
<section id="data-protection" class="level2">
|
||||||
|
<h2 class="anchored" data-anchor-id="data-protection">Data protection</h2>
|
||||||
|
<p>We do our best to ensure your data is safe according to the latest standards. We also minimize the amount of data we hold to the bare minimum to ensure we reduce any potential risks.</p>
|
||||||
|
</section>
|
||||||
|
<section id="what-are-your-data-protection-rights" class="level2">
|
||||||
|
<h2 class="anchored" data-anchor-id="what-are-your-data-protection-rights">What are your data protection rights?</h2>
|
||||||
|
<p>We would like to make sure you are fully aware of all of your data protection rights. Every user is entitled to the following:</p>
|
||||||
|
<p><strong>The right to access</strong> – You have the right to request WASHNote for copies of your personal data. We may charge you a small fee for this service.</p>
|
||||||
|
<p><strong>The right to rectification</strong> – You have the right to request that WASHNote correct any information you believe is inaccurate. You also have the right to request WASHNote to complete the information you believe is incomplete.</p>
|
||||||
|
<p><strong>The right to erasure</strong> – You have the right to request that WASHNote erase your personal data, under certain conditions. In some cases, may be required keep some data for 7 years for the Dutch tax authorities.</p>
|
||||||
|
<p><strong>The right to restrict processing</strong> – You have the right to request that WASHNote restrict the processing of your personal data, under certain conditions.</p>
|
||||||
|
<p><strong>The right to object to processing</strong> – You have the right to object to WASHNote’s processing of your personal data, under certain conditions.</p>
|
||||||
|
<p><strong>The right to data portability</strong> – You have the right to request that WASHNote transfer the data that we have collected to another organization, or directly to you, under certain conditions.</p>
|
||||||
|
<p>If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us at our email: dickinson+privacy@washnote.com</p>
|
||||||
|
<p>If you submit multiple applications or a complex request, it could potentially require additional processing time. In such instances, we will make sure to reach out to you within a maximum of 60 days. If necessary, we may also request that you verify your identity by providing specific information to confirm that you are indeed the rightful owner of the personal data in question.</p>
|
||||||
|
</section>
|
||||||
|
<section id="cookies" class="level2">
|
||||||
|
<h2 class="anchored" data-anchor-id="cookies">Cookies</h2>
|
||||||
|
<p>Cookies are text files placed on your computer to collect standard Internet log information and visitor behavior information. When you visit our websites, we may collect information from you automatically through cookies or similar technology</p>
|
||||||
|
<p>For further information, visit allaboutcookies.org.</p>
|
||||||
|
<section id="how-do-we-use-cookies" class="level3">
|
||||||
|
<h3 class="anchored" data-anchor-id="how-do-we-use-cookies">How do we use cookies?</h3>
|
||||||
|
<p>Our Company uses cookies in a range of ways to improve your experience on our website, including:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Keeping you signed in and storing information for your session</li>
|
||||||
|
</ul>
|
||||||
|
<p>We do not use cookies for advertising or tracking.</p>
|
||||||
|
</section>
|
||||||
|
<section id="what-types-of-cookies-do-we-use" class="level3">
|
||||||
|
<h3 class="anchored" data-anchor-id="what-types-of-cookies-do-we-use">What types of cookies do we use?</h3>
|
||||||
|
<p>There are a number of different types of cookies, however, our website uses only:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Functionality – Our Company uses these cookies so that we recognize you on our website and remember your previously selected preferences. These could include what language you prefer and location you are in. A mix of first-party and third-party cookies are used.</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section id="how-to-manage-cookies" class="level3">
|
||||||
|
<h3 class="anchored" data-anchor-id="how-to-manage-cookies">How to manage cookies</h3>
|
||||||
|
<p>You can set your browser not to accept cookies, and the above website tells you how to remove cookies from your browser. However, in a few cases, some of our website features may not function as a result.</p>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<section id="minors" class="level2">
|
||||||
|
<h2 class="anchored" data-anchor-id="minors">Minors</h2>
|
||||||
|
<p>We do not target minors with our website or as an organisation. This means that if you are under the age of 18, you need permission from a parent or guardian to use our website. If you are a minor when you visit our websites, we assume that you have received this permission before your visit.</p>
|
||||||
|
</section>
|
||||||
|
<section id="how-to-contact-us" class="level2">
|
||||||
|
<h2 class="anchored" data-anchor-id="how-to-contact-us">How to contact us</h2>
|
||||||
|
<p>If you have a question about our privacy policy, please get in touch: dickinson+privacy@washnote.com.</p>
|
||||||
|
|
||||||
|
|
||||||
|
</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();
|
||||||
|
});
|
||||||
|
function tippyHover(el, contentFn) {
|
||||||
|
const config = {
|
||||||
|
allowHTML: true,
|
||||||
|
content: contentFn,
|
||||||
|
maxWidth: 500,
|
||||||
|
delay: 100,
|
||||||
|
arrow: false,
|
||||||
|
appendTo: function(el) {
|
||||||
|
return el.parentElement;
|
||||||
|
},
|
||||||
|
interactive: true,
|
||||||
|
interactiveBorder: 10,
|
||||||
|
theme: 'quarto',
|
||||||
|
placement: 'bottom-start'
|
||||||
|
};
|
||||||
|
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);
|
||||||
|
return note.innerHTML;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
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";
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
// 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 -->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
@ -11,21 +11,21 @@
|
|||||||
"href": "index.html",
|
"href": "index.html",
|
||||||
"title": "Agents of Change",
|
"title": "Agents of Change",
|
||||||
"section": "",
|
"section": "",
|
||||||
"text": "WASH Web is a set of participatory initiatives to give you and everyone you know better access to water, sanitation and hygiene information. This web page is where you can find more information about taking part in various ways."
|
"text": "WASH Web is a set of participatory initiatives to give you and everyone you know better access to water, sanitation and hygiene information. This web page is where you can find more information about taking part in various ways.\nThe WASH Web is made up of people and organizations that work to fill the water, sanitation and hygiene (WASH) gap to make data discoverable, usable and representative. WASH Web is meant to serve as an open platform and requires diverse inputs to work. Our vision cannot be realized without community support.\nPlease join us to contribute."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"objectID": "index.html#our-vision",
|
"objectID": "index.html#our-vision",
|
||||||
"href": "index.html#our-vision",
|
"href": "index.html#our-vision",
|
||||||
"title": "Agents of Change",
|
"title": "Agents of Change",
|
||||||
"section": "Our vision",
|
"section": "Our vision",
|
||||||
"text": "Our vision\nWASH Web helps organizations that work to fill the water, sanitation and hygiene (WASH) gap, by offering training and data management services to make data discoverable, usable and representative to facilitate an improved data environment which contributes to decision-making at scale. We aim to facilitate collaboration and working group discussions through four different “initiatives”. WASH Web is meant to serve as an open platform and requires input from others in the sector. Our vision cannot be realized without community support."
|
"text": "Our vision\nThe WASH Web is made up of people and organizations that work to fill the water, sanitation and hygiene (WASH) gap to make data discoverable, usable and representative. The goal is to\nWe aim to facilitate collaboration and working group discussions through four different initiatives for an improved and healthy data environment. WASH Web is meant to serve as an open platform and requires diverse inputs to work. Our vision cannot be realized without community support."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"objectID": "index.html#social-justice",
|
"objectID": "index.html#social-justice",
|
||||||
"href": "index.html#social-justice",
|
"href": "index.html#social-justice",
|
||||||
"title": "Agents of Change",
|
"title": "Agents of Change",
|
||||||
"section": "Social Justice",
|
"section": "Social Justice",
|
||||||
"text": "Social Justice\nAccess to safe drinking water is a basic human right, and access to WASH systems is a social justice issue. What information is needed to improve access for marginalized people? Are there specific ethical issues around data collection and use that need to be addressed?"
|
"text": "Social Justice\nAccess to safe drinking water is a basic human right, and access to WASH systems is a social justice issue. What information is needed to improve access for marginalized people? What specific ethical issues around data collection, privacy, data ownership, and use of data need to be addressed?"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"objectID": "index.html#using-data-better",
|
"objectID": "index.html#using-data-better",
|
||||||
@ -46,7 +46,7 @@
|
|||||||
"href": "index.html#accountability-4ws",
|
"href": "index.html#accountability-4ws",
|
||||||
"title": "Agents of Change",
|
"title": "Agents of Change",
|
||||||
"section": "Accountability: 4Ws",
|
"section": "Accountability: 4Ws",
|
||||||
"text": "Accountability: 4Ws\nThe actors accountable for water and sanitation decision-making are often dispersed throughout diverse organizations. As a result, there is a scattered and disconnected WASH data ecosystem. The Registry aims to offer an overview of who is where, when, and doing what for formal change agents."
|
"text": "Accountability: 4Ws\nThe actors accountable for water and sanitation decision-making are often dispersed throughout diverse organizations. As a result, there is a scattered and disconnected WASH data ecosystem. It is proposed to make a WASH Registry to offer an overview of who is where, when, and doing what for formal change agents. Can this make the WASH sector more accountable?"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"objectID": "index.html#who-can-take-part",
|
"objectID": "index.html#who-can-take-part",
|
||||||
@ -60,7 +60,7 @@
|
|||||||
"href": "vision.html",
|
"href": "vision.html",
|
||||||
"title": "Vision",
|
"title": "Vision",
|
||||||
"section": "",
|
"section": "",
|
||||||
"text": "At the core of the vision, the idea is to make information discoverable, representative, and useful.\n\n\n\n\n\nDiscoverable means that it can not only be found through search and also by simply showing interest in the area and somehow you discover it. Browsing wikipedia articles should be sufficient to find key statistics on water and sanitation. At the moment, these statistics are a few steps away in specialist websites like washdata.org and this information is not automatically used in those articles. Showing interest in a specific district and search “water” and the name of US county should give key facts about water supplies. Data may already be available but simply not discoverable.\nRepresentative means that information should also represent the reality on the ground from different perspectives and that information is not from a single source of truth. It should also be appropriate to the local needs both in terms of the WASH sector and local populations and should be validated.\nUseful information is information from which one can begin to take action. Often key information about who to contact for more information, what happened, when and where is missing. If there is information about water services or sanitation, these are often dated.\nIn short, WASH Web intends to make information and expertise more accessible so that it is no longer only experts who are able to make informed decisions based on available evidence. Up until now, WASH Web has been an idea and a project that a few people have been playing with. This website and the project is open source and participatory meaning it is open to the initiative and inputs from others. Currently, WASHNote hosts and maintains the project website and source code.\nWould you like to get involved? Please get in touch or add an issue on Github.\n\n\n\nThis website was last updated on 2023-07-04 ."
|
"text": "At the core of the vision, the idea is to make information discoverable, representative, and useful.\n\n\n\n\n\nDiscoverable means that it can not only be found through search and also by simply showing interest in the area and somehow you discover it. Browsing wikipedia articles should be sufficient to find key statistics on water and sanitation. At the moment, these statistics are a few steps away in specialist websites like washdata.org and this information is not automatically used in those articles. Showing interest in a specific district and search “water” and the name of US county should give key facts about water supplies. Data may already be available but simply not discoverable.\nRepresentative means that information should also represent the reality on the ground from different perspectives and that information is not from a single source of truth. It should also be appropriate to the local needs both in terms of the WASH sector and local populations and should be validated.\nUseful information is information from which one can begin to take action. Often key information about who to contact for more information, what happened, when and where is missing. If there is information about water services or sanitation, these are often dated.\nIn short, WASH Web intends to make information and expertise more accessible so that it is no longer only experts who are able to make informed decisions based on available evidence. Up until now, WASH Web has been an idea and a project that a few people have been playing with. This website and the project is open source and participatory meaning it is open to the initiative and inputs from others. Currently, WASHNote hosts and maintains the project website and source code.\nWould you like to get involved? Please get in touch or add an issue on Github.\nThis website was last updated on 2023-07-31 ."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"objectID": "posts.html",
|
"objectID": "posts.html",
|
||||||
@ -68,5 +68,89 @@
|
|||||||
"title": "News",
|
"title": "News",
|
||||||
"section": "",
|
"section": "",
|
||||||
"text": "No matching items"
|
"text": "No matching items"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectID": "contact.html#core-facilitating-team",
|
||||||
|
"href": "contact.html#core-facilitating-team",
|
||||||
|
"title": "Contact",
|
||||||
|
"section": "",
|
||||||
|
"text": "Founder of WASHNote. With over 15 years of experience in the WASH sector, Nick is highly specialized in the development of international and regional monitoring of WASH commitments and their enabling environments, providing country-led monitoring and evaluation of services, and facilitating trainings to a range of different organizations. Above all, he firmly believes in the need for making better use of data and digital systems to advance towards reaching SDG 6: clean water and sanitation for all by 2030.\nEmail | LinkedIn\n\n\n\nMerel works as an independent consultant in the WASH sector. Her work spans a variety of topics, from WASH systems strengthening to disaster preparedness in humanitarian settings. She graduated from the University of Oxford with an MSc in Water Science, Policy and Management, where her dissertation research focused on the use of systems thinking in the implementation of rural water treatment.\nEmail | LinkedIn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectID": "index.html#join",
|
||||||
|
"href": "index.html#join",
|
||||||
|
"title": "Agents of Change",
|
||||||
|
"section": "Who can take part?",
|
||||||
|
"text": "Who can take part?\nCitizens, suppliers, NGOs and governments can take part to better use evidence to and to make information accessible.\nAre you interested in one of these initiatives? Please get in touch or add an issue on Github.\nContact form: https://washnote.com/contact/\nAdd an issue: https://github.com/WASHNote/WASHWeb/issues"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectID": "privacy.html",
|
||||||
|
"href": "privacy.html",
|
||||||
|
"title": "PRIVACY POLICY",
|
||||||
|
"section": "",
|
||||||
|
"text": "When you visit our websites and contact us or create an account on *.washweb.org, *.washnote.org, and *.washnote.com we receive information about you.\nWe also have a commitment to reducing the use of private data to the bare minimum to provide you with these websites and associated services.\nWe do our best to handle your information securely and with respect and care."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectID": "privacy.html#scope",
|
||||||
|
"href": "privacy.html#scope",
|
||||||
|
"title": "PRIVACY POLICY",
|
||||||
|
"section": "Scope",
|
||||||
|
"text": "Scope\nThis privacy policy applies to all personal data that we process on all domains related to us. This concerns personal data of visitors and users of these websites.\nWe process the personal data of anyone who has visited our website and created an account, filled in data, or contacted us.\nPersonal data is data that can be traced back to you. If you want to know more, please visit the website of the Dutch Data Protection Authority or the EU GDPR website."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectID": "privacy.html#purpose",
|
||||||
|
"href": "privacy.html#purpose",
|
||||||
|
"title": "PRIVACY POLICY",
|
||||||
|
"section": "Purpose",
|
||||||
|
"text": "Purpose\nWe only use your personal data for the purpose for which we are allowed to use it based on our permission to use your personal data and based on data required to provide you with the service requested.\nWe have a commitment to keep this to the minimum required.\nWe don’t share your personal data with others."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectID": "privacy.html#washnote",
|
||||||
|
"href": "privacy.html#washnote",
|
||||||
|
"title": "PRIVACY POLICY",
|
||||||
|
"section": "WASHNote",
|
||||||
|
"text": "WASHNote\nWASHNote is responsible for the website (*.washnote.com, *.washnote.org, and *.washweb.org) and therefore the responsible organisation for the use of your personal data as described in this privacy statement. Our full details are:\nWASHNote\nSumatraweg 5A\n3072ZP Rotterdam\n62484885"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectID": "privacy.html#what-data-how-long-and-where",
|
||||||
|
"href": "privacy.html#what-data-how-long-and-where",
|
||||||
|
"title": "PRIVACY POLICY",
|
||||||
|
"section": "What data, how long, and where?",
|
||||||
|
"text": "What data, how long, and where?\nWe may use your name, address or business address, e-mail address, telephone number, and information you provide.\nWe keep your personal data for as long as we are required to do so by law and for as long as you use our services. We only process your personal data ourselves.\nWe process your data within the European Economic Area and we follow the the Dutch General Data Protection Regulation.\nGeneral rules that apply under Dutch law apply to our privacy statement."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectID": "privacy.html#data-protection",
|
||||||
|
"href": "privacy.html#data-protection",
|
||||||
|
"title": "PRIVACY POLICY",
|
||||||
|
"section": "Data protection",
|
||||||
|
"text": "Data protection\nWe do our best to ensure your data is safe according to the latest standards. We also minimize the amount of data we hold to the bare minimum to ensure we reduce any potential risks."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectID": "privacy.html#what-are-your-data-protection-rights",
|
||||||
|
"href": "privacy.html#what-are-your-data-protection-rights",
|
||||||
|
"title": "PRIVACY POLICY",
|
||||||
|
"section": "What are your data protection rights?",
|
||||||
|
"text": "What are your data protection rights?\nWe would like to make sure you are fully aware of all of your data protection rights. Every user is entitled to the following:\nThe right to access – You have the right to request WASHNote for copies of your personal data. We may charge you a small fee for this service.\nThe right to rectification – You have the right to request that WASHNote correct any information you believe is inaccurate. You also have the right to request WASHNote to complete the information you believe is incomplete.\nThe right to erasure – You have the right to request that WASHNote erase your personal data, under certain conditions. In some cases, may be required keep some data for 7 years for the Dutch tax authorities.\nThe right to restrict processing – You have the right to request that WASHNote restrict the processing of your personal data, under certain conditions.\nThe right to object to processing – You have the right to object to WASHNote’s processing of your personal data, under certain conditions.\nThe right to data portability – You have the right to request that WASHNote transfer the data that we have collected to another organization, or directly to you, under certain conditions.\nIf you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us at our email: dickinson+privacy@washnote.com\nIf you submit multiple applications or a complex request, it could potentially require additional processing time. In such instances, we will make sure to reach out to you within a maximum of 60 days. If necessary, we may also request that you verify your identity by providing specific information to confirm that you are indeed the rightful owner of the personal data in question."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectID": "privacy.html#cookies",
|
||||||
|
"href": "privacy.html#cookies",
|
||||||
|
"title": "PRIVACY POLICY",
|
||||||
|
"section": "Cookies",
|
||||||
|
"text": "Cookies\nCookies are text files placed on your computer to collect standard Internet log information and visitor behavior information. When you visit our websites, we may collect information from you automatically through cookies or similar technology\nFor further information, visit allaboutcookies.org.\n\nHow do we use cookies?\nOur Company uses cookies in a range of ways to improve your experience on our website, including:\n\nKeeping you signed in and storing information for your session\n\nWe do not use cookies for advertising or tracking.\n\n\nWhat types of cookies do we use?\nThere are a number of different types of cookies, however, our website uses only:\n\nFunctionality – Our Company uses these cookies so that we recognize you on our website and remember your previously selected preferences. These could include what language you prefer and location you are in. A mix of first-party and third-party cookies are used.\n\n\n\nHow to manage cookies\nYou can set your browser not to accept cookies, and the above website tells you how to remove cookies from your browser. However, in a few cases, some of our website features may not function as a result."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectID": "privacy.html#minors",
|
||||||
|
"href": "privacy.html#minors",
|
||||||
|
"title": "PRIVACY POLICY",
|
||||||
|
"section": "Minors",
|
||||||
|
"text": "Minors\nWe do not target minors with our website or as an organisation. This means that if you are under the age of 18, you need permission from a parent or guardian to use our website. If you are a minor when you visit our websites, we assume that you have received this permission before your visit."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectID": "privacy.html#how-to-contact-us",
|
||||||
|
"href": "privacy.html#how-to-contact-us",
|
||||||
|
"title": "PRIVACY POLICY",
|
||||||
|
"section": "How to contact us",
|
||||||
|
"text": "How to contact us\nIf you have a question about our privacy policy, please get in touch: dickinson+privacy@washnote.com."
|
||||||
}
|
}
|
||||||
]
|
]
|
316
_site/site_libs/bootstrap/bootstrap-icons.css
vendored
316
_site/site_libs/bootstrap/bootstrap-icons.css
vendored
@ -1,7 +1,8 @@
|
|||||||
@font-face {
|
@font-face {
|
||||||
|
font-display: block;
|
||||||
font-family: "bootstrap-icons";
|
font-family: "bootstrap-icons";
|
||||||
src:
|
src:
|
||||||
url("./bootstrap-icons.woff?524846017b983fc8ded9325d94ed40f3") format("woff");
|
url("./bootstrap-icons.woff?2ab2cbbe07fcebb53bdaa7313bb290f2") format("woff");
|
||||||
}
|
}
|
||||||
|
|
||||||
.bi::before,
|
.bi::before,
|
||||||
@ -1702,3 +1703,316 @@ url("./bootstrap-icons.woff?524846017b983fc8ded9325d94ed40f3") format("woff");
|
|||||||
.bi-filetype-json::before { content: "\f791"; }
|
.bi-filetype-json::before { content: "\f791"; }
|
||||||
.bi-filetype-pptx::before { content: "\f792"; }
|
.bi-filetype-pptx::before { content: "\f792"; }
|
||||||
.bi-filetype-xlsx::before { content: "\f793"; }
|
.bi-filetype-xlsx::before { content: "\f793"; }
|
||||||
|
.bi-1-circle-1::before { content: "\f794"; }
|
||||||
|
.bi-1-circle-fill-1::before { content: "\f795"; }
|
||||||
|
.bi-1-circle-fill::before { content: "\f796"; }
|
||||||
|
.bi-1-circle::before { content: "\f797"; }
|
||||||
|
.bi-1-square-fill::before { content: "\f798"; }
|
||||||
|
.bi-1-square::before { content: "\f799"; }
|
||||||
|
.bi-2-circle-1::before { content: "\f79a"; }
|
||||||
|
.bi-2-circle-fill-1::before { content: "\f79b"; }
|
||||||
|
.bi-2-circle-fill::before { content: "\f79c"; }
|
||||||
|
.bi-2-circle::before { content: "\f79d"; }
|
||||||
|
.bi-2-square-fill::before { content: "\f79e"; }
|
||||||
|
.bi-2-square::before { content: "\f79f"; }
|
||||||
|
.bi-3-circle-1::before { content: "\f7a0"; }
|
||||||
|
.bi-3-circle-fill-1::before { content: "\f7a1"; }
|
||||||
|
.bi-3-circle-fill::before { content: "\f7a2"; }
|
||||||
|
.bi-3-circle::before { content: "\f7a3"; }
|
||||||
|
.bi-3-square-fill::before { content: "\f7a4"; }
|
||||||
|
.bi-3-square::before { content: "\f7a5"; }
|
||||||
|
.bi-4-circle-1::before { content: "\f7a6"; }
|
||||||
|
.bi-4-circle-fill-1::before { content: "\f7a7"; }
|
||||||
|
.bi-4-circle-fill::before { content: "\f7a8"; }
|
||||||
|
.bi-4-circle::before { content: "\f7a9"; }
|
||||||
|
.bi-4-square-fill::before { content: "\f7aa"; }
|
||||||
|
.bi-4-square::before { content: "\f7ab"; }
|
||||||
|
.bi-5-circle-1::before { content: "\f7ac"; }
|
||||||
|
.bi-5-circle-fill-1::before { content: "\f7ad"; }
|
||||||
|
.bi-5-circle-fill::before { content: "\f7ae"; }
|
||||||
|
.bi-5-circle::before { content: "\f7af"; }
|
||||||
|
.bi-5-square-fill::before { content: "\f7b0"; }
|
||||||
|
.bi-5-square::before { content: "\f7b1"; }
|
||||||
|
.bi-6-circle-1::before { content: "\f7b2"; }
|
||||||
|
.bi-6-circle-fill-1::before { content: "\f7b3"; }
|
||||||
|
.bi-6-circle-fill::before { content: "\f7b4"; }
|
||||||
|
.bi-6-circle::before { content: "\f7b5"; }
|
||||||
|
.bi-6-square-fill::before { content: "\f7b6"; }
|
||||||
|
.bi-6-square::before { content: "\f7b7"; }
|
||||||
|
.bi-7-circle-1::before { content: "\f7b8"; }
|
||||||
|
.bi-7-circle-fill-1::before { content: "\f7b9"; }
|
||||||
|
.bi-7-circle-fill::before { content: "\f7ba"; }
|
||||||
|
.bi-7-circle::before { content: "\f7bb"; }
|
||||||
|
.bi-7-square-fill::before { content: "\f7bc"; }
|
||||||
|
.bi-7-square::before { content: "\f7bd"; }
|
||||||
|
.bi-8-circle-1::before { content: "\f7be"; }
|
||||||
|
.bi-8-circle-fill-1::before { content: "\f7bf"; }
|
||||||
|
.bi-8-circle-fill::before { content: "\f7c0"; }
|
||||||
|
.bi-8-circle::before { content: "\f7c1"; }
|
||||||
|
.bi-8-square-fill::before { content: "\f7c2"; }
|
||||||
|
.bi-8-square::before { content: "\f7c3"; }
|
||||||
|
.bi-9-circle-1::before { content: "\f7c4"; }
|
||||||
|
.bi-9-circle-fill-1::before { content: "\f7c5"; }
|
||||||
|
.bi-9-circle-fill::before { content: "\f7c6"; }
|
||||||
|
.bi-9-circle::before { content: "\f7c7"; }
|
||||||
|
.bi-9-square-fill::before { content: "\f7c8"; }
|
||||||
|
.bi-9-square::before { content: "\f7c9"; }
|
||||||
|
.bi-airplane-engines-fill::before { content: "\f7ca"; }
|
||||||
|
.bi-airplane-engines::before { content: "\f7cb"; }
|
||||||
|
.bi-airplane-fill::before { content: "\f7cc"; }
|
||||||
|
.bi-airplane::before { content: "\f7cd"; }
|
||||||
|
.bi-alexa::before { content: "\f7ce"; }
|
||||||
|
.bi-alipay::before { content: "\f7cf"; }
|
||||||
|
.bi-android::before { content: "\f7d0"; }
|
||||||
|
.bi-android2::before { content: "\f7d1"; }
|
||||||
|
.bi-box-fill::before { content: "\f7d2"; }
|
||||||
|
.bi-box-seam-fill::before { content: "\f7d3"; }
|
||||||
|
.bi-browser-chrome::before { content: "\f7d4"; }
|
||||||
|
.bi-browser-edge::before { content: "\f7d5"; }
|
||||||
|
.bi-browser-firefox::before { content: "\f7d6"; }
|
||||||
|
.bi-browser-safari::before { content: "\f7d7"; }
|
||||||
|
.bi-c-circle-1::before { content: "\f7d8"; }
|
||||||
|
.bi-c-circle-fill-1::before { content: "\f7d9"; }
|
||||||
|
.bi-c-circle-fill::before { content: "\f7da"; }
|
||||||
|
.bi-c-circle::before { content: "\f7db"; }
|
||||||
|
.bi-c-square-fill::before { content: "\f7dc"; }
|
||||||
|
.bi-c-square::before { content: "\f7dd"; }
|
||||||
|
.bi-capsule-pill::before { content: "\f7de"; }
|
||||||
|
.bi-capsule::before { content: "\f7df"; }
|
||||||
|
.bi-car-front-fill::before { content: "\f7e0"; }
|
||||||
|
.bi-car-front::before { content: "\f7e1"; }
|
||||||
|
.bi-cassette-fill::before { content: "\f7e2"; }
|
||||||
|
.bi-cassette::before { content: "\f7e3"; }
|
||||||
|
.bi-cc-circle-1::before { content: "\f7e4"; }
|
||||||
|
.bi-cc-circle-fill-1::before { content: "\f7e5"; }
|
||||||
|
.bi-cc-circle-fill::before { content: "\f7e6"; }
|
||||||
|
.bi-cc-circle::before { content: "\f7e7"; }
|
||||||
|
.bi-cc-square-fill::before { content: "\f7e8"; }
|
||||||
|
.bi-cc-square::before { content: "\f7e9"; }
|
||||||
|
.bi-cup-hot-fill::before { content: "\f7ea"; }
|
||||||
|
.bi-cup-hot::before { content: "\f7eb"; }
|
||||||
|
.bi-currency-rupee::before { content: "\f7ec"; }
|
||||||
|
.bi-dropbox::before { content: "\f7ed"; }
|
||||||
|
.bi-escape::before { content: "\f7ee"; }
|
||||||
|
.bi-fast-forward-btn-fill::before { content: "\f7ef"; }
|
||||||
|
.bi-fast-forward-btn::before { content: "\f7f0"; }
|
||||||
|
.bi-fast-forward-circle-fill::before { content: "\f7f1"; }
|
||||||
|
.bi-fast-forward-circle::before { content: "\f7f2"; }
|
||||||
|
.bi-fast-forward-fill::before { content: "\f7f3"; }
|
||||||
|
.bi-fast-forward::before { content: "\f7f4"; }
|
||||||
|
.bi-filetype-sql::before { content: "\f7f5"; }
|
||||||
|
.bi-fire::before { content: "\f7f6"; }
|
||||||
|
.bi-google-play::before { content: "\f7f7"; }
|
||||||
|
.bi-h-circle-1::before { content: "\f7f8"; }
|
||||||
|
.bi-h-circle-fill-1::before { content: "\f7f9"; }
|
||||||
|
.bi-h-circle-fill::before { content: "\f7fa"; }
|
||||||
|
.bi-h-circle::before { content: "\f7fb"; }
|
||||||
|
.bi-h-square-fill::before { content: "\f7fc"; }
|
||||||
|
.bi-h-square::before { content: "\f7fd"; }
|
||||||
|
.bi-indent::before { content: "\f7fe"; }
|
||||||
|
.bi-lungs-fill::before { content: "\f7ff"; }
|
||||||
|
.bi-lungs::before { content: "\f800"; }
|
||||||
|
.bi-microsoft-teams::before { content: "\f801"; }
|
||||||
|
.bi-p-circle-1::before { content: "\f802"; }
|
||||||
|
.bi-p-circle-fill-1::before { content: "\f803"; }
|
||||||
|
.bi-p-circle-fill::before { content: "\f804"; }
|
||||||
|
.bi-p-circle::before { content: "\f805"; }
|
||||||
|
.bi-p-square-fill::before { content: "\f806"; }
|
||||||
|
.bi-p-square::before { content: "\f807"; }
|
||||||
|
.bi-pass-fill::before { content: "\f808"; }
|
||||||
|
.bi-pass::before { content: "\f809"; }
|
||||||
|
.bi-prescription::before { content: "\f80a"; }
|
||||||
|
.bi-prescription2::before { content: "\f80b"; }
|
||||||
|
.bi-r-circle-1::before { content: "\f80c"; }
|
||||||
|
.bi-r-circle-fill-1::before { content: "\f80d"; }
|
||||||
|
.bi-r-circle-fill::before { content: "\f80e"; }
|
||||||
|
.bi-r-circle::before { content: "\f80f"; }
|
||||||
|
.bi-r-square-fill::before { content: "\f810"; }
|
||||||
|
.bi-r-square::before { content: "\f811"; }
|
||||||
|
.bi-repeat-1::before { content: "\f812"; }
|
||||||
|
.bi-repeat::before { content: "\f813"; }
|
||||||
|
.bi-rewind-btn-fill::before { content: "\f814"; }
|
||||||
|
.bi-rewind-btn::before { content: "\f815"; }
|
||||||
|
.bi-rewind-circle-fill::before { content: "\f816"; }
|
||||||
|
.bi-rewind-circle::before { content: "\f817"; }
|
||||||
|
.bi-rewind-fill::before { content: "\f818"; }
|
||||||
|
.bi-rewind::before { content: "\f819"; }
|
||||||
|
.bi-train-freight-front-fill::before { content: "\f81a"; }
|
||||||
|
.bi-train-freight-front::before { content: "\f81b"; }
|
||||||
|
.bi-train-front-fill::before { content: "\f81c"; }
|
||||||
|
.bi-train-front::before { content: "\f81d"; }
|
||||||
|
.bi-train-lightrail-front-fill::before { content: "\f81e"; }
|
||||||
|
.bi-train-lightrail-front::before { content: "\f81f"; }
|
||||||
|
.bi-truck-front-fill::before { content: "\f820"; }
|
||||||
|
.bi-truck-front::before { content: "\f821"; }
|
||||||
|
.bi-ubuntu::before { content: "\f822"; }
|
||||||
|
.bi-unindent::before { content: "\f823"; }
|
||||||
|
.bi-unity::before { content: "\f824"; }
|
||||||
|
.bi-universal-access-circle::before { content: "\f825"; }
|
||||||
|
.bi-universal-access::before { content: "\f826"; }
|
||||||
|
.bi-virus::before { content: "\f827"; }
|
||||||
|
.bi-virus2::before { content: "\f828"; }
|
||||||
|
.bi-wechat::before { content: "\f829"; }
|
||||||
|
.bi-yelp::before { content: "\f82a"; }
|
||||||
|
.bi-sign-stop-fill::before { content: "\f82b"; }
|
||||||
|
.bi-sign-stop-lights-fill::before { content: "\f82c"; }
|
||||||
|
.bi-sign-stop-lights::before { content: "\f82d"; }
|
||||||
|
.bi-sign-stop::before { content: "\f82e"; }
|
||||||
|
.bi-sign-turn-left-fill::before { content: "\f82f"; }
|
||||||
|
.bi-sign-turn-left::before { content: "\f830"; }
|
||||||
|
.bi-sign-turn-right-fill::before { content: "\f831"; }
|
||||||
|
.bi-sign-turn-right::before { content: "\f832"; }
|
||||||
|
.bi-sign-turn-slight-left-fill::before { content: "\f833"; }
|
||||||
|
.bi-sign-turn-slight-left::before { content: "\f834"; }
|
||||||
|
.bi-sign-turn-slight-right-fill::before { content: "\f835"; }
|
||||||
|
.bi-sign-turn-slight-right::before { content: "\f836"; }
|
||||||
|
.bi-sign-yield-fill::before { content: "\f837"; }
|
||||||
|
.bi-sign-yield::before { content: "\f838"; }
|
||||||
|
.bi-ev-station-fill::before { content: "\f839"; }
|
||||||
|
.bi-ev-station::before { content: "\f83a"; }
|
||||||
|
.bi-fuel-pump-diesel-fill::before { content: "\f83b"; }
|
||||||
|
.bi-fuel-pump-diesel::before { content: "\f83c"; }
|
||||||
|
.bi-fuel-pump-fill::before { content: "\f83d"; }
|
||||||
|
.bi-fuel-pump::before { content: "\f83e"; }
|
||||||
|
.bi-0-circle-fill::before { content: "\f83f"; }
|
||||||
|
.bi-0-circle::before { content: "\f840"; }
|
||||||
|
.bi-0-square-fill::before { content: "\f841"; }
|
||||||
|
.bi-0-square::before { content: "\f842"; }
|
||||||
|
.bi-rocket-fill::before { content: "\f843"; }
|
||||||
|
.bi-rocket-takeoff-fill::before { content: "\f844"; }
|
||||||
|
.bi-rocket-takeoff::before { content: "\f845"; }
|
||||||
|
.bi-rocket::before { content: "\f846"; }
|
||||||
|
.bi-stripe::before { content: "\f847"; }
|
||||||
|
.bi-subscript::before { content: "\f848"; }
|
||||||
|
.bi-superscript::before { content: "\f849"; }
|
||||||
|
.bi-trello::before { content: "\f84a"; }
|
||||||
|
.bi-envelope-at-fill::before { content: "\f84b"; }
|
||||||
|
.bi-envelope-at::before { content: "\f84c"; }
|
||||||
|
.bi-regex::before { content: "\f84d"; }
|
||||||
|
.bi-text-wrap::before { content: "\f84e"; }
|
||||||
|
.bi-sign-dead-end-fill::before { content: "\f84f"; }
|
||||||
|
.bi-sign-dead-end::before { content: "\f850"; }
|
||||||
|
.bi-sign-do-not-enter-fill::before { content: "\f851"; }
|
||||||
|
.bi-sign-do-not-enter::before { content: "\f852"; }
|
||||||
|
.bi-sign-intersection-fill::before { content: "\f853"; }
|
||||||
|
.bi-sign-intersection-side-fill::before { content: "\f854"; }
|
||||||
|
.bi-sign-intersection-side::before { content: "\f855"; }
|
||||||
|
.bi-sign-intersection-t-fill::before { content: "\f856"; }
|
||||||
|
.bi-sign-intersection-t::before { content: "\f857"; }
|
||||||
|
.bi-sign-intersection-y-fill::before { content: "\f858"; }
|
||||||
|
.bi-sign-intersection-y::before { content: "\f859"; }
|
||||||
|
.bi-sign-intersection::before { content: "\f85a"; }
|
||||||
|
.bi-sign-merge-left-fill::before { content: "\f85b"; }
|
||||||
|
.bi-sign-merge-left::before { content: "\f85c"; }
|
||||||
|
.bi-sign-merge-right-fill::before { content: "\f85d"; }
|
||||||
|
.bi-sign-merge-right::before { content: "\f85e"; }
|
||||||
|
.bi-sign-no-left-turn-fill::before { content: "\f85f"; }
|
||||||
|
.bi-sign-no-left-turn::before { content: "\f860"; }
|
||||||
|
.bi-sign-no-parking-fill::before { content: "\f861"; }
|
||||||
|
.bi-sign-no-parking::before { content: "\f862"; }
|
||||||
|
.bi-sign-no-right-turn-fill::before { content: "\f863"; }
|
||||||
|
.bi-sign-no-right-turn::before { content: "\f864"; }
|
||||||
|
.bi-sign-railroad-fill::before { content: "\f865"; }
|
||||||
|
.bi-sign-railroad::before { content: "\f866"; }
|
||||||
|
.bi-building-add::before { content: "\f867"; }
|
||||||
|
.bi-building-check::before { content: "\f868"; }
|
||||||
|
.bi-building-dash::before { content: "\f869"; }
|
||||||
|
.bi-building-down::before { content: "\f86a"; }
|
||||||
|
.bi-building-exclamation::before { content: "\f86b"; }
|
||||||
|
.bi-building-fill-add::before { content: "\f86c"; }
|
||||||
|
.bi-building-fill-check::before { content: "\f86d"; }
|
||||||
|
.bi-building-fill-dash::before { content: "\f86e"; }
|
||||||
|
.bi-building-fill-down::before { content: "\f86f"; }
|
||||||
|
.bi-building-fill-exclamation::before { content: "\f870"; }
|
||||||
|
.bi-building-fill-gear::before { content: "\f871"; }
|
||||||
|
.bi-building-fill-lock::before { content: "\f872"; }
|
||||||
|
.bi-building-fill-slash::before { content: "\f873"; }
|
||||||
|
.bi-building-fill-up::before { content: "\f874"; }
|
||||||
|
.bi-building-fill-x::before { content: "\f875"; }
|
||||||
|
.bi-building-fill::before { content: "\f876"; }
|
||||||
|
.bi-building-gear::before { content: "\f877"; }
|
||||||
|
.bi-building-lock::before { content: "\f878"; }
|
||||||
|
.bi-building-slash::before { content: "\f879"; }
|
||||||
|
.bi-building-up::before { content: "\f87a"; }
|
||||||
|
.bi-building-x::before { content: "\f87b"; }
|
||||||
|
.bi-buildings-fill::before { content: "\f87c"; }
|
||||||
|
.bi-buildings::before { content: "\f87d"; }
|
||||||
|
.bi-bus-front-fill::before { content: "\f87e"; }
|
||||||
|
.bi-bus-front::before { content: "\f87f"; }
|
||||||
|
.bi-ev-front-fill::before { content: "\f880"; }
|
||||||
|
.bi-ev-front::before { content: "\f881"; }
|
||||||
|
.bi-globe-americas::before { content: "\f882"; }
|
||||||
|
.bi-globe-asia-australia::before { content: "\f883"; }
|
||||||
|
.bi-globe-central-south-asia::before { content: "\f884"; }
|
||||||
|
.bi-globe-europe-africa::before { content: "\f885"; }
|
||||||
|
.bi-house-add-fill::before { content: "\f886"; }
|
||||||
|
.bi-house-add::before { content: "\f887"; }
|
||||||
|
.bi-house-check-fill::before { content: "\f888"; }
|
||||||
|
.bi-house-check::before { content: "\f889"; }
|
||||||
|
.bi-house-dash-fill::before { content: "\f88a"; }
|
||||||
|
.bi-house-dash::before { content: "\f88b"; }
|
||||||
|
.bi-house-down-fill::before { content: "\f88c"; }
|
||||||
|
.bi-house-down::before { content: "\f88d"; }
|
||||||
|
.bi-house-exclamation-fill::before { content: "\f88e"; }
|
||||||
|
.bi-house-exclamation::before { content: "\f88f"; }
|
||||||
|
.bi-house-gear-fill::before { content: "\f890"; }
|
||||||
|
.bi-house-gear::before { content: "\f891"; }
|
||||||
|
.bi-house-lock-fill::before { content: "\f892"; }
|
||||||
|
.bi-house-lock::before { content: "\f893"; }
|
||||||
|
.bi-house-slash-fill::before { content: "\f894"; }
|
||||||
|
.bi-house-slash::before { content: "\f895"; }
|
||||||
|
.bi-house-up-fill::before { content: "\f896"; }
|
||||||
|
.bi-house-up::before { content: "\f897"; }
|
||||||
|
.bi-house-x-fill::before { content: "\f898"; }
|
||||||
|
.bi-house-x::before { content: "\f899"; }
|
||||||
|
.bi-person-add::before { content: "\f89a"; }
|
||||||
|
.bi-person-down::before { content: "\f89b"; }
|
||||||
|
.bi-person-exclamation::before { content: "\f89c"; }
|
||||||
|
.bi-person-fill-add::before { content: "\f89d"; }
|
||||||
|
.bi-person-fill-check::before { content: "\f89e"; }
|
||||||
|
.bi-person-fill-dash::before { content: "\f89f"; }
|
||||||
|
.bi-person-fill-down::before { content: "\f8a0"; }
|
||||||
|
.bi-person-fill-exclamation::before { content: "\f8a1"; }
|
||||||
|
.bi-person-fill-gear::before { content: "\f8a2"; }
|
||||||
|
.bi-person-fill-lock::before { content: "\f8a3"; }
|
||||||
|
.bi-person-fill-slash::before { content: "\f8a4"; }
|
||||||
|
.bi-person-fill-up::before { content: "\f8a5"; }
|
||||||
|
.bi-person-fill-x::before { content: "\f8a6"; }
|
||||||
|
.bi-person-gear::before { content: "\f8a7"; }
|
||||||
|
.bi-person-lock::before { content: "\f8a8"; }
|
||||||
|
.bi-person-slash::before { content: "\f8a9"; }
|
||||||
|
.bi-person-up::before { content: "\f8aa"; }
|
||||||
|
.bi-scooter::before { content: "\f8ab"; }
|
||||||
|
.bi-taxi-front-fill::before { content: "\f8ac"; }
|
||||||
|
.bi-taxi-front::before { content: "\f8ad"; }
|
||||||
|
.bi-amd::before { content: "\f8ae"; }
|
||||||
|
.bi-database-add::before { content: "\f8af"; }
|
||||||
|
.bi-database-check::before { content: "\f8b0"; }
|
||||||
|
.bi-database-dash::before { content: "\f8b1"; }
|
||||||
|
.bi-database-down::before { content: "\f8b2"; }
|
||||||
|
.bi-database-exclamation::before { content: "\f8b3"; }
|
||||||
|
.bi-database-fill-add::before { content: "\f8b4"; }
|
||||||
|
.bi-database-fill-check::before { content: "\f8b5"; }
|
||||||
|
.bi-database-fill-dash::before { content: "\f8b6"; }
|
||||||
|
.bi-database-fill-down::before { content: "\f8b7"; }
|
||||||
|
.bi-database-fill-exclamation::before { content: "\f8b8"; }
|
||||||
|
.bi-database-fill-gear::before { content: "\f8b9"; }
|
||||||
|
.bi-database-fill-lock::before { content: "\f8ba"; }
|
||||||
|
.bi-database-fill-slash::before { content: "\f8bb"; }
|
||||||
|
.bi-database-fill-up::before { content: "\f8bc"; }
|
||||||
|
.bi-database-fill-x::before { content: "\f8bd"; }
|
||||||
|
.bi-database-fill::before { content: "\f8be"; }
|
||||||
|
.bi-database-gear::before { content: "\f8bf"; }
|
||||||
|
.bi-database-lock::before { content: "\f8c0"; }
|
||||||
|
.bi-database-slash::before { content: "\f8c1"; }
|
||||||
|
.bi-database-up::before { content: "\f8c2"; }
|
||||||
|
.bi-database-x::before { content: "\f8c3"; }
|
||||||
|
.bi-database::before { content: "\f8c4"; }
|
||||||
|
.bi-houses-fill::before { content: "\f8c5"; }
|
||||||
|
.bi-houses::before { content: "\f8c6"; }
|
||||||
|
.bi-nvidia::before { content: "\f8c7"; }
|
||||||
|
.bi-person-vcard-fill::before { content: "\f8c8"; }
|
||||||
|
.bi-person-vcard::before { content: "\f8c9"; }
|
||||||
|
.bi-sina-weibo::before { content: "\f8ca"; }
|
||||||
|
.bi-tencent-qq::before { content: "\f8cb"; }
|
||||||
|
.bi-wikipedia::before { content: "\f8cc"; }
|
||||||
|
Binary file not shown.
4
_site/site_libs/bootstrap/bootstrap.min.css
vendored
4
_site/site_libs/bootstrap/bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
4
_site/site_libs/clipboard/clipboard.min.js
vendored
4
_site/site_libs/clipboard/clipboard.min.js
vendored
File diff suppressed because one or more lines are too long
@ -55,62 +55,85 @@ div.sourceCode pre.sourceCode {
|
|||||||
|
|
||||||
code span.ot {
|
code span.ot {
|
||||||
color: #003B4F;
|
color: #003B4F;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.at {
|
code span.at {
|
||||||
color: #657422;
|
color: #657422;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.ss {
|
code span.ss {
|
||||||
color: #20794D;
|
color: #20794D;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.an {
|
code span.an {
|
||||||
color: #5E5E5E;
|
color: #5E5E5E;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.fu {
|
code span.fu {
|
||||||
color: #4758AB;
|
color: #4758AB;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.st {
|
code span.st {
|
||||||
color: #20794D;
|
color: #20794D;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.cf {
|
code span.cf {
|
||||||
color: #003B4F;
|
color: #003B4F;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.op {
|
code span.op {
|
||||||
color: #5E5E5E;
|
color: #5E5E5E;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.er {
|
code span.er {
|
||||||
color: #AD0000;
|
color: #AD0000;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.bn {
|
code span.bn {
|
||||||
color: #AD0000;
|
color: #AD0000;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.al {
|
code span.al {
|
||||||
color: #AD0000;
|
color: #AD0000;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.va {
|
code span.va {
|
||||||
color: #111111;
|
color: #111111;
|
||||||
|
font-style: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
code span.bu {
|
||||||
|
font-style: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
code span.ex {
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.pp {
|
code span.pp {
|
||||||
color: #AD0000;
|
color: #AD0000;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.in {
|
code span.in {
|
||||||
color: #5E5E5E;
|
color: #5E5E5E;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.vs {
|
code span.vs {
|
||||||
color: #20794D;
|
color: #20794D;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.wa {
|
code span.wa {
|
||||||
@ -125,22 +148,27 @@ code span.do {
|
|||||||
|
|
||||||
code span.im {
|
code span.im {
|
||||||
color: #00769E;
|
color: #00769E;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.ch {
|
code span.ch {
|
||||||
color: #20794D;
|
color: #20794D;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.dt {
|
code span.dt {
|
||||||
color: #AD0000;
|
color: #AD0000;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.fl {
|
code span.fl {
|
||||||
color: #AD0000;
|
color: #AD0000;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.co {
|
code span.co {
|
||||||
color: #5E5E5E;
|
color: #5E5E5E;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.cv {
|
code span.cv {
|
||||||
@ -150,18 +178,22 @@ code span.cv {
|
|||||||
|
|
||||||
code span.cn {
|
code span.cn {
|
||||||
color: #8f5902;
|
color: #8f5902;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.sc {
|
code span.sc {
|
||||||
color: #5E5E5E;
|
color: #5E5E5E;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.dv {
|
code span.dv {
|
||||||
color: #AD0000;
|
color: #AD0000;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
code span.kw {
|
code span.kw {
|
||||||
color: #003B4F;
|
color: #003B4F;
|
||||||
|
font-style: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
.prevent-inlining {
|
.prevent-inlining {
|
||||||
|
@ -5,7 +5,52 @@ const sectionChanged = new CustomEvent("quarto-sectionChanged", {
|
|||||||
composed: false,
|
composed: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const layoutMarginEls = () => {
|
||||||
|
// Find any conflicting margin elements and add margins to the
|
||||||
|
// top to prevent overlap
|
||||||
|
const marginChildren = window.document.querySelectorAll(
|
||||||
|
".column-margin.column-container > * "
|
||||||
|
);
|
||||||
|
|
||||||
|
let lastBottom = 0;
|
||||||
|
for (const marginChild of marginChildren) {
|
||||||
|
if (marginChild.offsetParent !== null) {
|
||||||
|
// clear the top margin so we recompute it
|
||||||
|
marginChild.style.marginTop = null;
|
||||||
|
const top = marginChild.getBoundingClientRect().top + window.scrollY;
|
||||||
|
console.log({
|
||||||
|
childtop: marginChild.getBoundingClientRect().top,
|
||||||
|
scroll: window.scrollY,
|
||||||
|
top,
|
||||||
|
lastBottom,
|
||||||
|
});
|
||||||
|
if (top < lastBottom) {
|
||||||
|
const margin = lastBottom - top;
|
||||||
|
marginChild.style.marginTop = `${margin}px`;
|
||||||
|
}
|
||||||
|
const styles = window.getComputedStyle(marginChild);
|
||||||
|
const marginTop = parseFloat(styles["marginTop"]);
|
||||||
|
|
||||||
|
console.log({
|
||||||
|
top,
|
||||||
|
height: marginChild.getBoundingClientRect().height,
|
||||||
|
marginTop,
|
||||||
|
total: top + marginChild.getBoundingClientRect().height + marginTop,
|
||||||
|
});
|
||||||
|
lastBottom = top + marginChild.getBoundingClientRect().height + marginTop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
window.document.addEventListener("DOMContentLoaded", function (_event) {
|
window.document.addEventListener("DOMContentLoaded", function (_event) {
|
||||||
|
// Recompute the position of margin elements anytime the body size changes
|
||||||
|
if (window.ResizeObserver) {
|
||||||
|
const resizeObserver = new window.ResizeObserver(
|
||||||
|
throttle(layoutMarginEls, 50)
|
||||||
|
);
|
||||||
|
resizeObserver.observe(window.document.body);
|
||||||
|
}
|
||||||
|
|
||||||
const tocEl = window.document.querySelector('nav.toc-active[role="doc-toc"]');
|
const tocEl = window.document.querySelector('nav.toc-active[role="doc-toc"]');
|
||||||
const sidebarEl = window.document.getElementById("quarto-sidebar");
|
const sidebarEl = window.document.getElementById("quarto-sidebar");
|
||||||
const leftTocEl = window.document.getElementById("quarto-sidebar-toc-left");
|
const leftTocEl = window.document.getElementById("quarto-sidebar-toc-left");
|
||||||
@ -259,6 +304,7 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
|
|
||||||
const manageSidebarVisiblity = (el, placeholderDescriptor) => {
|
const manageSidebarVisiblity = (el, placeholderDescriptor) => {
|
||||||
let isVisible = true;
|
let isVisible = true;
|
||||||
|
let elRect;
|
||||||
|
|
||||||
return (hiddenRegions) => {
|
return (hiddenRegions) => {
|
||||||
if (el === null) {
|
if (el === null) {
|
||||||
@ -269,11 +315,6 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
const lastChildEl = el.lastElementChild;
|
const lastChildEl = el.lastElementChild;
|
||||||
|
|
||||||
if (lastChildEl) {
|
if (lastChildEl) {
|
||||||
// Find the top and bottom o the element that is being managed
|
|
||||||
const elTop = el.offsetTop;
|
|
||||||
const elBottom =
|
|
||||||
elTop + lastChildEl.offsetTop + lastChildEl.offsetHeight;
|
|
||||||
|
|
||||||
// Converts the sidebar to a menu
|
// Converts the sidebar to a menu
|
||||||
const convertToMenu = () => {
|
const convertToMenu = () => {
|
||||||
for (const child of el.children) {
|
for (const child of el.children) {
|
||||||
@ -281,100 +322,112 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
child.style.overflow = "hidden";
|
child.style.overflow = "hidden";
|
||||||
}
|
}
|
||||||
|
|
||||||
const toggleContainer = window.document.createElement("div");
|
nexttick(() => {
|
||||||
toggleContainer.style.width = "100%";
|
const toggleContainer = window.document.createElement("div");
|
||||||
toggleContainer.classList.add("zindex-over-content");
|
toggleContainer.style.width = "100%";
|
||||||
toggleContainer.classList.add("quarto-sidebar-toggle");
|
toggleContainer.classList.add("zindex-over-content");
|
||||||
toggleContainer.classList.add("headroom-target"); // Marks this to be managed by headeroom
|
toggleContainer.classList.add("quarto-sidebar-toggle");
|
||||||
toggleContainer.id = placeholderDescriptor.id;
|
toggleContainer.classList.add("headroom-target"); // Marks this to be managed by headeroom
|
||||||
toggleContainer.style.position = "fixed";
|
toggleContainer.id = placeholderDescriptor.id;
|
||||||
|
toggleContainer.style.position = "fixed";
|
||||||
|
|
||||||
const toggleIcon = window.document.createElement("i");
|
const toggleIcon = window.document.createElement("i");
|
||||||
toggleIcon.classList.add("quarto-sidebar-toggle-icon");
|
toggleIcon.classList.add("quarto-sidebar-toggle-icon");
|
||||||
toggleIcon.classList.add("bi");
|
toggleIcon.classList.add("bi");
|
||||||
toggleIcon.classList.add("bi-caret-down-fill");
|
toggleIcon.classList.add("bi-caret-down-fill");
|
||||||
|
|
||||||
const toggleTitle = window.document.createElement("div");
|
const toggleTitle = window.document.createElement("div");
|
||||||
const titleEl = window.document.body.querySelector(
|
const titleEl = window.document.body.querySelector(
|
||||||
placeholderDescriptor.titleSelector
|
placeholderDescriptor.titleSelector
|
||||||
);
|
);
|
||||||
if (titleEl) {
|
if (titleEl) {
|
||||||
toggleTitle.append(titleEl.innerText, toggleIcon);
|
toggleTitle.append(
|
||||||
}
|
titleEl.textContent || titleEl.innerText,
|
||||||
toggleTitle.classList.add("zindex-over-content");
|
toggleIcon
|
||||||
toggleTitle.classList.add("quarto-sidebar-toggle-title");
|
);
|
||||||
toggleContainer.append(toggleTitle);
|
|
||||||
|
|
||||||
const toggleContents = window.document.createElement("div");
|
|
||||||
toggleContents.classList = el.classList;
|
|
||||||
toggleContents.classList.add("zindex-over-content");
|
|
||||||
toggleContents.classList.add("quarto-sidebar-toggle-contents");
|
|
||||||
for (const child of el.children) {
|
|
||||||
if (child.id === "toc-title") {
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
toggleTitle.classList.add("zindex-over-content");
|
||||||
|
toggleTitle.classList.add("quarto-sidebar-toggle-title");
|
||||||
|
toggleContainer.append(toggleTitle);
|
||||||
|
|
||||||
const clone = child.cloneNode(true);
|
const toggleContents = window.document.createElement("div");
|
||||||
clone.style.opacity = 1;
|
toggleContents.classList = el.classList;
|
||||||
clone.style.display = null;
|
toggleContents.classList.add("zindex-over-content");
|
||||||
toggleContents.append(clone);
|
toggleContents.classList.add("quarto-sidebar-toggle-contents");
|
||||||
}
|
for (const child of el.children) {
|
||||||
toggleContents.style.height = "0px";
|
if (child.id === "toc-title") {
|
||||||
toggleContainer.append(toggleContents);
|
continue;
|
||||||
el.parentElement.prepend(toggleContainer);
|
}
|
||||||
|
|
||||||
// Process clicks
|
const clone = child.cloneNode(true);
|
||||||
let tocShowing = false;
|
clone.style.opacity = 1;
|
||||||
// Allow the caller to control whether this is dismissed
|
clone.style.display = null;
|
||||||
// when it is clicked (e.g. sidebar navigation supports
|
toggleContents.append(clone);
|
||||||
// opening and closing the nav tree, so don't dismiss on click)
|
|
||||||
const clickEl = placeholderDescriptor.dismissOnClick
|
|
||||||
? toggleContainer
|
|
||||||
: toggleTitle;
|
|
||||||
|
|
||||||
const closeToggle = () => {
|
|
||||||
if (tocShowing) {
|
|
||||||
toggleContainer.classList.remove("expanded");
|
|
||||||
toggleContents.style.height = "0px";
|
|
||||||
tocShowing = false;
|
|
||||||
}
|
}
|
||||||
};
|
toggleContents.style.height = "0px";
|
||||||
|
const positionToggle = () => {
|
||||||
|
// position the element (top left of parent, same width as parent)
|
||||||
|
if (!elRect) {
|
||||||
|
elRect = el.getBoundingClientRect();
|
||||||
|
}
|
||||||
|
toggleContainer.style.left = `${elRect.left}px`;
|
||||||
|
toggleContainer.style.top = `${elRect.top}px`;
|
||||||
|
toggleContainer.style.width = `${elRect.width}px`;
|
||||||
|
};
|
||||||
|
positionToggle();
|
||||||
|
|
||||||
const positionToggle = () => {
|
toggleContainer.append(toggleContents);
|
||||||
// position the element (top left of parent, same width as parent)
|
el.parentElement.prepend(toggleContainer);
|
||||||
const elRect = el.getBoundingClientRect();
|
|
||||||
toggleContainer.style.left = `${elRect.left}px`;
|
|
||||||
toggleContainer.style.top = `${elRect.top}px`;
|
|
||||||
toggleContainer.style.width = `${elRect.width}px`;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Get rid of any expanded toggle if the user scrolls
|
// Process clicks
|
||||||
window.document.addEventListener(
|
let tocShowing = false;
|
||||||
"scroll",
|
// Allow the caller to control whether this is dismissed
|
||||||
throttle(() => {
|
// when it is clicked (e.g. sidebar navigation supports
|
||||||
closeToggle();
|
// opening and closing the nav tree, so don't dismiss on click)
|
||||||
}, 50)
|
const clickEl = placeholderDescriptor.dismissOnClick
|
||||||
);
|
? toggleContainer
|
||||||
|
: toggleTitle;
|
||||||
|
|
||||||
// Handle positioning of the toggle
|
const closeToggle = () => {
|
||||||
window.addEventListener(
|
if (tocShowing) {
|
||||||
"resize",
|
toggleContainer.classList.remove("expanded");
|
||||||
throttle(() => {
|
toggleContents.style.height = "0px";
|
||||||
positionToggle();
|
tocShowing = false;
|
||||||
}, 50)
|
}
|
||||||
);
|
};
|
||||||
positionToggle();
|
|
||||||
|
|
||||||
// Process the click
|
// Get rid of any expanded toggle if the user scrolls
|
||||||
clickEl.onclick = () => {
|
window.document.addEventListener(
|
||||||
if (!tocShowing) {
|
"scroll",
|
||||||
toggleContainer.classList.add("expanded");
|
throttle(() => {
|
||||||
toggleContents.style.height = null;
|
closeToggle();
|
||||||
tocShowing = true;
|
}, 50)
|
||||||
} else {
|
);
|
||||||
closeToggle();
|
|
||||||
}
|
// Handle positioning of the toggle
|
||||||
};
|
window.addEventListener(
|
||||||
|
"resize",
|
||||||
|
throttle(() => {
|
||||||
|
elRect = undefined;
|
||||||
|
positionToggle();
|
||||||
|
}, 50)
|
||||||
|
);
|
||||||
|
|
||||||
|
window.addEventListener("quarto-hrChanged", () => {
|
||||||
|
elRect = undefined;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Process the click
|
||||||
|
clickEl.onclick = () => {
|
||||||
|
if (!tocShowing) {
|
||||||
|
toggleContainer.classList.add("expanded");
|
||||||
|
toggleContents.style.height = null;
|
||||||
|
tocShowing = true;
|
||||||
|
} else {
|
||||||
|
closeToggle();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// Converts a sidebar from a menu back to a sidebar
|
// Converts a sidebar from a menu back to a sidebar
|
||||||
@ -398,6 +451,11 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
convertToMenu();
|
convertToMenu();
|
||||||
isVisible = false;
|
isVisible = false;
|
||||||
} else {
|
} else {
|
||||||
|
// Find the top and bottom o the element that is being managed
|
||||||
|
const elTop = el.offsetTop;
|
||||||
|
const elBottom =
|
||||||
|
elTop + lastChildEl.offsetTop + lastChildEl.offsetHeight;
|
||||||
|
|
||||||
if (!isVisible) {
|
if (!isVisible) {
|
||||||
// If the element is current not visible reveal if there are
|
// If the element is current not visible reveal if there are
|
||||||
// no conflicts with overlay regions
|
// no conflicts with overlay regions
|
||||||
@ -418,26 +476,51 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
// Find any conflicting margin elements and add margins to the
|
const tabEls = document.querySelectorAll('a[data-bs-toggle="tab"]');
|
||||||
// top to prevent overlap
|
for (const tabEl of tabEls) {
|
||||||
const marginChildren = window.document.querySelectorAll(
|
const id = tabEl.getAttribute("data-bs-target");
|
||||||
".column-margin.column-container > * "
|
if (id) {
|
||||||
);
|
const columnEl = document.querySelector(
|
||||||
|
`${id} .column-margin, .tabset-margin-content`
|
||||||
|
);
|
||||||
|
if (columnEl)
|
||||||
|
tabEl.addEventListener("shown.bs.tab", function (event) {
|
||||||
|
const el = event.srcElement;
|
||||||
|
if (el) {
|
||||||
|
const visibleCls = `${el.id}-margin-content`;
|
||||||
|
// walk up until we find a parent tabset
|
||||||
|
let panelTabsetEl = el.parentElement;
|
||||||
|
while (panelTabsetEl) {
|
||||||
|
if (panelTabsetEl.classList.contains("panel-tabset")) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
panelTabsetEl = panelTabsetEl.parentElement;
|
||||||
|
}
|
||||||
|
|
||||||
nexttick(() => {
|
if (panelTabsetEl) {
|
||||||
let lastBottom = 0;
|
const prevSib = panelTabsetEl.previousElementSibling;
|
||||||
for (const marginChild of marginChildren) {
|
if (
|
||||||
const top = marginChild.getBoundingClientRect().top + window.scrollY;
|
prevSib &&
|
||||||
if (top < lastBottom) {
|
prevSib.classList.contains("tabset-margin-container")
|
||||||
const margin = lastBottom - top;
|
) {
|
||||||
marginChild.style.marginTop = `${margin}px`;
|
const childNodes = prevSib.querySelectorAll(
|
||||||
}
|
".tabset-margin-content"
|
||||||
const styles = window.getComputedStyle(marginChild);
|
);
|
||||||
const marginTop = parseFloat(styles["marginTop"]);
|
for (const childEl of childNodes) {
|
||||||
|
if (childEl.classList.contains(visibleCls)) {
|
||||||
|
childEl.classList.remove("collapse");
|
||||||
|
} else {
|
||||||
|
childEl.classList.add("collapse");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
lastBottom = top + marginChild.getBoundingClientRect().height + marginTop;
|
layoutMarginEls();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
// Manage the visibility of the toc and the sidebar
|
// Manage the visibility of the toc and the sidebar
|
||||||
const marginScrollVisibility = manageSidebarVisiblity(marginSidebarEl, {
|
const marginScrollVisibility = manageSidebarVisiblity(marginSidebarEl, {
|
||||||
@ -506,8 +589,9 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
const kOverlapPaddingSize = 10;
|
const kOverlapPaddingSize = 10;
|
||||||
function toRegions(els) {
|
function toRegions(els) {
|
||||||
return els.map((el) => {
|
return els.map((el) => {
|
||||||
|
const boundRect = el.getBoundingClientRect();
|
||||||
const top =
|
const top =
|
||||||
el.getBoundingClientRect().top +
|
boundRect.top +
|
||||||
document.documentElement.scrollTop -
|
document.documentElement.scrollTop -
|
||||||
kOverlapPaddingSize;
|
kOverlapPaddingSize;
|
||||||
return {
|
return {
|
||||||
@ -517,11 +601,51 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let hasObserved = false;
|
||||||
|
const visibleItemObserver = (els) => {
|
||||||
|
let visibleElements = [...els];
|
||||||
|
const intersectionObserver = new IntersectionObserver(
|
||||||
|
(entries, _observer) => {
|
||||||
|
entries.forEach((entry) => {
|
||||||
|
if (entry.isIntersecting) {
|
||||||
|
if (visibleElements.indexOf(entry.target) === -1) {
|
||||||
|
visibleElements.push(entry.target);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
visibleElements = visibleElements.filter((visibleEntry) => {
|
||||||
|
return visibleEntry !== entry;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!hasObserved) {
|
||||||
|
hideOverlappedSidebars();
|
||||||
|
}
|
||||||
|
hasObserved = true;
|
||||||
|
},
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
els.forEach((el) => {
|
||||||
|
intersectionObserver.observe(el);
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
getVisibleEntries: () => {
|
||||||
|
return visibleElements;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const rightElementObserver = visibleItemObserver(rightSideConflictEls);
|
||||||
|
const leftElementObserver = visibleItemObserver(leftSideConflictEls);
|
||||||
|
|
||||||
const hideOverlappedSidebars = () => {
|
const hideOverlappedSidebars = () => {
|
||||||
marginScrollVisibility(toRegions(rightSideConflictEls));
|
marginScrollVisibility(toRegions(rightElementObserver.getVisibleEntries()));
|
||||||
sidebarScrollVisiblity(toRegions(leftSideConflictEls));
|
sidebarScrollVisiblity(toRegions(leftElementObserver.getVisibleEntries()));
|
||||||
if (tocLeftScrollVisibility) {
|
if (tocLeftScrollVisibility) {
|
||||||
tocLeftScrollVisibility(toRegions(leftSideConflictEls));
|
tocLeftScrollVisibility(
|
||||||
|
toRegions(leftElementObserver.getVisibleEntries())
|
||||||
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -543,7 +667,6 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
manageTransition("TOC", slow);
|
manageTransition("TOC", slow);
|
||||||
manageTransition("quarto-sidebar", slow);
|
manageTransition("quarto-sidebar", slow);
|
||||||
};
|
};
|
||||||
|
|
||||||
const readerMode = !isReaderMode();
|
const readerMode = !isReaderMode();
|
||||||
setReaderModeValue(readerMode);
|
setReaderModeValue(readerMode);
|
||||||
|
|
||||||
@ -590,6 +713,9 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
};
|
};
|
||||||
let localReaderMode = null;
|
let localReaderMode = null;
|
||||||
|
|
||||||
|
const tocOpenDepthStr = tocEl?.getAttribute("data-toc-expanded");
|
||||||
|
const tocOpenDepth = tocOpenDepthStr ? Number(tocOpenDepthStr) : 1;
|
||||||
|
|
||||||
// Walk the TOC and collapse/expand nodes
|
// Walk the TOC and collapse/expand nodes
|
||||||
// Nodes are expanded if:
|
// Nodes are expanded if:
|
||||||
// - they are top level
|
// - they are top level
|
||||||
@ -615,7 +741,13 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
|
|
||||||
// Process the collapse state if this is an UL
|
// Process the collapse state if this is an UL
|
||||||
if (el.tagName === "UL") {
|
if (el.tagName === "UL") {
|
||||||
if (depth === 1 || hasActiveChild || prevSiblingIsActiveLink(el)) {
|
if (tocOpenDepth === -1 && depth > 1) {
|
||||||
|
el.classList.add("collapse");
|
||||||
|
} else if (
|
||||||
|
depth <= tocOpenDepth ||
|
||||||
|
hasActiveChild ||
|
||||||
|
prevSiblingIsActiveLink(el)
|
||||||
|
) {
|
||||||
el.classList.remove("collapse");
|
el.classList.remove("collapse");
|
||||||
} else {
|
} else {
|
||||||
el.classList.add("collapse");
|
el.classList.add("collapse");
|
||||||
|
@ -8,6 +8,47 @@ const headroomChanged = new CustomEvent("quarto-hrChanged", {
|
|||||||
window.document.addEventListener("DOMContentLoaded", function () {
|
window.document.addEventListener("DOMContentLoaded", function () {
|
||||||
let init = false;
|
let init = false;
|
||||||
|
|
||||||
|
// Manage the back to top button, if one is present.
|
||||||
|
let lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;
|
||||||
|
const scrollDownBuffer = 5;
|
||||||
|
const scrollUpBuffer = 35;
|
||||||
|
const btn = document.getElementById("quarto-back-to-top");
|
||||||
|
const hideBackToTop = () => {
|
||||||
|
btn.style.display = "none";
|
||||||
|
};
|
||||||
|
const showBackToTop = () => {
|
||||||
|
btn.style.display = "inline-block";
|
||||||
|
};
|
||||||
|
if (btn) {
|
||||||
|
window.document.addEventListener(
|
||||||
|
"scroll",
|
||||||
|
function () {
|
||||||
|
const currentScrollTop =
|
||||||
|
window.pageYOffset || document.documentElement.scrollTop;
|
||||||
|
|
||||||
|
// Shows and hides the button 'intelligently' as the user scrolls
|
||||||
|
if (currentScrollTop - scrollDownBuffer > lastScrollTop) {
|
||||||
|
hideBackToTop();
|
||||||
|
lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop;
|
||||||
|
} else if (currentScrollTop < lastScrollTop - scrollUpBuffer) {
|
||||||
|
showBackToTop();
|
||||||
|
lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Show the button at the bottom, hides it at the top
|
||||||
|
if (currentScrollTop <= 0) {
|
||||||
|
hideBackToTop();
|
||||||
|
} else if (
|
||||||
|
window.innerHeight + currentScrollTop >=
|
||||||
|
document.body.offsetHeight
|
||||||
|
) {
|
||||||
|
showBackToTop();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
false
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function throttle(func, wait) {
|
function throttle(func, wait) {
|
||||||
var timeout;
|
var timeout;
|
||||||
return function () {
|
return function () {
|
||||||
@ -149,6 +190,18 @@ window.document.addEventListener("DOMContentLoaded", function () {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
window.addEventListener(
|
||||||
|
"hashchange",
|
||||||
|
function (e) {
|
||||||
|
if (
|
||||||
|
getComputedStyle(document.documentElement).scrollBehavior !== "smooth"
|
||||||
|
) {
|
||||||
|
window.scrollTo(0, window.pageYOffset - headerOffset());
|
||||||
|
}
|
||||||
|
},
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
// Observe size changed for the header
|
// Observe size changed for the header
|
||||||
const headerEl = window.document.querySelector("header.fixed-top");
|
const headerEl = window.document.querySelector("header.fixed-top");
|
||||||
if (headerEl && window.ResizeObserver) {
|
if (headerEl && window.ResizeObserver) {
|
||||||
@ -172,7 +225,9 @@ window.document.addEventListener("DOMContentLoaded", function () {
|
|||||||
if (window.location.protocol !== "file:") {
|
if (window.location.protocol !== "file:") {
|
||||||
const links = window.document.querySelectorAll("a");
|
const links = window.document.querySelectorAll("a");
|
||||||
for (let i = 0; i < links.length; i++) {
|
for (let i = 0; i < links.length; i++) {
|
||||||
links[i].href = links[i].href.replace(/\/index\.html/, "/");
|
if (links[i].href) {
|
||||||
|
links[i].href = links[i].href.replace(/\/index\.html/, "/");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fixup any sharing links that require urls
|
// Fixup any sharing links that require urls
|
||||||
|
File diff suppressed because one or more lines are too long
6
_site/site_libs/quarto-search/fuse.min.js
vendored
6
_site/site_libs/quarto-search/fuse.min.js
vendored
File diff suppressed because one or more lines are too long
@ -45,7 +45,7 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
// highlight matches on the page
|
// highlight matches on the page
|
||||||
if (query !== null && mainEl) {
|
if (query !== null && mainEl) {
|
||||||
// perform any highlighting
|
// perform any highlighting
|
||||||
highlight(query, mainEl);
|
highlight(escapeRegExp(query), mainEl);
|
||||||
|
|
||||||
// fix up the URL to remove the q query param
|
// fix up the URL to remove the q query param
|
||||||
const replacementUrl = new URL(window.location);
|
const replacementUrl = new URL(window.location);
|
||||||
@ -80,23 +80,20 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
// the media query since we generate different HTML for sidebar overlays than we do
|
// the media query since we generate different HTML for sidebar overlays than we do
|
||||||
// for sidebar input UI)
|
// for sidebar input UI)
|
||||||
const detachedMediaQuery =
|
const detachedMediaQuery =
|
||||||
quartoSearchOptions.type === "overlay"
|
quartoSearchOptions.type === "overlay" ? "all" : "(max-width: 991px)";
|
||||||
? "all"
|
|
||||||
: quartoSearchOptions.location === "navbar"
|
|
||||||
? "(max-width: 991px)"
|
|
||||||
: "none";
|
|
||||||
|
|
||||||
// If configured, include the analytics client to send insights
|
// If configured, include the analytics client to send insights
|
||||||
const plugins = configurePlugins(quartoSearchOptions);
|
const plugins = configurePlugins(quartoSearchOptions);
|
||||||
|
|
||||||
let lastState = null;
|
let lastState = null;
|
||||||
const { setIsOpen } = autocomplete({
|
const { setIsOpen, setQuery, setCollections } = autocomplete({
|
||||||
container: searchEl,
|
container: searchEl,
|
||||||
detachedMediaQuery: detachedMediaQuery,
|
detachedMediaQuery: detachedMediaQuery,
|
||||||
defaultActiveItemId: 0,
|
defaultActiveItemId: 0,
|
||||||
panelContainer: "#quarto-search-results",
|
panelContainer: "#quarto-search-results",
|
||||||
panelPlacement: quartoSearchOptions["panel-placement"],
|
panelPlacement: quartoSearchOptions["panel-placement"],
|
||||||
debug: false,
|
debug: false,
|
||||||
|
openOnFocus: true,
|
||||||
plugins,
|
plugins,
|
||||||
classNames: {
|
classNames: {
|
||||||
form: "d-flex",
|
form: "d-flex",
|
||||||
@ -280,6 +277,10 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
getItems({ query }) {
|
getItems({ query }) {
|
||||||
|
if (query === null || query === "") {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
const limit = quartoSearchOptions.limit;
|
const limit = quartoSearchOptions.limit;
|
||||||
if (quartoSearchOptions.algolia) {
|
if (quartoSearchOptions.algolia) {
|
||||||
return algoliaSearch(query, limit, quartoSearchOptions.algolia);
|
return algoliaSearch(query, limit, quartoSearchOptions.algolia);
|
||||||
@ -299,9 +300,15 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
},
|
},
|
||||||
templates: {
|
templates: {
|
||||||
noResults({ createElement }) {
|
noResults({ createElement }) {
|
||||||
|
const hasQuery = lastState.query;
|
||||||
|
|
||||||
return createElement(
|
return createElement(
|
||||||
"div",
|
"div",
|
||||||
{ class: "quarto-search-no-results" },
|
{
|
||||||
|
class: `quarto-search-no-results${
|
||||||
|
hasQuery ? "" : " no-query"
|
||||||
|
}`,
|
||||||
|
},
|
||||||
language["search-no-results-text"]
|
language["search-no-results-text"]
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
@ -361,6 +368,12 @@ window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
window.quartoOpenSearch = () => {
|
||||||
|
setIsOpen(false);
|
||||||
|
setIsOpen(true);
|
||||||
|
focusSearchInput();
|
||||||
|
};
|
||||||
|
|
||||||
// Remove the labeleledby attribute since it is pointing
|
// Remove the labeleledby attribute since it is pointing
|
||||||
// to a non-existent label
|
// to a non-existent label
|
||||||
if (quartoSearchOptions.type === "overlay") {
|
if (quartoSearchOptions.type === "overlay") {
|
||||||
@ -976,6 +989,10 @@ function clearHighlight(searchterm, el) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function escapeRegExp(string) {
|
||||||
|
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
|
||||||
|
}
|
||||||
|
|
||||||
// highlight matches
|
// highlight matches
|
||||||
function highlight(term, el) {
|
function highlight(term, el) {
|
||||||
const termRegex = new RegExp(term, "ig");
|
const termRegex = new RegExp(term, "ig");
|
||||||
|
120
_site/test.html
120
_site/test.html
@ -2,7 +2,7 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
|
||||||
|
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="generator" content="quarto-1.2.475">
|
<meta name="generator" content="quarto-1.3.353">
|
||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
|
|||||||
ul.task-list{list-style: none;}
|
ul.task-list{list-style: none;}
|
||||||
ul.task-list li input[type="checkbox"] {
|
ul.task-list li input[type="checkbox"] {
|
||||||
width: 0.8em;
|
width: 0.8em;
|
||||||
margin: 0 0.8em 0.2em -1.6em;
|
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@ -74,29 +74,31 @@ ul.task-list li input[type="checkbox"] {
|
|||||||
<span class="navbar-title">WASH Web</span>
|
<span class="navbar-title">WASH Web</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</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(); }">
|
<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>
|
<span class="navbar-toggler-icon"></span>
|
||||||
</button>
|
</button>
|
||||||
<div class="collapse navbar-collapse" id="navbarCollapse">
|
<div class="collapse navbar-collapse" id="navbarCollapse">
|
||||||
<ul class="navbar-nav navbar-nav-scroll me-auto">
|
<ul class="navbar-nav navbar-nav-scroll me-auto">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="./index.html">
|
<a class="nav-link" href="./index.html" rel="" target="">
|
||||||
<span class="menu-text">Home</span></a>
|
<span class="menu-text">Home</span></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="./vision.html">
|
<a class="nav-link" href="./vision.html" rel="" target="">
|
||||||
<span class="menu-text">Vision</span></a>
|
<span class="menu-text">Vision</span></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="./contact.html">
|
<a class="nav-link" href="./contact.html" rel="" target="">
|
||||||
<span class="menu-text">Contact</span></a>
|
<span class="menu-text">Contact</span></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="./posts.html">
|
<a class="nav-link" href="./posts.html" rel="" target="">
|
||||||
<span class="menu-text">News</span></a>
|
<span class="menu-text">News</span></a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div id="quarto-search" class="" title="Search"></div>
|
<div class="quarto-navbar-tools ms-auto">
|
||||||
|
</div>
|
||||||
</div> <!-- /navcollapse -->
|
</div> <!-- /navcollapse -->
|
||||||
</div> <!-- /container-fluid -->
|
</div> <!-- /container-fluid -->
|
||||||
</nav>
|
</nav>
|
||||||
@ -159,9 +161,23 @@ window.document.addEventListener("DOMContentLoaded", function (event) {
|
|||||||
icon: icon
|
icon: icon
|
||||||
};
|
};
|
||||||
anchorJS.add('.anchored');
|
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', {
|
const clipboard = new window.ClipboardJS('.code-copy-button', {
|
||||||
target: function(trigger) {
|
text: function(trigger) {
|
||||||
return trigger.previousElementSibling;
|
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) {
|
clipboard.on('success', function(e) {
|
||||||
@ -226,6 +242,92 @@ window.document.addEventListener("DOMContentLoaded", function (event) {
|
|||||||
return note.innerHTML;
|
return note.innerHTML;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
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";
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
// 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 findCites = (el) => {
|
||||||
const parentEl = el.parentElement;
|
const parentEl = el.parentElement;
|
||||||
if (parentEl) {
|
if (parentEl) {
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
|
||||||
|
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="generator" content="quarto-1.2.475">
|
<meta name="generator" content="quarto-1.3.353">
|
||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
|
|||||||
ul.task-list{list-style: none;}
|
ul.task-list{list-style: none;}
|
||||||
ul.task-list li input[type="checkbox"] {
|
ul.task-list li input[type="checkbox"] {
|
||||||
width: 0.8em;
|
width: 0.8em;
|
||||||
margin: 0 0.8em 0.2em -1.6em;
|
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@ -74,29 +74,31 @@ ul.task-list li input[type="checkbox"] {
|
|||||||
<span class="navbar-title">WASH Web</span>
|
<span class="navbar-title">WASH Web</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</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(); }">
|
<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>
|
<span class="navbar-toggler-icon"></span>
|
||||||
</button>
|
</button>
|
||||||
<div class="collapse navbar-collapse" id="navbarCollapse">
|
<div class="collapse navbar-collapse" id="navbarCollapse">
|
||||||
<ul class="navbar-nav navbar-nav-scroll me-auto">
|
<ul class="navbar-nav navbar-nav-scroll me-auto">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="./index.html">
|
<a class="nav-link" href="./index.html" rel="" target="">
|
||||||
<span class="menu-text">Home</span></a>
|
<span class="menu-text">Home</span></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link active" href="./vision.html" aria-current="page">
|
<a class="nav-link active" href="./vision.html" rel="" target="" aria-current="page">
|
||||||
<span class="menu-text">Vision</span></a>
|
<span class="menu-text">Vision</span></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="./contact.html">
|
<a class="nav-link" href="./contact.html" rel="" target="">
|
||||||
<span class="menu-text">Contact</span></a>
|
<span class="menu-text">Contact</span></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="./posts.html">
|
<a class="nav-link" href="./posts.html" rel="" target="">
|
||||||
<span class="menu-text">News</span></a>
|
<span class="menu-text">News</span></a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div id="quarto-search" class="" title="Search"></div>
|
<div class="quarto-navbar-tools ms-auto">
|
||||||
|
</div>
|
||||||
</div> <!-- /navcollapse -->
|
</div> <!-- /navcollapse -->
|
||||||
</div> <!-- /container-fluid -->
|
</div> <!-- /container-fluid -->
|
||||||
</nav>
|
</nav>
|
||||||
@ -139,10 +141,7 @@ ul.task-list li input[type="checkbox"] {
|
|||||||
<p><strong>Useful</strong> information is information from which one can begin to take action. Often key information about who to contact for more information, what happened, when and where is missing. If there is information about water services or sanitation, these are often dated.</p>
|
<p><strong>Useful</strong> information is information from which one can begin to take action. Often key information about who to contact for more information, what happened, when and where is missing. If there is information about water services or sanitation, these are often dated.</p>
|
||||||
<p>In short, WASH Web intends to make information and expertise more accessible so that it is no longer only experts who are able to make informed decisions based on available evidence. Up until now, WASH Web has been an idea and a project that a few people have been playing with. This website and the project is open source and participatory meaning it is open to the initiative and inputs from others. Currently, WASHNote hosts and maintains the project website and source code.</p>
|
<p>In short, WASH Web intends to make information and expertise more accessible so that it is no longer only experts who are able to make informed decisions based on available evidence. Up until now, WASH Web has been an idea and a project that a few people have been playing with. This website and the project is open source and participatory meaning it is open to the initiative and inputs from others. Currently, WASHNote hosts and maintains the project website and source code.</p>
|
||||||
<p>Would you like to get involved? Please get in touch or add an issue on Github.</p>
|
<p>Would you like to get involved? Please get in touch or add an issue on Github.</p>
|
||||||
<div class="cell">
|
<p>This website was last updated on 2023-07-31 .</p>
|
||||||
|
|
||||||
</div>
|
|
||||||
<p>This website was last updated on 2023-07-04 .</p>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -174,9 +173,23 @@ window.document.addEventListener("DOMContentLoaded", function (event) {
|
|||||||
icon: icon
|
icon: icon
|
||||||
};
|
};
|
||||||
anchorJS.add('.anchored');
|
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', {
|
const clipboard = new window.ClipboardJS('.code-copy-button', {
|
||||||
target: function(trigger) {
|
text: function(trigger) {
|
||||||
return trigger.previousElementSibling;
|
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) {
|
clipboard.on('success', function(e) {
|
||||||
@ -241,6 +254,92 @@ window.document.addEventListener("DOMContentLoaded", function (event) {
|
|||||||
return note.innerHTML;
|
return note.innerHTML;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
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";
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
// 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 findCites = (el) => {
|
||||||
const parentEl = el.parentElement;
|
const parentEl = el.parentElement;
|
||||||
if (parentEl) {
|
if (parentEl) {
|
||||||
|
@ -8,10 +8,10 @@ title: "Contact"
|
|||||||
|
|
||||||
Founder of [WASHNote](#0). With over 15 years of experience in the WASH sector, Nick is highly specialized in the development of international and regional monitoring of WASH commitments and their enabling environments, providing country-led monitoring and evaluation of services, and facilitating trainings to a range of different organizations. Above all, he firmly believes in the need for making better use of data and digital systems to advance towards reaching SDG 6: clean water and sanitation for all by 2030.
|
Founder of [WASHNote](#0). With over 15 years of experience in the WASH sector, Nick is highly specialized in the development of international and regional monitoring of WASH commitments and their enabling environments, providing country-led monitoring and evaluation of services, and facilitating trainings to a range of different organizations. Above all, he firmly believes in the need for making better use of data and digital systems to advance towards reaching SDG 6: clean water and sanitation for all by 2030.
|
||||||
|
|
||||||
[Email](dickinson@washnote.com) \| [LinkedIn](https://www.linkedin.com/in/nicolasdickinson/)
|
[Email](mailto:dickinson@washnote.com){target="_blank"} \| [LinkedIn](https://www.linkedin.com/in/nicolasdickinson/)
|
||||||
|
|
||||||
#### Merel Laauwen - WASH Web Coordinator
|
#### Merel Laauwen - WASH Web Coordinator
|
||||||
|
|
||||||
Merel works as an [independent consultant](https://www.lwn.earth/) in the WASH sector. Her work spans a variety of topics, from WASH systems strengthening to disaster preparedness in humanitarian settings. She studied an MSc in Water Science, Policy and Management at the University of Oxford, where her dissertation research focused on the use of systems thinking in the implementation of rural water treatment.
|
Merel works as an [independent consultant](https://www.lwn.earth/) in the WASH sector. Her work spans a variety of topics, from WASH systems strengthening to disaster preparedness in humanitarian settings. She studied an MSc in Water Science, Policy and Management at the University of Oxford, where her dissertation research focused on the use of systems thinking in the implementation of rural water treatment.
|
||||||
|
|
||||||
[Email](merel@lwn.earth) \| [LinkedIn](https://www.linkedin.com/in/merel-laauwen/)
|
[Email](mailto:merel@lwn.earth){target="_blank"} \| [LinkedIn](https://www.linkedin.com/in/merel-laauwen/)
|
||||||
|
14
index.qmd
14
index.qmd
@ -4,15 +4,17 @@ title: "Agents of Change"
|
|||||||
|
|
||||||
WASH Web is a set of participatory initiatives to give you and everyone you know better access to water, sanitation and hygiene information. This web page is where you can find more information about taking part in various ways.
|
WASH Web is a set of participatory initiatives to give you and everyone you know better access to water, sanitation and hygiene information. This web page is where you can find more information about taking part in various ways.
|
||||||
|
|
||||||
## Our vision
|
The WASH Web is made up of people and organizations that work to fill the water, sanitation and hygiene (WASH) gap to make data discoverable, usable and representative. WASH Web is meant to serve as an open platform and requires diverse inputs to work. Our vision cannot be realized without community support.
|
||||||
|
|
||||||
WASH Web helps organizations that work to fill the water, sanitation and hygiene (WASH) gap, by offering training and data management services to make data discoverable, usable and representative to facilitate an improved data environment which contributes to decision-making at scale. We aim to facilitate collaboration and working group discussions through four different "initiatives". WASH Web is meant to serve as an open platform and requires input from others in the sector. Our vision cannot be realized without community support.
|
[Please join us to contribute.](#join)
|
||||||
|
|
||||||
# Working groups
|
# Working group initiatives
|
||||||
|
|
||||||
|
The work groups facilitate collaboration and discussions on four different initiatives for an improved and healthy data environment.
|
||||||
|
|
||||||
## Social Justice
|
## Social Justice
|
||||||
|
|
||||||
Access to safe drinking water is a basic human right, and access to WASH systems is a social justice issue. What information is needed to improve access for marginalized people? Are there specific ethical issues around data collection and use that need to be addressed?
|
Access to safe drinking water is a basic human right, and access to WASH systems is a social justice issue. What information is needed to improve access for marginalized people? What specific ethical issues around data collection, privacy, data ownership, and use of data need to be addressed?
|
||||||
|
|
||||||
## Using Data Better
|
## Using Data Better
|
||||||
|
|
||||||
@ -24,9 +26,9 @@ In the WASH sector, it is increasingly recognized that systems strengthening is
|
|||||||
|
|
||||||
## Accountability: 4Ws
|
## Accountability: 4Ws
|
||||||
|
|
||||||
The actors accountable for water and sanitation decision-making are often dispersed throughout diverse organizations. As a result, there is a scattered and disconnected WASH data ecosystem. The Registry aims to offer an overview of **who** is **where, when,** and doing **what** for formal change agents.
|
The actors accountable for water and sanitation decision-making are often dispersed throughout diverse organizations. As a result, there is a scattered and disconnected WASH data ecosystem. It is proposed to make a WASH Registry to offer an overview of **who** is **where, when,** and doing **what** for formal change agents. Can this make the WASH sector more accountable?
|
||||||
|
|
||||||
## Who can take part?
|
## Who can take part? {#join}
|
||||||
|
|
||||||
Citizens, suppliers, NGOs and governments can take part to better use evidence to and to make information accessible.
|
Citizens, suppliers, NGOs and governments can take part to better use evidence to and to make information accessible.
|
||||||
|
|
||||||
|
100
privacy.qmd
Normal file
100
privacy.qmd
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
---
|
||||||
|
title: "PRIVACY POLICY"
|
||||||
|
---
|
||||||
|
|
||||||
|
When you visit our websites and contact us or create an account on \*.washweb.org, \*.washnote.org, and \*.washnote.com we receive information about you.
|
||||||
|
|
||||||
|
We also have a commitment to reducing the use of private data to the bare minimum to provide you with these websites and associated services.
|
||||||
|
|
||||||
|
We do our best to handle your information securely and with respect and care.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This privacy policy applies to all personal data that we process on all domains related to us. This concerns personal data of visitors and users of these websites.
|
||||||
|
|
||||||
|
We process the personal data of anyone who has visited our website and created an account, filled in data, or contacted us.
|
||||||
|
|
||||||
|
Personal data is data that can be traced back to you. If you want to know more, please visit the website of the [Dutch Data Protection Authority](https://www.autoriteitpersoonsgegevens.nl/themas/basis-avg) or the [EU GDPR website](https://gdpr.eu/).
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
We only use your personal data for the purpose for which we are allowed to use it based on our permission to use your personal data and based on data required to provide you with the service requested.
|
||||||
|
|
||||||
|
We have a commitment to keep this to the minimum required.
|
||||||
|
|
||||||
|
We don't share your personal data with others.
|
||||||
|
|
||||||
|
## WASHNote
|
||||||
|
|
||||||
|
WASHNote is responsible for the website (\*.washnote.com, \*.washnote.org, and \*.washweb.org) and therefore the responsible organisation for the use of your personal data as described in this privacy statement. Our full details are:
|
||||||
|
|
||||||
|
WASHNote\
|
||||||
|
Sumatraweg 5A\
|
||||||
|
3072ZP Rotterdam\
|
||||||
|
62484885
|
||||||
|
|
||||||
|
## What data, how long, and where?
|
||||||
|
|
||||||
|
We may use your name, address or business address, e-mail address, telephone number, and information you provide.
|
||||||
|
|
||||||
|
We keep your personal data for as long as we are required to do so by law and for as long as you use our services. We only process your personal data ourselves.
|
||||||
|
|
||||||
|
We process your data within the European Economic Area and we follow the the Dutch General Data Protection Regulation.
|
||||||
|
|
||||||
|
General rules that apply under Dutch law apply to our privacy statement.
|
||||||
|
|
||||||
|
## Data protection
|
||||||
|
|
||||||
|
We do our best to ensure your data is safe according to the latest standards. We also minimize the amount of data we hold to the bare minimum to ensure we reduce any potential risks.
|
||||||
|
|
||||||
|
## What are your data protection rights?
|
||||||
|
|
||||||
|
We would like to make sure you are fully aware of all of your data protection rights. Every user is entitled to the following:
|
||||||
|
|
||||||
|
**The right to access** -- You have the right to request WASHNote for copies of your personal data. We may charge you a small fee for this service.
|
||||||
|
|
||||||
|
**The right to rectification** -- You have the right to request that WASHNote correct any information you believe is inaccurate. You also have the right to request WASHNote to complete the information you believe is incomplete.
|
||||||
|
|
||||||
|
**The right to erasure** -- You have the right to request that WASHNote erase your personal data, under certain conditions. In some cases, may be required keep some data for 7 years for the Dutch tax authorities.
|
||||||
|
|
||||||
|
**The right to restrict processing** -- You have the right to request that WASHNote restrict the processing of your personal data, under certain conditions.
|
||||||
|
|
||||||
|
**The right to object to processing** -- You have the right to object to WASHNote's processing of your personal data, under certain conditions.
|
||||||
|
|
||||||
|
**The right to data portability** -- You have the right to request that WASHNote transfer the data that we have collected to another organization, or directly to you, under certain conditions.
|
||||||
|
|
||||||
|
If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us at our email: dickinson+privacy\@washnote.com
|
||||||
|
|
||||||
|
If you submit multiple applications or a complex request, it could potentially require additional processing time. In such instances, we will make sure to reach out to you within a maximum of 60 days. If necessary, we may also request that you verify your identity by providing specific information to confirm that you are indeed the rightful owner of the personal data in question.
|
||||||
|
|
||||||
|
## Cookies
|
||||||
|
|
||||||
|
Cookies are text files placed on your computer to collect standard Internet log information and visitor behavior information. When you visit our websites, we may collect information from you automatically through cookies or similar technology
|
||||||
|
|
||||||
|
For further information, visit allaboutcookies.org.
|
||||||
|
|
||||||
|
### How do we use cookies?
|
||||||
|
|
||||||
|
Our Company uses cookies in a range of ways to improve your experience on our website, including:
|
||||||
|
|
||||||
|
- Keeping you signed in and storing information for your session
|
||||||
|
|
||||||
|
We do not use cookies for advertising or tracking.
|
||||||
|
|
||||||
|
### What types of cookies do we use?
|
||||||
|
|
||||||
|
There are a number of different types of cookies, however, our website uses only:
|
||||||
|
|
||||||
|
- Functionality -- Our Company uses these cookies so that we recognize you on our website and remember your previously selected preferences. These could include what language you prefer and location you are in. A mix of first-party and third-party cookies are used.
|
||||||
|
|
||||||
|
### How to manage cookies
|
||||||
|
|
||||||
|
You can set your browser not to accept cookies, and the above website tells you how to remove cookies from your browser. However, in a few cases, some of our website features may not function as a result.
|
||||||
|
|
||||||
|
## Minors
|
||||||
|
|
||||||
|
We do not target minors with our website or as an organisation. This means that if you are under the age of 18, you need permission from a parent or guardian to use our website. If you are a minor when you visit our websites, we assume that you have received this permission before your visit.
|
||||||
|
|
||||||
|
## How to contact us
|
||||||
|
|
||||||
|
If you have a question about our privacy policy, please get in touch: dickinson+privacy\@washnote.com.
|
Loading…
Reference in New Issue
Block a user