117 lines
3.3 KiB
JavaScript
Raw Normal View History

2021-05-28 23:19:11 +02:00
import NoteContextAwareWidget from "../note_context_aware_widget.js";
import froca from "../../services/froca.js";
const TPL = `
<div class="link-map-widget">
2021-05-28 23:52:42 +02:00
<style>
.link-map-widget {
position: relative;
}
.link-map-container {
2021-05-30 23:21:34 +02:00
height: 300px;
}
2021-05-28 23:52:42 +02:00
2021-05-31 21:20:30 +02:00
.open-full-button, .collapse-button {
2021-05-28 23:52:42 +02:00
position: absolute;
2021-05-31 21:20:30 +02:00
right: 5px;
bottom: 5px;
font-size: 180%;
2021-05-28 23:52:42 +02:00
z-index: 1000;
}
</style>
2021-05-31 21:20:30 +02:00
<button class="bx bx-arrow-to-bottom icon-action open-full-button" title="Open full"></button>
<button class="bx bx-arrow-to-top icon-action collapse-button" style="display: none;" title="Collapse to normal size"></button>
2021-05-28 23:52:42 +02:00
2021-05-30 23:21:34 +02:00
<div class="link-map-container"></div>
2021-05-28 23:19:11 +02:00
</div>`;
export default class LinkMapWidget extends NoteContextAwareWidget {
isEnabled() {
return this.note;
}
getTitle() {
return {
show: this.isEnabled(),
title: 'Link Map',
icon: 'bx bx-network-chart'
};
}
doRender() {
this.$widget = $(TPL);
2021-05-31 21:20:30 +02:00
this.$openFullButton = this.$widget.find('.open-full-button');
this.$openFullButton.on('click', () => {
const {top} = this.$widget[0].getBoundingClientRect();
const maxHeight = $(window).height() - top;
this.$widget.find('.link-map-container').css("height", maxHeight);
this.linkMapService.setHeight(maxHeight);
this.$openFullButton.hide();
this.$collapseButton.show();
});
this.$collapseButton = this.$widget.find('.collapse-button');
this.$collapseButton.on('click', () => {
this.$widget.find('.link-map-container,.force-graph-container,canvas').css("height", 300);
this.linkMapService.setHeight(300);
this.$openFullButton.show();
this.$collapseButton.hide();
});
2021-05-28 23:19:11 +02:00
this.overflowing();
}
async refreshWithNote(note) {
2021-05-28 23:52:42 +02:00
this.$widget.find(".link-map-container").empty();
2021-05-28 23:19:11 +02:00
const $linkMapContainer = this.$widget.find('.link-map-container');
const LinkMapServiceClass = (await import('../../services/link_map.js')).default;
this.linkMapService = new LinkMapServiceClass(note, $linkMapContainer, {
maxDepth: 3,
2021-05-30 23:21:34 +02:00
zoom: 0.6,
width: $linkMapContainer.width(),
height: $linkMapContainer.height()
2021-05-28 23:19:11 +02:00
});
await this.linkMapService.render();
}
cleanup() {
if (this.linkMapService) {
this.linkMapService.cleanup();
}
}
entitiesReloadedEvent({loadResults}) {
if (loadResults.getAttributes().find(attr => attr.type === 'relation' && (attr.noteId === this.noteId || attr.value === this.noteId))) {
this.noteSwitched();
}
const changedNoteIds = loadResults.getNoteIds();
if (changedNoteIds.length > 0) {
const $linkMapContainer = this.$widget.find('.link-map-container');
for (const noteId of changedNoteIds) {
const note = froca.notes[noteId];
if (note) {
$linkMapContainer.find(`a[data-note-path="${noteId}"]`).text(note.title);
}
}
}
}
}