diff --git a/.nojekyll b/.nojekyll
index 60f4497..87f0942 100644
--- a/.nojekyll
+++ b/.nojekyll
@@ -1 +1 @@
-4c63f648
\ No newline at end of file
+db9d08c6
\ No newline at end of file
diff --git a/404.html b/404.html
index 702155e..741bbf0 100644
--- a/404.html
+++ b/404.html
@@ -2,7 +2,7 @@
-
+
@@ -17,7 +17,7 @@
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
- margin: 0 0.8em 0.2em -1.6em;
+ margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
@@ -55,7 +55,8 @@
"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"
+ "search-submit-button-title": "Submit",
+ "search-label": "Search"
}
}
@@ -74,42 +75,43 @@
Quarto social embeds
+
@@ -193,9 +196,23 @@ Oooops! Tha
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', {
- target: function(trigger) {
- return trigger.previousElementSibling;
+ 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) {
@@ -260,6 +277,92 @@ Oooops! Tha
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) {
@@ -303,4 +406,4 @@ Oooops! Tha
-
\ No newline at end of file
+