import NoteMapWidget from "../note_map.js";
import { t } from "../../services/i18n.js";
import RightPanelWidget from "../right_panel_widget.js";
const TPL = `
`;
export default class NoteMapRibbonWidget extends RightPanelWidget {
private openState!: "small" | "full";
private noteMapWidget: NoteMapWidget;
private $container!: JQuery;
private $openFullButton!: JQuery;
private $collapseButton!: JQuery;
constructor() {
super();
this.noteMapWidget = new NoteMapWidget("ribbon");
this.child(this.noteMapWidget);
}
get name() {
return "noteMap";
}
get toggleCommand() {
return "toggleRibbonTabNoteMap";
}
get widgetTitle() {
return t("note_map.title");
}
async doRenderBody() {
this.$body.empty().append($(TPL));
this.contentSized();
this.$container = this.$body.find(".note-map-container");
this.$container.append(this.noteMapWidget.render());
this.openState = "small";
this.$openFullButton = this.$body.find(".open-full-button");
this.$openFullButton.on("click", () => {
this.setFullHeight();
this.$openFullButton.hide();
this.$collapseButton.show();
this.openState = "full";
this.noteMapWidget.setDimensions();
});
this.$collapseButton = this.$body.find(".collapse-button");
this.$collapseButton.on("click", () => {
this.setSmallSize();
this.$openFullButton.show();
this.$collapseButton.hide();
this.openState = "small";
this.noteMapWidget.setDimensions();
});
const handleResize = () => {
if (!this.noteMapWidget.graph) {
// no graph has been even rendered
return;
}
if (this.openState === "full") {
this.setFullHeight();
} else if (this.openState === "small") {
this.setSmallSize();
}
};
new ResizeObserver(handleResize).observe(this.$body[0]);
}
setSmallSize() {
const SMALL_SIZE_HEIGHT = 300;
const width = this.$body.width() ?? 0;
this.$body.find(".note-map-container").height(SMALL_SIZE_HEIGHT).width(width);
}
setFullHeight() {
const { top } = this.$body[0].getBoundingClientRect();
const height = ($(window).height() ?? 0) - top;
const width = (this.$body.width() ?? 0);
this.$body.find(".note-map-container")
.height(height)
.width(width);
}
}