cognitive-complexity-ts
Version:
This program analyses TypeScript and JavaScript code according to the [Cognitive Complexity metric](https://www.sonarsource.com/docs/CognitiveComplexity.pdf). It produces a JSON summary and a GUI for exploring the complexity of your codebase.
52 lines • 1.83 kB
JavaScript
import { flexGrow, flexNone } from "../../flex.js";
import { addStyleSheet, element } from "../../framework.js";
import { computeOnce } from "../../util.js";
import { FlexBox } from "./FlexBox.js";
import { ToggleButton } from "./ToggleButton.js";
addStyleSheet(import.meta.url);
export class ToggleableBox {
constructor(visibleContent, isTopLevel, onManualStateChange) {
this.showHideable = isTopLevel;
this.box = new FlexBox();
this.toggleableContent = () => [];
this.toggleableContentWrapper = flexGrow(new ContentWrapper());
this.toggleButton = flexNone(new ToggleButton(this.showHideable, (newIsOpen) => {
this.showHideable = newIsOpen;
this.rerender();
}, onManualStateChange));
this.visibleContent = visibleContent;
this.rerender();
}
get dom() {
return this.box.dom;
}
changeHideableContent(toggleableContent) {
this.toggleableContent = computeOnce(toggleableContent);
this.rerender();
}
rerender() {
this.toggleableContentWrapper.rerender(this.visibleContent, this.showHideable
? this.toggleableContent()
: []);
this.box.rerender([
(this.toggleableContent().length > 0
? this.toggleButton.dom
: ""),
this.toggleableContentWrapper.dom,
]);
}
setOpenness(open) {
this.toggleButton.setState(open);
}
}
class ContentWrapper {
constructor() {
this.dom = element("div", { className: "toggleablebox-contentwrapper" });
}
rerender(visibleContent, toggleableContent) {
this.dom.innerHTML = "";
this.dom.append(...visibleContent);
this.dom.append(...toggleableContent);
}
}
//# sourceMappingURL=ToggleableBox.js.map