use relations to pick note to render, fixes #141

This commit is contained in:
azivner
2018-08-28 20:55:21 +02:00
parent 9cfa2ab1ba
commit 7ae2a24770
6 changed files with 61 additions and 70 deletions

View File

@@ -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
}