Skip to content

Commit

Permalink
Ignore nested column layouts
Browse files Browse the repository at this point in the history
The child layout will never make sense since it will be contained within a layout.

Fixes #6728

Also fixes cases like this:

---
title: Sample Quarto Document
format: html
execute:
  freeze: true
---

kjasdlkjasdl kajsdl kwajdal skjdsalk jdaslkd jasldk jasldk jasl kjasdlkas jdl aksjd laskdj alskdjlakdsj lakj aslkdj aslk djasld kjasldk asjdlkasj dlaskjd alskd jaslk djaslk djasldk jasldkjasldk

:::{.column-margin}

Hello World!

:::

kjasdlkjasdl kajsdl kwajdal skjdsalk jdaslkd jasldk jasldk jasl kjasdlkas jdl aksjd laskdj alskdjlakdsj lakj aslkdj aslk djasld kjasldk asjdlkasj dlaskjd alskd jaslk djaslk djasldk jasldkjasldk

:::{.column-page}

```{r}
#| column: screen
plot(cars)
```

:::

</aside>

kjasdlkjasdl kajsdl kwajdal skjdsalk jdaslkd jasldk jasldk jasl kjasdlkas jdl aksjd laskdj alskdjlakdsj lakj aslkdj aslk djasld kjasldk asjdlkasj dlaskjd alskd jaslk djaslk djasldk jasldkjasldk
  • Loading branch information
dragonstyle committed Dec 19, 2023
1 parent acf9c60 commit 2340217
Showing 1 changed file with 28 additions and 3 deletions.
31 changes: 28 additions & 3 deletions src/format/html/format-html-bootstrap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -219,11 +219,36 @@ export function boostrapExtras(

// Find any elements that are using fancy layouts (columns)
const getColumnLayoutElements = (doc: Document) => {
return doc.querySelectorAll(
'[class^="column-"], [class*=" column-"], aside:not(.footnotes):not(.sidebar), [class*="margin-caption"], [class*=" margin-caption"], [class*="margin-ref"], [class*=" margin-ref"]',
);
const nodes = doc.querySelectorAll(kColumnSelector);
const filteredEls: Element[] = [];

// Don't nest the layouts - the outer layout
// will win (and children that also have layouts will be ignored)
nodes.forEach((node) => {
const el = node as Element;
if (!isInColumnLayout(el, doc)) {
filteredEls.push(el);
}
});
return filteredEls;
};

const isInColumnLayout = (el: Element, doc: Document): boolean => {
const parent = el.parentElement;
if (!parent) {
return false;
}
for (const cls of parent.classList) {
if (cls.startsWith(`column-`)) {
return true;
}
}
return isInColumnLayout(parent, doc);
};

const kColumnSelector =
'[class^="column-"], [class*=" column-"], aside:not(.footnotes):not(.sidebar), [class*="margin-caption"], [class*=" margin-caption"], [class*="margin-ref"], [class*=" margin-ref"]';

function bootstrapHtmlPostprocessor(
input: string,
format: Format,
Expand Down

0 comments on commit 2340217

Please sign in to comment.