import server from "../services/server.js"; import treeCache from "../services/tree_cache.js"; import treeService from "../services/tree.js"; import linkService from "../services/link.js"; import BasicWidget from "./basic_widget.js"; const TPL = `
`; const DISPLAYED_NOTES = 10; export default class AttributeDetailWidget extends BasicWidget { doRender() { this.$widget = $(TPL); this.$relatedNotesTitle = this.$widget.find('.related-notes-tile'); this.$relatedNotesList = this.$widget.find('.related-notes-list'); this.$relatedNotesMoreNotes = this.$widget.find('.related-notes-more-notes'); this.$attrEditName = this.$widget.find('.attr-edit-name'); this.$attrEditValue = this.$widget.find('.attr-edit-value'); this.$attrEditInheritable = this.$widget.find('.attr-edit-inheritable'); this.$closeAttrDetailButton = this.$widget.find('.close-attr-detail-button'); this.$closeAttrDetailButton.on('click', () => this.hide()); $(window).on('mouseup', e => { console.log("click", e.target); if (!$(e.target).closest(this.$widget[0]).length) { this.hide(); } }); } async showAttributeDetail(attr, x, y) { if (!attr) { this.hide(); return; } this.toggleInt(true); let {results, count} = await server.post('search-related', attr); for (const res of results) { res.noteId = res.notePathArray[res.notePathArray.length - 1]; } results = results.filter(({noteId}) => noteId !== this.noteId); if (results.length === 0) { this.$relatedNotesTitle.hide(); } else { this.$relatedNotesTitle.text(`Other notes with ${attr.type} name "${attr.name}"`); } this.$relatedNotesList.empty(); const displayedResults = results.length <= DISPLAYED_NOTES ? results : results.slice(0, DISPLAYED_NOTES); const displayedNotes = await treeCache.getNotes(displayedResults.map(res => res.noteId)); for (const note of displayedNotes) { const notePath = treeService.getSomeNotePath(note); const $noteLink = await linkService.createNoteLink(notePath, {showNotePath: true}); this.$relatedNotesList.append( $("