trilium/src/public/app/widgets/containers/scrolling_container.js

55 lines
1.5 KiB
JavaScript

import Container from "./container.js";
export default class ScrollingContainer extends Container {
constructor() {
super();
this.class("scrolling-container");
this.css('overflow', 'auto');
this.css('scroll-behavior', 'smooth');
this.css('position', 'relative');
}
setNoteContextEvent({noteContext}) {
/** @var {NoteContext} */
this.noteContext = noteContext;
}
async noteSwitchedEvent({noteContext, notePath}) {
this.$widget.scrollTop(0);
}
async noteSwitchedAndActivatedEvent({noteContext, notePath}) {
this.noteContext = noteContext;
this.$widget.scrollTop(0);
}
async activeContextChangedEvent({noteContext}) {
this.noteContext = noteContext;
}
handleEventInChildren(name, data) {
if (name === 'readOnlyTemporarilyDisabled'
&& this.noteContext
&& this.noteContext.ntxId === data.noteContext.ntxId) {
const scrollTop = this.$widget.scrollTop();
const promise = super.handleEventInChildren(name, data);
// there seems to be some asynchronicity, and we need to wait a bit before scrolling
promise.then(() => setTimeout(() => this.$widget.scrollTop(scrollTop), 500));
return promise;
}
else {
return super.handleEventInChildren(name, data);
}
}
scrollContainerToCommand({position}) {
this.$widget.scrollTop(position);
}
}