mirror of
https://github.com/zadam/trilium.git
synced 2025-02-27 08:37:35 +08:00
sync fix to prefix and some usability improvements
This commit is contained in:
parent
37a105db4d
commit
8b5988e13c
8 changed files with 40 additions and 24 deletions
|
@ -6,10 +6,10 @@ const editTreePrefix = (function() {
|
|||
const treePrefixInputEl = $("#tree-prefix-input");
|
||||
const noteTitleEl = $('#tree-prefix-note-title');
|
||||
|
||||
function showDialog() {
|
||||
async function showDialog() {
|
||||
glob.activeDialog = dialogEl;
|
||||
|
||||
dialogEl.dialog({
|
||||
await dialogEl.dialog({
|
||||
modal: true,
|
||||
width: 800
|
||||
});
|
||||
|
@ -36,6 +36,8 @@ const editTreePrefix = (function() {
|
|||
prefix: prefix
|
||||
}),
|
||||
success: () => {
|
||||
currentNode.data.prefix = prefix;
|
||||
|
||||
const noteTitle = noteTree.getNoteTitle(currentNode.data.note_id);
|
||||
|
||||
const title = (prefix ? (prefix + " - ") : "") + noteTitle;
|
||||
|
|
|
@ -346,6 +346,9 @@ const noteTree = (function() {
|
|||
if (toNode !== null) {
|
||||
treeChanges.moveToNode(node, toNode);
|
||||
}
|
||||
},
|
||||
"f2": node => {
|
||||
editTreePrefix.showDialog();
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ const auth = require('../../services/auth');
|
|||
const sql = require('../../services/sql');
|
||||
const utils = require('../../services/utils');
|
||||
const notes = require('../../services/notes');
|
||||
const log = require('../../services/log');
|
||||
const protected_session = require('../../services/protected_session');
|
||||
const data_encryption = require('../../services/data_encryption');
|
||||
const RequestContext = require('../../services/request_context');
|
||||
|
@ -15,6 +16,12 @@ router.get('/:noteId', auth.checkApiAuth, async (req, res, next) => {
|
|||
|
||||
const detail = await sql.getSingleResult("SELECT * FROM notes WHERE note_id = ?", [noteId]);
|
||||
|
||||
if (!detail) {
|
||||
log.info("Note " + noteId + " has not been found.");
|
||||
|
||||
return res.status(404).send({});
|
||||
}
|
||||
|
||||
if (detail.is_protected) {
|
||||
const dataKey = protected_session.getDataKey(req);
|
||||
|
||||
|
|
|
@ -50,10 +50,10 @@ router.put('/:noteId/protectSubTree/:isProtected', auth.checkApiAuth, async (req
|
|||
|
||||
router.put('/:noteTreeId/setPrefix', auth.checkApiAuth, async (req, res, next) => {
|
||||
const noteTreeId = req.params.noteTreeId;
|
||||
const prefix = req.body.prefix;
|
||||
const prefix = utils.isEmptyOrWhitespace(req.body.prefix) ? null : req.body.prefix;
|
||||
|
||||
await sql.doInTransaction(async () => {
|
||||
await sql.execute("UPDATE notes_tree SET prefix = ? WHERE note_tree_id = ?", [prefix, noteTreeId]);
|
||||
await sql.execute("UPDATE notes_tree SET prefix = ?, date_modified = ? WHERE note_tree_id = ?", [prefix, utils.nowTimestamp(), noteTreeId]);
|
||||
|
||||
await sync_table.addNoteTreeSync(noteTreeId);
|
||||
});
|
||||
|
|
|
@ -17,7 +17,7 @@ async function getContentHash() {
|
|||
"is_deleted FROM notes ORDER BY note_id"));
|
||||
|
||||
hash = updateHash(hash, await sql.getResults("SELECT note_tree_id, note_id, note_pid, note_pos, date_modified, " +
|
||||
"is_deleted FROM notes_tree ORDER BY note_tree_id"));
|
||||
"is_deleted, prefix FROM notes_tree ORDER BY note_tree_id"));
|
||||
|
||||
hash = updateHash(hash, await sql.getResults("SELECT note_history_id, note_id, note_title, note_text, " +
|
||||
"date_modified_from, date_modified_to FROM notes_history ORDER BY note_history_id"));
|
||||
|
|
|
@ -11,24 +11,24 @@ async function createNewNote(parentNoteId, note) {
|
|||
|
||||
let newNotePos = 0;
|
||||
|
||||
if (note.target === 'into') {
|
||||
const maxNotePos = await sql.getSingleValue('SELECT MAX(note_pos) FROM notes_tree WHERE note_pid = ? AND is_deleted = 0', [parentNoteId]);
|
||||
|
||||
newNotePos = maxNotePos === null ? 0 : maxNotePos + 1;
|
||||
}
|
||||
else if (note.target === 'after') {
|
||||
const afterNote = await sql.getSingleResult('SELECT note_pos FROM notes_tree WHERE note_tree_id = ?', [note.target_note_tree_id]);
|
||||
|
||||
newNotePos = afterNote.note_pos + 1;
|
||||
|
||||
await sql.execute('UPDATE notes_tree SET note_pos = note_pos + 1, date_modified = ? WHERE note_pid = ? AND note_pos > ? AND is_deleted = 0',
|
||||
[utils.nowTimestamp(), parentNoteId, afterNote.note_pos]);
|
||||
}
|
||||
else {
|
||||
throw new Error('Unknown target: ' + note.target);
|
||||
}
|
||||
|
||||
await sql.doInTransaction(async () => {
|
||||
if (note.target === 'into') {
|
||||
const maxNotePos = await sql.getSingleValue('SELECT MAX(note_pos) FROM notes_tree WHERE note_pid = ? AND is_deleted = 0', [parentNoteId]);
|
||||
|
||||
newNotePos = maxNotePos === null ? 0 : maxNotePos + 1;
|
||||
}
|
||||
else if (note.target === 'after') {
|
||||
const afterNote = await sql.getSingleResult('SELECT note_pos FROM notes_tree WHERE note_tree_id = ?', [note.target_note_tree_id]);
|
||||
|
||||
newNotePos = afterNote.note_pos + 1;
|
||||
|
||||
await sql.execute('UPDATE notes_tree SET note_pos = note_pos + 1, date_modified = ? WHERE note_pid = ? AND note_pos > ? AND is_deleted = 0',
|
||||
[utils.nowTimestamp(), parentNoteId, afterNote.note_pos]);
|
||||
}
|
||||
else {
|
||||
throw new Error('Unknown target: ' + note.target);
|
||||
}
|
||||
|
||||
await sync_table.addNoteTreeSync(noteTreeId);
|
||||
await sync_table.addNoteSync(noteId);
|
||||
|
||||
|
|
|
@ -66,6 +66,10 @@ function hash(text) {
|
|||
return crypto.createHash('sha1').update(text).digest('base64');
|
||||
}
|
||||
|
||||
function isEmptyOrWhitespace(str) {
|
||||
return str === null || str.match(/^ *$/) !== null;
|
||||
}
|
||||
|
||||
|
||||
module.exports = {
|
||||
randomSecureToken,
|
||||
|
@ -79,5 +83,6 @@ module.exports = {
|
|||
hmac,
|
||||
isElectron,
|
||||
formatTwoTimestamps,
|
||||
hash
|
||||
hash,
|
||||
isEmptyOrWhitespace
|
||||
};
|
|
@ -326,7 +326,6 @@
|
|||
<script src="javascripts/dialogs/edit_tree_prefix.js"></script>
|
||||
|
||||
<script src="javascripts/link.js"></script>
|
||||
<script src="javascripts/status.js"></script>
|
||||
<script src="javascripts/sync.js"></script>
|
||||
<script src="javascripts/utils.js"></script>
|
||||
</body>
|
||||
|
|
Loading…
Reference in a new issue