mirror of
https://github.com/zadam/trilium.git
synced 2025-11-06 05:15:59 +01:00
use relations to pick note to render, fixes #141
This commit is contained in:
@@ -1,73 +1,38 @@
|
||||
import bundleService from "./bundle.js";
|
||||
import server from "./server.js";
|
||||
import noteDetailService from "./note_detail.js";
|
||||
import noteDetailCodeService from "./note_detail_code.js";
|
||||
|
||||
const $noteDetailCode = $('#note-detail-code');
|
||||
const $noteDetailRender = $('#note-detail-render');
|
||||
const $toggleEditButton = $('#toggle-edit-button');
|
||||
const $noteDetailRenderHelp = $('#note-detail-render-help');
|
||||
const $noteDetailRenderContent = $('#note-detail-render-content');
|
||||
const $renderButton = $('#render-button');
|
||||
|
||||
let codeEditorInitialized;
|
||||
async function render() {
|
||||
const attributes = await noteDetailService.getAttributes();
|
||||
const renderNotes = attributes.filter(attr =>
|
||||
attr.type === 'relation'
|
||||
&& attr.name === 'renderNote'
|
||||
&& !!attr.value);
|
||||
|
||||
async function show() {
|
||||
codeEditorInitialized = false;
|
||||
$noteDetailRender.show();
|
||||
|
||||
$noteDetailRender.empty().show();
|
||||
$noteDetailRenderContent.empty();
|
||||
$noteDetailRenderContent.toggle(renderNotes.length > 0);
|
||||
$noteDetailRenderHelp.toggle(renderNotes.length === 0);
|
||||
|
||||
await render();
|
||||
}
|
||||
for (const renderNote of renderNotes) {
|
||||
const bundle = await server.get('script/bundle/' + renderNote.value);
|
||||
|
||||
async function toggleEdit() {
|
||||
if ($noteDetailCode.is(":visible")) {
|
||||
$noteDetailCode.hide();
|
||||
}
|
||||
else {
|
||||
if (!codeEditorInitialized) {
|
||||
await noteDetailCodeService.show();
|
||||
$noteDetailRenderContent.append(bundle.html);
|
||||
|
||||
// because we can't properly scroll only the editor without scrolling the rendering
|
||||
// we limit its height
|
||||
$noteDetailCode.find('.CodeMirror').css('height', '300');
|
||||
|
||||
codeEditorInitialized = true;
|
||||
}
|
||||
else {
|
||||
$noteDetailCode.show();
|
||||
}
|
||||
await bundleService.executeBundle(bundle);
|
||||
}
|
||||
}
|
||||
|
||||
$toggleEditButton.click(toggleEdit);
|
||||
|
||||
$renderButton.click(render);
|
||||
|
||||
async function render() {
|
||||
// ctrl+enter is also used elsewhere so make sure we're running only when appropriate
|
||||
if (noteDetailService.getCurrentNoteType() !== 'render') {
|
||||
return;
|
||||
}
|
||||
|
||||
if (codeEditorInitialized) {
|
||||
await noteDetailService.saveNoteIfChanged();
|
||||
}
|
||||
|
||||
const bundle = await server.get('script/bundle/' + noteDetailService.getCurrentNoteId());
|
||||
|
||||
$noteDetailRender.html(bundle.html);
|
||||
|
||||
// if the note is empty, it doesn't make sense to do render-only since nothing will be rendered
|
||||
if (!bundle.html.trim()) {
|
||||
toggleEdit();
|
||||
}
|
||||
|
||||
await bundleService.executeBundle(bundle);
|
||||
}
|
||||
|
||||
$(document).bind('keydown', "ctrl+return", render);
|
||||
|
||||
export default {
|
||||
show,
|
||||
getContent: noteDetailCodeService.getContent,
|
||||
show: render,
|
||||
getContent: () => "",
|
||||
focus: () => null
|
||||
}
|
||||
Reference in New Issue
Block a user