trilium/src/public/javascripts/services/note_detail_render.js

73 lines
1.9 KiB
JavaScript
Raw Normal View History

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 $renderButton = $('#render-button');
let codeEditorInitialized;
2018-03-28 09:46:38 +08:00
async function show() {
codeEditorInitialized = false;
2018-08-22 20:40:49 +08:00
$noteDetailRender.empty().show();
await render();
}
2018-05-27 07:58:08 +08:00
async function toggleEdit() {
if ($noteDetailCode.is(":visible")) {
$noteDetailCode.hide();
}
else {
if (!codeEditorInitialized) {
2018-05-27 07:58:08 +08:00
await noteDetailCodeService.show();
// 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();
}
}
2018-05-27 07:58:08 +08:00
}
$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 {
2018-03-28 09:46:38 +08:00
show,
getContent: noteDetailCodeService.getContent,
focus: () => null
}