mirror of
https://github.com/zadam/trilium.git
synced 2025-03-01 14:22:32 +01:00
add prefix "_" to "named" IDs
This commit is contained in:
parent
1b24276a4a
commit
724f99f17c
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
UPDATE etapi_tokens SET tokenHash = 'API token hash value';
|
UPDATE etapi_tokens SET tokenHash = 'API token hash value';
|
||||||
UPDATE notes SET title = 'title' WHERE title NOT IN ('root', 'hidden', 'share');
|
UPDATE notes SET title = 'title' WHERE title NOT IN ('root', '_hidden', '_share');
|
||||||
UPDATE note_contents SET content = 'text' WHERE content IS NOT NULL;
|
UPDATE note_contents SET content = 'text' WHERE content IS NOT NULL;
|
||||||
UPDATE note_revisions SET title = 'title';
|
UPDATE note_revisions SET title = 'title';
|
||||||
UPDATE note_revision_contents SET content = 'text' WHERE content IS NOT NULL;
|
UPDATE note_revision_contents SET content = 'text' WHERE content IS NOT NULL;
|
||||||
|
49
db/migrations/0199__rename_ids.sql
Normal file
49
db/migrations/0199__rename_ids.sql
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
UPDATE notes SET noteId = '_globalNoteMap' WHERE noteId = 'globalnotemap';
|
||||||
|
UPDATE note_contents SET noteId = '_globalNoteMap' WHERE noteId = 'globalnotemap';
|
||||||
|
UPDATE note_revisions SET noteId = '_globalNoteMap' WHERE noteId = 'globalnotemap';
|
||||||
|
UPDATE branches SET branchId = '_globalNoteMap' WHERE branchId = 'globalnotemap';
|
||||||
|
UPDATE branches SET noteId = '_globalNoteMap' WHERE noteId = 'globalnotemap';
|
||||||
|
UPDATE branches SET parentNoteId = '_globalNoteMap' WHERE parentNoteId = 'globalnotemap';
|
||||||
|
UPDATE attributes SET noteId = '_globalNoteMap' WHERE noteId = 'globalnotemap';
|
||||||
|
UPDATE attributes SET value = '_globalNoteMap' WHERE type = 'relation' AND value = 'globalnotemap';
|
||||||
|
UPDATE entity_changes SET entityId = '_globalNoteMap' WHERE entityId = 'globalnotemap';
|
||||||
|
|
||||||
|
UPDATE notes SET noteId = '_bulkAction' WHERE noteId = 'bulkaction';
|
||||||
|
UPDATE note_contents SET noteId = '_bulkAction' WHERE noteId = 'bulkaction';
|
||||||
|
UPDATE note_revisions SET noteId = '_bulkAction' WHERE noteId = 'bulkaction';
|
||||||
|
UPDATE branches SET branchId = '_bulkAction' WHERE branchId = 'bulkaction';
|
||||||
|
UPDATE branches SET parentNoteId = '_bulkAction' WHERE parentNoteId = 'bulkaction';
|
||||||
|
UPDATE branches SET noteId = '_bulkAction' WHERE noteId = 'bulkaction';
|
||||||
|
UPDATE attributes SET noteId = '_bulkAction' WHERE noteId = 'bulkaction';
|
||||||
|
UPDATE attributes SET value = '_bulkAction' WHERE type = 'relation' AND value = 'bulkaction';
|
||||||
|
UPDATE entity_changes SET entityId = '_bulkAction' WHERE entityId = 'bulkaction';
|
||||||
|
|
||||||
|
UPDATE notes SET noteId = '_sqlConsole' WHERE noteId = 'sqlconsole';
|
||||||
|
UPDATE note_contents SET noteId = '_sqlConsole' WHERE noteId = 'sqlconsole';
|
||||||
|
UPDATE note_revisions SET noteId = '_sqlConsole' WHERE noteId = 'sqlconsole';
|
||||||
|
UPDATE branches SET noteId = '_sqlConsole' WHERE noteId = 'sqlconsole';
|
||||||
|
UPDATE branches SET branchId = '_sqlConsole' WHERE branchId = 'sqlconsole';
|
||||||
|
UPDATE branches SET parentNoteId = '_sqlConsole' WHERE parentNoteId = 'sqlconsole';
|
||||||
|
UPDATE attributes SET noteId = '_sqlConsole' WHERE noteId = 'sqlconsole';
|
||||||
|
UPDATE attributes SET value = '_sqlConsole' WHERE type = 'relation' AND value = 'sqlconsole';
|
||||||
|
UPDATE entity_changes SET entityId = '_sqlConsole' WHERE entityId = 'sqlconsole';
|
||||||
|
|
||||||
|
UPDATE notes SET noteId = '_hidden' WHERE noteId = 'hidden';
|
||||||
|
UPDATE note_contents SET noteId = '_hidden' WHERE noteId = 'hidden';
|
||||||
|
UPDATE note_revisions SET noteId = '_hidden' WHERE noteId = 'hidden';
|
||||||
|
UPDATE branches SET noteId = '_hidden' WHERE noteId = 'hidden';
|
||||||
|
UPDATE branches SET branchId = '_hidden' WHERE branchId = 'hidden';
|
||||||
|
UPDATE branches SET parentNoteId = '_hidden' WHERE parentNoteId = 'hidden';
|
||||||
|
UPDATE attributes SET noteId = '_hidden' WHERE noteId = 'hidden';
|
||||||
|
UPDATE attributes SET value = '_hidden' WHERE type = 'relation' AND value = 'hidden';
|
||||||
|
UPDATE entity_changes SET entityId = '_hidden' WHERE entityId = 'hidden';
|
||||||
|
|
||||||
|
UPDATE notes SET noteId = '_search' WHERE noteId = 'search';
|
||||||
|
UPDATE note_contents SET noteId = '_search' WHERE noteId = 'search';
|
||||||
|
UPDATE note_revisions SET noteId = '_search' WHERE noteId = 'search';
|
||||||
|
UPDATE branches SET noteId = '_search' WHERE noteId = 'search';
|
||||||
|
UPDATE branches SET branchId = '_search' WHERE branchId = 'search';
|
||||||
|
UPDATE branches SET parentNoteId = '_search' WHERE parentNoteId = 'search';
|
||||||
|
UPDATE attributes SET noteId = '_search' WHERE noteId = 'search';
|
||||||
|
UPDATE attributes SET value = '_search' WHERE type = 'relation' AND value = 'search';
|
||||||
|
UPDATE entity_changes SET entityId = '_search' WHERE entityId = 'search';
|
@ -1,35 +0,0 @@
|
|||||||
UPDATE notes SET noteId = 'globalNoteMap' WHERE noteId = 'globalnotemap';
|
|
||||||
UPDATE notes SET noteId = 'bulkAction' WHERE noteId = 'bulkaction';
|
|
||||||
UPDATE notes SET noteId = 'sqlConsole' WHERE noteId = 'sqlconsole';
|
|
||||||
|
|
||||||
UPDATE note_contents SET noteId = 'globalNoteMap' WHERE noteId = 'globalnotemap';
|
|
||||||
UPDATE note_contents SET noteId = 'bulkAction' WHERE noteId = 'bulkaction';
|
|
||||||
UPDATE note_contents SET noteId = 'sqlConsole' WHERE noteId = 'sqlconsole';
|
|
||||||
|
|
||||||
UPDATE note_revisions SET noteId = 'globalNoteMap' WHERE noteId = 'globalnotemap';
|
|
||||||
UPDATE note_revisions SET noteId = 'bulkAction' WHERE noteId = 'bulkaction';
|
|
||||||
UPDATE note_revisions SET noteId = 'sqlConsole' WHERE noteId = 'sqlconsole';
|
|
||||||
|
|
||||||
UPDATE branches SET branchId = 'globalNoteMap' WHERE branchId = 'globalnotemap';
|
|
||||||
UPDATE branches SET branchId = 'bulkAction' WHERE branchId = 'bulkaction';
|
|
||||||
UPDATE branches SET branchId = 'sqlConsole' WHERE branchId = 'sqlconsole';
|
|
||||||
|
|
||||||
UPDATE branches SET noteId = 'globalNoteMap' WHERE noteId = 'globalnotemap';
|
|
||||||
UPDATE branches SET noteId = 'bulkAction' WHERE noteId = 'bulkaction';
|
|
||||||
UPDATE branches SET noteId = 'sqlConsole' WHERE noteId = 'sqlconsole';
|
|
||||||
|
|
||||||
UPDATE branches SET parentNoteId = 'globalNoteMap' WHERE parentNoteId = 'globalnotemap';
|
|
||||||
UPDATE branches SET parentNoteId = 'bulkAction' WHERE parentNoteId = 'bulkaction';
|
|
||||||
UPDATE branches SET parentNoteId = 'sqlConsole' WHERE parentNoteId = 'sqlconsole';
|
|
||||||
|
|
||||||
UPDATE attributes SET noteId = 'globalNoteMap' WHERE noteId = 'globalnotemap';
|
|
||||||
UPDATE attributes SET noteId = 'bulkAction' WHERE noteId = 'bulkaction';
|
|
||||||
UPDATE attributes SET noteId = 'sqlConsole' WHERE noteId = 'sqlconsole';
|
|
||||||
|
|
||||||
UPDATE attributes SET value = 'globalNoteMap' WHERE type = 'relation' AND value = 'globalnotemap';
|
|
||||||
UPDATE attributes SET value = 'bulkAction' WHERE type = 'relation' AND value = 'bulkaction';
|
|
||||||
UPDATE attributes SET value = 'sqlConsole' WHERE type = 'relation' AND value = 'sqlconsole';
|
|
||||||
|
|
||||||
UPDATE entity_changes SET entityId = 'globalNoteMap' WHERE entityId = 'globalnotemap';
|
|
||||||
UPDATE entity_changes SET entityId = 'bulkAction' WHERE entityId = 'bulkaction';
|
|
||||||
UPDATE entity_changes SET entityId = 'sqlConsole' WHERE entityId = 'sqlconsole';
|
|
@ -1 +1 @@
|
|||||||
UPDATE branches SET parentNoteId = 'hidden' WHERE branchId = 'share';
|
UPDATE branches SET parentNoteId = '_hidden' WHERE branchId = '_share';
|
||||||
|
@ -1 +1,2 @@
|
|||||||
UPDATE branches SET parentNoteId = 'hidden' WHERE noteId = 'globalNoteMap';
|
DELETE FROM branches WHERE noteId = '_globalNoteMap' AND parentNoteId != 'singles'; -- make sure there are no clones which would fail at the next line
|
||||||
|
UPDATE branches SET parentNoteId = '_hidden' WHERE noteId = '_globalNoteMap';
|
||||||
|
@ -10,7 +10,7 @@ module.exports = () => {
|
|||||||
|
|
||||||
// deleting just branches because they might be cloned (and therefore saved) also outside of the hidden subtree
|
// deleting just branches because they might be cloned (and therefore saved) also outside of the hidden subtree
|
||||||
|
|
||||||
const searchRoot = becca.getNote('search');
|
const searchRoot = becca.getNote('_search');
|
||||||
|
|
||||||
for (const searchBranch of searchRoot.getChildBranches()) {
|
for (const searchBranch of searchRoot.getChildBranches()) {
|
||||||
const searchNote = searchBranch.getNote();
|
const searchNote = searchBranch.getNote();
|
||||||
@ -20,7 +20,7 @@ module.exports = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const sqlConsoleRoot = becca.getNote('sqlConsole');
|
const sqlConsoleRoot = becca.getNote('_sqlConsole');
|
||||||
|
|
||||||
for (const sqlConsoleBranch of sqlConsoleRoot.getChildBranches()) {
|
for (const sqlConsoleBranch of sqlConsoleRoot.getChildBranches()) {
|
||||||
const sqlConsoleNote = sqlConsoleBranch.getNote();
|
const sqlConsoleNote = sqlConsoleBranch.getNote();
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
UPDATE notes SET title = 'SQL Console History' WHERE noteId = 'sqlConsole';
|
UPDATE notes SET title = 'SQL Console History' WHERE noteId = '_sqlConsole';
|
||||||
UPDATE notes SET title = 'Search History' WHERE noteId = 'search';
|
UPDATE notes SET title = 'Search History' WHERE noteId = '_search';
|
@ -6,7 +6,7 @@ module.exports = () => {
|
|||||||
cls.init(() => {
|
cls.init(() => {
|
||||||
beccaLoader.load();
|
beccaLoader.load();
|
||||||
|
|
||||||
for (const label of becca.getNote('hidden').getLabels('archived')) {
|
for (const label of becca.getNote('_hidden').getLabels('archived')) {
|
||||||
label.markAsDeleted('0208__remove_archived_from_hidden');
|
label.markAsDeleted('0208__remove_archived_from_hidden');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
1
package-lock.json
generated
1
package-lock.json
generated
@ -5,7 +5,6 @@
|
|||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "trilium",
|
|
||||||
"version": "0.57.5",
|
"version": "0.57.5",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "AGPL-3.0-only",
|
"license": "AGPL-3.0-only",
|
||||||
|
@ -129,7 +129,7 @@ class Branch extends AbstractEntity {
|
|||||||
* @returns {boolean}
|
* @returns {boolean}
|
||||||
*/
|
*/
|
||||||
get isWeak() {
|
get isWeak() {
|
||||||
return ['share', 'lbBookmarks'].includes(this.parentNoteId);
|
return ['_share', 'lbBookmarks'].includes(this.parentNoteId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -211,7 +211,7 @@ class Branch extends AbstractEntity {
|
|||||||
let maxNotePos = 0;
|
let maxNotePos = 0;
|
||||||
|
|
||||||
for (const childBranch of this.parentNote.getChildBranches()) {
|
for (const childBranch of this.parentNote.getChildBranches()) {
|
||||||
if (maxNotePos < childBranch.notePosition && childBranch.branchId !== 'hidden') {
|
if (maxNotePos < childBranch.notePosition && childBranch.branchId !== '_hidden') {
|
||||||
maxNotePos = childBranch.notePosition;
|
maxNotePos = childBranch.notePosition;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -904,7 +904,7 @@ class Note extends AbstractEntity {
|
|||||||
|
|
||||||
function addSubtreeNotesInner(note, parentNote = null) {
|
function addSubtreeNotesInner(note, parentNote = null) {
|
||||||
// share can be removed after 0.57 since it will be put under hidden
|
// share can be removed after 0.57 since it will be put under hidden
|
||||||
if (note.noteId === 'hidden' || note.noteId === 'share') {
|
if (note.noteId === '_hidden' || note.noteId === '_share') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1342,7 +1342,7 @@ class Note extends AbstractEntity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
isLaunchBarConfig() {
|
isLaunchBarConfig() {
|
||||||
return this.type === 'launcher' || ['lbRoot', 'lbAvailableLaunchers', 'lbVisibleLaunchers'].includes(this.noteId);
|
return this.type === 'launcher' || ['_lbRoot', '_lbAvailableLaunchers', '_lbVisibleLaunchers'].includes(this.noteId);
|
||||||
}
|
}
|
||||||
|
|
||||||
isOptions() {
|
isOptions() {
|
||||||
|
@ -95,7 +95,7 @@ export default class Entrypoints extends Component {
|
|||||||
|
|
||||||
logoutCommand() {
|
logoutCommand() {
|
||||||
const $logoutForm = $('<form action="logout" method="POST">')
|
const $logoutForm = $('<form action="logout" method="POST">')
|
||||||
.append($(`<input type="hidden" name="_csrf" value="${glob.csrfToken}"/>`));
|
.append($(`<input type='_hidden' name="_csrf" value="${glob.csrfToken}"/>`));
|
||||||
|
|
||||||
$("body").append($logoutForm);
|
$("body").append($logoutForm);
|
||||||
$logoutForm.trigger('submit');
|
$logoutForm.trigger('submit');
|
||||||
|
@ -64,15 +64,15 @@ class NoteContext extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.hoistedNoteId === 'root'
|
if (this.hoistedNoteId === 'root'
|
||||||
&& this.notePath.startsWith("root/hidden")
|
&& this.notePath.startsWith("root/_hidden")
|
||||||
&& !this.note.hasLabel("keepCurrentHoisting")
|
&& !this.note.hasLabel("keepCurrentHoisting")
|
||||||
) {
|
) {
|
||||||
// hidden subtree displays only when hoisted so it doesn't make sense to keep root as hoisted note
|
// hidden subtree displays only when hoisted so it doesn't make sense to keep root as hoisted note
|
||||||
|
|
||||||
let hoistedNoteId = 'hidden';
|
let hoistedNoteId = '_hidden';
|
||||||
|
|
||||||
if (this.note.isLaunchBarConfig()) {
|
if (this.note.isLaunchBarConfig()) {
|
||||||
hoistedNoteId = 'lbRoot';
|
hoistedNoteId = '_lbRoot';
|
||||||
} else if (this.note.isOptions()) {
|
} else if (this.note.isOptions()) {
|
||||||
hoistedNoteId = 'options';
|
hoistedNoteId = 'options';
|
||||||
}
|
}
|
||||||
|
@ -73,19 +73,19 @@ export default class RootCommandExecutor extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async showBackendLogCommand() {
|
async showBackendLogCommand() {
|
||||||
await appContext.tabManager.openContextWithNote('backendLog', true);
|
await appContext.tabManager.openContextWithNote('_backendLog', true);
|
||||||
}
|
}
|
||||||
|
|
||||||
async showLaunchBarSubtreeCommand() {
|
async showLaunchBarSubtreeCommand() {
|
||||||
await this.showAndHoistSubtree('lbRoot');
|
await this.showAndHoistSubtree('_lbRoot');
|
||||||
}
|
}
|
||||||
|
|
||||||
async showShareSubtreeCommand() {
|
async showShareSubtreeCommand() {
|
||||||
await this.showAndHoistSubtree('share');
|
await this.showAndHoistSubtree('_share');
|
||||||
}
|
}
|
||||||
|
|
||||||
async showHiddenSubtreeCommand() {
|
async showHiddenSubtreeCommand() {
|
||||||
await this.showAndHoistSubtree('hidden');
|
await this.showAndHoistSubtree('_hidden');
|
||||||
}
|
}
|
||||||
|
|
||||||
async showOptionsCommand() {
|
async showOptionsCommand() {
|
||||||
@ -93,11 +93,11 @@ export default class RootCommandExecutor extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async showSQLConsoleHistoryCommand() {
|
async showSQLConsoleHistoryCommand() {
|
||||||
await this.showAndHoistSubtree('sqlConsole');
|
await this.showAndHoistSubtree('_sqlConsole');
|
||||||
}
|
}
|
||||||
|
|
||||||
async showSearchHistoryCommand() {
|
async showSearchHistoryCommand() {
|
||||||
await this.showAndHoistSubtree('search');
|
await this.showAndHoistSubtree('_search');
|
||||||
}
|
}
|
||||||
|
|
||||||
async showAndHoistSubtree(subtreeNoteId) {
|
async showAndHoistSubtree(subtreeNoteId) {
|
||||||
|
@ -271,7 +271,7 @@ export default class TabManager extends Component {
|
|||||||
if (noteContext) {
|
if (noteContext) {
|
||||||
const resolvedNotePath = await treeService.resolveNotePath(notePath, noteContext.hoistedNoteId);
|
const resolvedNotePath = await treeService.resolveNotePath(notePath, noteContext.hoistedNoteId);
|
||||||
|
|
||||||
if (resolvedNotePath.includes(noteContext.hoistedNoteId) || resolvedNotePath.includes("hidden")) {
|
if (resolvedNotePath.includes(noteContext.hoistedNoteId) || resolvedNotePath.includes('_hidden')) {
|
||||||
hoistedNoteId = noteContext.hoistedNoteId;
|
hoistedNoteId = noteContext.hoistedNoteId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -344,7 +344,7 @@ class NoteShort {
|
|||||||
isInHoistedSubTree: path.includes(hoistedNotePath),
|
isInHoistedSubTree: path.includes(hoistedNotePath),
|
||||||
isArchived: path.find(noteId => froca.notes[noteId].hasLabel('archived')),
|
isArchived: path.find(noteId => froca.notes[noteId].hasLabel('archived')),
|
||||||
isSearch: path.find(noteId => froca.notes[noteId].type === 'search'),
|
isSearch: path.find(noteId => froca.notes[noteId].type === 'search'),
|
||||||
isHidden: path.includes("hidden")
|
isHidden: path.includes('_hidden')
|
||||||
}));
|
}));
|
||||||
|
|
||||||
notePaths.sort((a, b) => {
|
notePaths.sort((a, b) => {
|
||||||
@ -426,7 +426,7 @@ class NoteShort {
|
|||||||
else if (this.noteId === 'root') {
|
else if (this.noteId === 'root') {
|
||||||
return "bx bx-chevrons-right";
|
return "bx bx-chevrons-right";
|
||||||
}
|
}
|
||||||
if (this.noteId === 'share') {
|
if (this.noteId === '_share') {
|
||||||
return "bx bx-share-alt";
|
return "bx bx-share-alt";
|
||||||
}
|
}
|
||||||
else if (this.type === 'text') {
|
else if (this.type === 'text') {
|
||||||
@ -832,7 +832,7 @@ class NoteShort {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parentNote.noteId === 'share' || parentNote.isShared()) {
|
if (parentNote.noteId === '_share' || parentNote.isShared()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -845,7 +845,7 @@ class NoteShort {
|
|||||||
}
|
}
|
||||||
|
|
||||||
isLaunchBarConfig() {
|
isLaunchBarConfig() {
|
||||||
return this.type === 'launcher' || ['lbRoot', 'lbAvailableLaunchers', 'lbVisibleLaunchers'].includes(this.noteId);
|
return this.type === 'launcher' || ['_lbRoot', '_lbAvailableLaunchers', '_lbVisibleLaunchers'].includes(this.noteId);
|
||||||
}
|
}
|
||||||
|
|
||||||
isOptions() {
|
isOptions() {
|
||||||
|
@ -27,10 +27,10 @@ export default class LauncherContextMenu {
|
|||||||
const note = await froca.getNote(this.node.data.noteId);
|
const note = await froca.getNote(this.node.data.noteId);
|
||||||
const parentNoteId = this.node.getParent().data.noteId;
|
const parentNoteId = this.node.getParent().data.noteId;
|
||||||
|
|
||||||
const isVisibleRoot = note.noteId === 'lbVisibleLaunchers';
|
const isVisibleRoot = note.noteId === '_lbVisibleLaunchers';
|
||||||
const isAvailableRoot = note.noteId === 'lbAvailableLaunchers';
|
const isAvailableRoot = note.noteId === '_lbAvailableLaunchers';
|
||||||
const isVisibleItem = parentNoteId === 'lbVisibleLaunchers';
|
const isVisibleItem = parentNoteId === '_lbVisibleLaunchers';
|
||||||
const isAvailableItem = parentNoteId === 'lbAvailableLaunchers';
|
const isAvailableItem = parentNoteId === '_lbAvailableLaunchers';
|
||||||
const isItem = isVisibleItem || isAvailableItem;
|
const isItem = isVisibleItem || isAvailableItem;
|
||||||
const canBeDeleted = !note.isLaunchBarConfig();
|
const canBeDeleted = !note.isLaunchBarConfig();
|
||||||
const canBeReset = note.isLaunchBarConfig();
|
const canBeReset = note.isLaunchBarConfig();
|
||||||
|
@ -10,7 +10,7 @@ async function moveBeforeBranch(branchIdsToMove, beforeBranchId) {
|
|||||||
branchIdsToMove = filterRootNote(branchIdsToMove);
|
branchIdsToMove = filterRootNote(branchIdsToMove);
|
||||||
branchIdsToMove = filterSearchBranches(branchIdsToMove);
|
branchIdsToMove = filterSearchBranches(branchIdsToMove);
|
||||||
|
|
||||||
if (['root', 'lbRoot', 'lbAvailableLaunchers', 'lbVisibleLaunchers'].includes(beforeBranchId)) {
|
if (['root', '_lbRoot', '_lbAvailableLaunchers', '_lbVisibleLaunchers'].includes(beforeBranchId)) {
|
||||||
toastService.showError('Cannot move notes here.');
|
toastService.showError('Cannot move notes here.');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -34,9 +34,9 @@ async function moveAfterBranch(branchIdsToMove, afterBranchId) {
|
|||||||
const forbiddenNoteIds = [
|
const forbiddenNoteIds = [
|
||||||
'root',
|
'root',
|
||||||
hoistedNoteService.getHoistedNoteId(),
|
hoistedNoteService.getHoistedNoteId(),
|
||||||
'lbRoot',
|
'_lbRoot',
|
||||||
'lbAvailableLaunchers',
|
'_lbAvailableLaunchers',
|
||||||
'lbVisibleLaunchers'
|
'_lbVisibleLaunchers'
|
||||||
];
|
];
|
||||||
|
|
||||||
if (forbiddenNoteIds.includes(afterNote.noteId)) {
|
if (forbiddenNoteIds.includes(afterNote.noteId)) {
|
||||||
@ -57,7 +57,7 @@ async function moveAfterBranch(branchIdsToMove, afterBranchId) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function moveToParentNote(branchIdsToMove, newParentBranchId) {
|
async function moveToParentNote(branchIdsToMove, newParentBranchId) {
|
||||||
if (newParentBranchId === 'lbRoot') {
|
if (newParentBranchId === '_lbRoot') {
|
||||||
toastService.showError('Cannot move notes here.');
|
toastService.showError('Cannot move notes here.');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,7 @@ async function checkNoteAccess(notePath, noteContext) {
|
|||||||
|
|
||||||
const hoistedNoteId = noteContext.hoistedNoteId;
|
const hoistedNoteId = noteContext.hoistedNoteId;
|
||||||
|
|
||||||
if (!resolvedNotePath.includes(hoistedNoteId) && !resolvedNotePath.includes("hidden")) {
|
if (!resolvedNotePath.includes(hoistedNoteId) && !resolvedNotePath.includes('_hidden')) {
|
||||||
if (!await dialogService.confirm("Requested note is outside of hoisted note subtree and you must unhoist to access the note. Do you want to proceed with unhoisting?")) {
|
if (!await dialogService.confirm("Requested note is outside of hoisted note subtree and you must unhoist to access the note. Do you want to proceed with unhoisting?")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -51,10 +51,10 @@ async function getAction(actionName, silent = false) {
|
|||||||
|
|
||||||
if (!action) {
|
if (!action) {
|
||||||
if (silent) {
|
if (silent) {
|
||||||
console.log(`Cannot find action ${actionName}`);
|
console.debug(`Cannot find action '${actionName}'`);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
throw new Error(`Cannot find action ${actionName}`);
|
throw new Error(`Cannot find action '${actionName}'`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,7 +156,7 @@ class NoteListRenderer {
|
|||||||
this.parentNote = parentNote;
|
this.parentNote = parentNote;
|
||||||
const includedNoteIds = this.getIncludedNoteIds();
|
const includedNoteIds = this.getIncludedNoteIds();
|
||||||
|
|
||||||
this.noteIds = noteIds.filter(noteId => !includedNoteIds.has(noteId) && noteId !== 'hidden');
|
this.noteIds = noteIds.filter(noteId => !includedNoteIds.has(noteId) && noteId !== '_hidden');
|
||||||
|
|
||||||
if (this.noteIds.length === 0) {
|
if (this.noteIds.length === 0) {
|
||||||
return;
|
return;
|
||||||
|
@ -323,7 +323,7 @@ function parseNotePath(notePath) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function isNotePathInHiddenSubtree(notePath) {
|
function isNotePathInHiddenSubtree(notePath) {
|
||||||
return notePath?.includes("root/hidden");
|
return notePath?.includes("root/_hidden");
|
||||||
}
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
@ -15,7 +15,7 @@ export default class BookmarkButtons extends FlexContainer {
|
|||||||
this.children = [];
|
this.children = [];
|
||||||
this.noteIds = [];
|
this.noteIds = [];
|
||||||
|
|
||||||
const bookmarkParentNote = await froca.getNote('lbBookmarks');
|
const bookmarkParentNote = await froca.getNote('_lbBookmarks');
|
||||||
|
|
||||||
for (const note of await bookmarkParentNote.getChildNotes()) {
|
for (const note of await bookmarkParentNote.getChildNotes()) {
|
||||||
this.noteIds.push(note.noteId);
|
this.noteIds.push(note.noteId);
|
||||||
|
@ -6,7 +6,7 @@ export default class BookmarkSwitchWidget extends SwitchWidget {
|
|||||||
isEnabled() {
|
isEnabled() {
|
||||||
return super.isEnabled()
|
return super.isEnabled()
|
||||||
// it's not possible to bookmark root because that would clone it under bookmarks and thus create a cycle
|
// it's not possible to bookmark root because that would clone it under bookmarks and thus create a cycle
|
||||||
&& !['root', 'hidden'].includes(this.noteId);
|
&& !['root', '_hidden'].includes(this.noteId);
|
||||||
}
|
}
|
||||||
|
|
||||||
doRender() {
|
doRender() {
|
||||||
|
@ -19,7 +19,7 @@ export default class LauncherContainer extends FlexContainer {
|
|||||||
|
|
||||||
this.children = [];
|
this.children = [];
|
||||||
|
|
||||||
const visibleLaunchersRoot = await froca.getNote('lbVisibleLaunchers', true);
|
const visibleLaunchersRoot = await froca.getNote('_lbVisibleLaunchers', true);
|
||||||
|
|
||||||
if (!visibleLaunchersRoot) {
|
if (!visibleLaunchersRoot) {
|
||||||
console.log("Visible launchers root note doesn't exist.");
|
console.log("Visible launchers root note doesn't exist.");
|
||||||
|
@ -83,7 +83,7 @@ export default class BulkActionsDialog extends BasicWidget {
|
|||||||
this.$widget.on('click', '[data-action-add]', async event => {
|
this.$widget.on('click', '[data-action-add]', async event => {
|
||||||
const actionName = $(event.target).attr('data-action-add');
|
const actionName = $(event.target).attr('data-action-add');
|
||||||
|
|
||||||
await bulkActionService.addAction('bulkAction', actionName);
|
await bulkActionService.addAction('_bulkAction', actionName);
|
||||||
|
|
||||||
await this.refresh();
|
await this.refresh();
|
||||||
});
|
});
|
||||||
@ -111,7 +111,7 @@ export default class BulkActionsDialog extends BasicWidget {
|
|||||||
|
|
||||||
this.$affectedNoteCount.text(affectedNoteCount);
|
this.$affectedNoteCount.text(affectedNoteCount);
|
||||||
|
|
||||||
const bulkActionNote = await froca.getNote('bulkAction');
|
const bulkActionNote = await froca.getNote('_bulkAction');
|
||||||
|
|
||||||
const actions = bulkActionService.parseActions(bulkActionNote);
|
const actions = bulkActionService.parseActions(bulkActionNote);
|
||||||
|
|
||||||
@ -150,7 +150,7 @@ export default class BulkActionsDialog extends BasicWidget {
|
|||||||
if (loadResults.getAttributes().find(attr =>
|
if (loadResults.getAttributes().find(attr =>
|
||||||
attr.type === 'label'
|
attr.type === 'label'
|
||||||
&& attr.name === 'action'
|
&& attr.name === 'action'
|
||||||
&& attr.noteId === 'bulkAction'
|
&& attr.noteId === '_bulkAction'
|
||||||
&& attr.isDeleted)) {
|
&& attr.isDeleted)) {
|
||||||
|
|
||||||
// this may be triggered from e.g. sync without open widget, then no need to refresh the widget
|
// this may be triggered from e.g. sync without open widget, then no need to refresh the widget
|
||||||
|
@ -76,7 +76,7 @@ export default class CodeButtonsWidget extends NoteContextAwareWidget {
|
|||||||
|
|
||||||
this.$saveToNoteButton.toggle(
|
this.$saveToNoteButton.toggle(
|
||||||
note.mime === 'text/x-sqlite;schema=trilium'
|
note.mime === 'text/x-sqlite;schema=trilium'
|
||||||
&& !note.getAllNotePaths().find(notePathArr => !notePathArr.includes("hidden"))
|
&& !note.getAllNotePaths().find(notePathArr => !notePathArr.includes('_hidden'))
|
||||||
);
|
);
|
||||||
|
|
||||||
this.$openTriliumApiDocsButton.toggle(note.mime.startsWith('application/javascript;env='));
|
this.$openTriliumApiDocsButton.toggle(note.mime.startsWith('application/javascript;env='));
|
||||||
|
@ -5171,7 +5171,7 @@ const icons = [
|
|||||||
"type_of_icon": "REGULAR"
|
"type_of_icon": "REGULAR"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "share",
|
"name": '_share',
|
||||||
"slug": "share-regular",
|
"slug": "share-regular",
|
||||||
"category_id": 101,
|
"category_id": 101,
|
||||||
"type_of_icon": "REGULAR"
|
"type_of_icon": "REGULAR"
|
||||||
@ -6826,7 +6826,7 @@ const icons = [
|
|||||||
"type_of_icon": "SOLID"
|
"type_of_icon": "SOLID"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "share",
|
"name": '_share',
|
||||||
"slug": "share-solid",
|
"slug": "share-solid",
|
||||||
"category_id": 101,
|
"category_id": 101,
|
||||||
"type_of_icon": "SOLID"
|
"type_of_icon": "SOLID"
|
||||||
|
@ -73,7 +73,7 @@ export default class NoteTitleWidget extends NoteContextAwareWidget {
|
|||||||
this.$noteTitle.val(note.title);
|
this.$noteTitle.val(note.title);
|
||||||
|
|
||||||
this.$noteTitle.prop("readonly", (note.isProtected && !protectedSessionHolder.isProtectedSessionAvailable())
|
this.$noteTitle.prop("readonly", (note.isProtected && !protectedSessionHolder.isProtectedSessionAvailable())
|
||||||
|| ["lbRoot", "lbAvailableLaunchers", "lbVisibleLaunchers"].includes(note.noteId));
|
|| ['_lbRoot', '_lbAvailableLaunchers', '_lbVisibleLaunchers'].includes(note.noteId));
|
||||||
|
|
||||||
this.setProtectedStatus(note);
|
this.setProtectedStatus(note);
|
||||||
}
|
}
|
||||||
|
@ -371,7 +371,7 @@ export default class NoteTreeWidget extends NoteContextAwareWidget {
|
|||||||
},
|
},
|
||||||
beforeActivate: (event, data) => {
|
beforeActivate: (event, data) => {
|
||||||
// hidden subtree is hidden hackily, prevent activating it e.g. by keyboard
|
// hidden subtree is hidden hackily, prevent activating it e.g. by keyboard
|
||||||
return hoistedNoteService.getHoistedNoteId() === 'hidden' || data.node.data.noteId !== 'hidden';
|
return hoistedNoteService.getHoistedNoteId() === '_hidden' || data.node.data.noteId !== '_hidden';
|
||||||
},
|
},
|
||||||
activate: async (event, data) => {
|
activate: async (event, data) => {
|
||||||
// click event won't propagate so let's close context menu manually
|
// click event won't propagate so let's close context menu manually
|
||||||
@ -395,8 +395,8 @@ export default class NoteTreeWidget extends NoteContextAwareWidget {
|
|||||||
autoExpandMS: 600,
|
autoExpandMS: 600,
|
||||||
preventLazyParents: false,
|
preventLazyParents: false,
|
||||||
dragStart: (node, data) => {
|
dragStart: (node, data) => {
|
||||||
if (['root', 'hidden', 'lbRoot', 'lbAvailableLaunchers', 'lbVisibleLaunchers'].includes(node.data.noteId)
|
if (['root', '_hidden', '_lbRoot', '_lbAvailableLaunchers', '_lbVisibleLaunchers'].includes(node.data.noteId)
|
||||||
|| node.data.noteId.startsWith("options")) {
|
|| node.data.noteId.startsWith("_options")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -424,9 +424,9 @@ export default class NoteTreeWidget extends NoteContextAwareWidget {
|
|||||||
dragEnter: (node, data) => {
|
dragEnter: (node, data) => {
|
||||||
if (node.data.noteType === 'search') {
|
if (node.data.noteType === 'search') {
|
||||||
return false;
|
return false;
|
||||||
} else if (node.data.noteId === 'lbRoot') {
|
} else if (node.data.noteId === '_lbRoot') {
|
||||||
return false;
|
return false;
|
||||||
} else if (node.data.noteId.startsWith('options')) {
|
} else if (node.data.noteId.startsWith('_options')) {
|
||||||
return false;
|
return false;
|
||||||
} else if (node.data.noteType === 'launcher') {
|
} else if (node.data.noteType === 'launcher') {
|
||||||
return ['before', 'after'];
|
return ['before', 'after'];
|
||||||
@ -747,7 +747,7 @@ export default class NoteTreeWidget extends NoteContextAwareWidget {
|
|||||||
.map(noteId => froca.notes[noteId])
|
.map(noteId => froca.notes[noteId])
|
||||||
.filter(note => !!note)
|
.filter(note => !!note)
|
||||||
.filter(note =>
|
.filter(note =>
|
||||||
!['share', 'lbBookmarks'].includes(note.noteId)
|
!['_share', 'lbBookmarks'].includes(note.noteId)
|
||||||
&& note.type !== 'search');
|
&& note.type !== 'search');
|
||||||
|
|
||||||
if (realClones.length > 1) {
|
if (realClones.length > 1) {
|
||||||
@ -1122,7 +1122,7 @@ export default class NoteTreeWidget extends NoteContextAwareWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (const ecBranch of loadResults.getBranches()) {
|
for (const ecBranch of loadResults.getBranches()) {
|
||||||
if (ecBranch.parentNoteId === 'share') {
|
if (ecBranch.parentNoteId === '_share') {
|
||||||
// all shared notes have a sign in the tree, even the descendants of shared notes
|
// all shared notes have a sign in the tree, even the descendants of shared notes
|
||||||
noteIdsToReload.add(ecBranch.noteId);
|
noteIdsToReload.add(ecBranch.noteId);
|
||||||
}
|
}
|
||||||
@ -1335,7 +1335,7 @@ export default class NoteTreeWidget extends NoteContextAwareWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
toggleHiddenNode(show) {
|
toggleHiddenNode(show) {
|
||||||
const hiddenNode = this.getNodesByNoteId('hidden')[0];
|
const hiddenNode = this.getNodesByNoteId('_hidden')[0];
|
||||||
$(hiddenNode.li).toggleClass("hidden-node-is-hidden", !show);
|
$(hiddenNode.li).toggleClass("hidden-node-is-hidden", !show);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1568,11 +1568,11 @@ export default class NoteTreeWidget extends NoteContextAwareWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
moveShortcutToVisibleCommand({node, selectedOrActiveBranchIds}) {
|
moveShortcutToVisibleCommand({node, selectedOrActiveBranchIds}) {
|
||||||
branchService.moveToParentNote(selectedOrActiveBranchIds, 'lbVisibleLaunchers');
|
branchService.moveToParentNote(selectedOrActiveBranchIds, '_lbVisibleLaunchers');
|
||||||
}
|
}
|
||||||
|
|
||||||
moveShortcutToAvailableCommand({node, selectedOrActiveBranchIds}) {
|
moveShortcutToAvailableCommand({node, selectedOrActiveBranchIds}) {
|
||||||
branchService.moveToParentNote(selectedOrActiveBranchIds, 'lbAvailableLaunchers');
|
branchService.moveToParentNote(selectedOrActiveBranchIds, '_lbAvailableLaunchers');
|
||||||
}
|
}
|
||||||
|
|
||||||
addNoteLauncherCommand({node}) {
|
addNoteLauncherCommand({node}) {
|
||||||
|
@ -270,7 +270,7 @@ export default class SearchDefinitionWidget extends NoteContextAwareWidget {
|
|||||||
async refreshWithNote(note) {
|
async refreshWithNote(note) {
|
||||||
this.$component.show();
|
this.$component.show();
|
||||||
|
|
||||||
this.$saveToNoteButton.toggle(!note.getAllNotePaths().find(notePathArr => !notePathArr.includes("hidden")));
|
this.$saveToNoteButton.toggle(!note.getAllNotePaths().find(notePathArr => !notePathArr.includes('_hidden')));
|
||||||
|
|
||||||
this.$searchOptions.empty();
|
this.$searchOptions.empty();
|
||||||
|
|
||||||
@ -295,7 +295,7 @@ export default class SearchDefinitionWidget extends NoteContextAwareWidget {
|
|||||||
.empty()
|
.empty()
|
||||||
.append(...actions.map(action => action.render()));
|
.append(...actions.map(action => action.render()));
|
||||||
|
|
||||||
this.$searchAndExecuteButton.css('visibility', actions.length > 0 ? 'visible' : 'hidden');
|
this.$searchAndExecuteButton.css('visibility', actions.length > 0 ? 'visible' : '_hidden');
|
||||||
}
|
}
|
||||||
|
|
||||||
getContent() {
|
getContent() {
|
||||||
|
@ -18,7 +18,7 @@ const TPL = `
|
|||||||
|
|
||||||
export default class SharedInfoWidget extends NoteContextAwareWidget {
|
export default class SharedInfoWidget extends NoteContextAwareWidget {
|
||||||
isEnabled() {
|
isEnabled() {
|
||||||
return super.isEnabled() && this.noteId !== 'share' && this.note.hasAncestor('share');
|
return super.isEnabled() && this.noteId !== '_share' && this.note.hasAncestor('_share');
|
||||||
}
|
}
|
||||||
|
|
||||||
doRender() {
|
doRender() {
|
||||||
@ -55,7 +55,7 @@ export default class SharedInfoWidget extends NoteContextAwareWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
entitiesReloadedEvent({loadResults}) {
|
entitiesReloadedEvent({loadResults}) {
|
||||||
if (loadResults.getAttributes().find(attr => attr.name.startsWith("share") && attributeService.isAffecting(attr, this.note))) {
|
if (loadResults.getAttributes().find(attr => attr.name.startsWith('_share') && attributeService.isAffecting(attr, this.note))) {
|
||||||
this.refresh();
|
this.refresh();
|
||||||
}
|
}
|
||||||
else if (loadResults.getBranches().find(branch => branch.noteId === this.noteId)) {
|
else if (loadResults.getBranches().find(branch => branch.noteId === this.noteId)) {
|
||||||
|
@ -8,7 +8,7 @@ import dialogService from "../services/dialog.js";
|
|||||||
export default class SharedSwitchWidget extends SwitchWidget {
|
export default class SharedSwitchWidget extends SwitchWidget {
|
||||||
isEnabled() {
|
isEnabled() {
|
||||||
return super.isEnabled()
|
return super.isEnabled()
|
||||||
&& !['root', 'share', 'hidden'].includes(this.noteId);
|
&& !['root', '_share', '_hidden'].includes(this.noteId);
|
||||||
}
|
}
|
||||||
|
|
||||||
doRender() {
|
doRender() {
|
||||||
@ -25,13 +25,13 @@ export default class SharedSwitchWidget extends SwitchWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async switchOn() {
|
async switchOn() {
|
||||||
await branchService.cloneNoteToNote(this.noteId, 'share');
|
await branchService.cloneNoteToNote(this.noteId, '_share');
|
||||||
|
|
||||||
syncService.syncNow(true);
|
syncService.syncNow(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
async switchOff() {
|
async switchOff() {
|
||||||
const shareBranch = this.note.getParentBranches().find(b => b.parentNoteId === 'share');
|
const shareBranch = this.note.getParentBranches().find(b => b.parentNoteId === '_share');
|
||||||
|
|
||||||
if (!shareBranch) {
|
if (!shareBranch) {
|
||||||
return;
|
return;
|
||||||
@ -51,8 +51,8 @@ export default class SharedSwitchWidget extends SwitchWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async refreshWithNote(note) {
|
async refreshWithNote(note) {
|
||||||
const isShared = note.hasAncestor('share');
|
const isShared = note.hasAncestor('_share');
|
||||||
const canBeUnshared = isShared && note.getParentBranches().find(b => b.parentNoteId === 'share');
|
const canBeUnshared = isShared && note.getParentBranches().find(b => b.parentNoteId === '_share');
|
||||||
const switchDisabled = isShared && !canBeUnshared;
|
const switchDisabled = isShared && !canBeUnshared;
|
||||||
|
|
||||||
this.$switchOn.toggle(!isShared);
|
this.$switchOn.toggle(!isShared);
|
||||||
|
@ -6,7 +6,7 @@ function execute(req) {
|
|||||||
|
|
||||||
const affectedNoteIds = getAffectedNoteIds(noteIds, includeDescendants);
|
const affectedNoteIds = getAffectedNoteIds(noteIds, includeDescendants);
|
||||||
|
|
||||||
const bulkActionNote = becca.getNote('bulkAction');
|
const bulkActionNote = becca.getNote('_bulkAction');
|
||||||
|
|
||||||
bulkActionService.executeActions(bulkActionNote, affectedNoteIds);
|
bulkActionService.executeActions(bulkActionNote, affectedNoteIds);
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ function getFullAnonymizationScript() {
|
|||||||
|
|
||||||
const anonymizeScript = `
|
const anonymizeScript = `
|
||||||
UPDATE etapi_tokens SET tokenHash = 'API token hash value';
|
UPDATE etapi_tokens SET tokenHash = 'API token hash value';
|
||||||
UPDATE notes SET title = 'title' WHERE title NOT IN ('root', 'hidden', 'share');
|
UPDATE notes SET title = 'title' WHERE title NOT IN ('root', '_hidden', '_share');
|
||||||
UPDATE note_contents SET content = 'text' WHERE content IS NOT NULL;
|
UPDATE note_contents SET content = 'text' WHERE content IS NOT NULL;
|
||||||
UPDATE note_revisions SET title = 'title';
|
UPDATE note_revisions SET title = 'title';
|
||||||
UPDATE note_revision_contents SET content = 'text' WHERE content IS NOT NULL;
|
UPDATE note_revision_contents SET content = 'text' WHERE content IS NOT NULL;
|
||||||
|
@ -120,9 +120,9 @@ function toggleNoteInParent(present, noteId, parentNoteId, prefix) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function cloneNoteAfter(noteId, afterBranchId) {
|
function cloneNoteAfter(noteId, afterBranchId) {
|
||||||
if (['hidden', 'root'].includes(noteId)) {
|
if (['_hidden', 'root'].includes(noteId)) {
|
||||||
return { success: false, message: 'Cloning the given note is forbidden.' };
|
return { success: false, message: 'Cloning the given note is forbidden.' };
|
||||||
} else if (afterBranchId === 'hidden') {
|
} else if (afterBranchId === '_hidden') {
|
||||||
return { success: false, message: 'Cannot clone after the hidden branch.' };
|
return { success: false, message: 'Cannot clone after the hidden branch.' };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,7 +152,7 @@ function exportToZip(taskContext, branch, format, res) {
|
|||||||
noteIdToMeta[note.noteId] = meta;
|
noteIdToMeta[note.noteId] = meta;
|
||||||
|
|
||||||
const childBranches = note.getChildBranches()
|
const childBranches = note.getChildBranches()
|
||||||
.filter(branch => branch.noteId !== 'hidden');
|
.filter(branch => branch.noteId !== '_hidden');
|
||||||
|
|
||||||
const available = !note.isProtected || protectedSessionService.isProtectedSessionAvailable();
|
const available = !note.isProtected || protectedSessionService.isProtectedSessionAvailable();
|
||||||
|
|
||||||
|
@ -2,18 +2,18 @@ const becca = require("../becca/becca");
|
|||||||
const noteService = require("./notes");
|
const noteService = require("./notes");
|
||||||
const log = require("./log");
|
const log = require("./log");
|
||||||
|
|
||||||
const LBTPL_ROOT = "lbTplRoot";
|
const LBTPL_ROOT = "_lbTplRoot";
|
||||||
const LBTPL_BASE = "lbTplBase";
|
const LBTPL_BASE = "_lbTplBase";
|
||||||
const LBTPL_COMMAND = "lbTplCommandLauncher";
|
const LBTPL_COMMAND = "_lbTplCommandLauncher";
|
||||||
const LBTPL_NOTE_LAUNCHER = "lbTplNoteLauncher";
|
const LBTPL_NOTE_LAUNCHER = "_lbTplNoteLauncher";
|
||||||
const LBTPL_SCRIPT = "lbTplScriptLauncher";
|
const LBTPL_SCRIPT = "_lbTplScriptLauncher";
|
||||||
const LBTPL_BUILTIN_WIDGET = "lbTplBuiltinWidget";
|
const LBTPL_BUILTIN_WIDGET = "_lbTplBuiltinWidget";
|
||||||
const LBTPL_SPACER = "lbTplSpacer";
|
const LBTPL_SPACER = "_lbTplSpacer";
|
||||||
const LBTPL_CUSTOM_WIDGET = "lbTplCustomWidget";
|
const LBTPL_CUSTOM_WIDGET = "_lbTplCustomWidget";
|
||||||
|
|
||||||
const HIDDEN_SUBTREE_DEFINITION = {
|
const HIDDEN_SUBTREE_DEFINITION = {
|
||||||
id: 'hidden',
|
id: '_hidden',
|
||||||
title: 'hidden',
|
title: '_hidden',
|
||||||
type: 'doc',
|
type: 'doc',
|
||||||
icon: 'bx bx-chip',
|
icon: 'bx bx-chip',
|
||||||
// we want to keep the hidden subtree always last, otherwise there will be problems with e.g. keyboard navigation
|
// we want to keep the hidden subtree always last, otherwise there will be problems with e.g. keyboard navigation
|
||||||
@ -24,12 +24,12 @@ const HIDDEN_SUBTREE_DEFINITION = {
|
|||||||
],
|
],
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
id: 'search',
|
id: '_search',
|
||||||
title: 'Search History',
|
title: 'Search History',
|
||||||
type: 'doc'
|
type: 'doc'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'globalNoteMap',
|
id: '_globalNoteMap',
|
||||||
title: 'Note Map',
|
title: 'Note Map',
|
||||||
type: 'noteMap',
|
type: 'noteMap',
|
||||||
attributes: [
|
attributes: [
|
||||||
@ -38,24 +38,24 @@ const HIDDEN_SUBTREE_DEFINITION = {
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'sqlConsole',
|
id: '_sqlConsole',
|
||||||
title: 'SQL Console History',
|
title: 'SQL Console History',
|
||||||
type: 'doc',
|
type: 'doc',
|
||||||
icon: 'bx-data'
|
icon: 'bx-data'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'share',
|
id: '_share',
|
||||||
title: 'Shared Notes',
|
title: 'Shared Notes',
|
||||||
type: 'doc',
|
type: 'doc',
|
||||||
attributes: [ { type: 'label', name: 'docName', value: 'share' } ]
|
attributes: [ { type: 'label', name: 'docName', value: '_share' } ]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'bulkAction',
|
id: '_bulkAction',
|
||||||
title: 'Bulk action',
|
title: 'Bulk action',
|
||||||
type: 'doc',
|
type: 'doc',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'backendLog',
|
id: '_backendLog',
|
||||||
title: 'Backend Log',
|
title: 'Backend Log',
|
||||||
type: 'contentWidget',
|
type: 'contentWidget',
|
||||||
icon: 'bx-terminal',
|
icon: 'bx-terminal',
|
||||||
@ -65,7 +65,7 @@ const HIDDEN_SUBTREE_DEFINITION = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
// place for user scripts hidden stuff (scripts should not create notes directly under hidden root)
|
// place for user scripts hidden stuff (scripts should not create notes directly under hidden root)
|
||||||
id: 'userHidden',
|
id: '_userHidden',
|
||||||
title: 'User Hidden',
|
title: 'User Hidden',
|
||||||
type: 'text',
|
type: 'text',
|
||||||
},
|
},
|
||||||
@ -150,7 +150,7 @@ const HIDDEN_SUBTREE_DEFINITION = {
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'lbRoot',
|
id: '_lbRoot',
|
||||||
title: 'Launch bar',
|
title: 'Launch bar',
|
||||||
type: 'doc',
|
type: 'doc',
|
||||||
icon: 'bx-sidebar',
|
icon: 'bx-sidebar',
|
||||||
@ -158,65 +158,65 @@ const HIDDEN_SUBTREE_DEFINITION = {
|
|||||||
attributes: [ { type: 'label', name: 'docName', value: 'launchbar_intro' } ],
|
attributes: [ { type: 'label', name: 'docName', value: 'launchbar_intro' } ],
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
id: 'lbAvailableLaunchers',
|
id: '_lbAvailableLaunchers',
|
||||||
title: 'Available Launchers',
|
title: 'Available Launchers',
|
||||||
type: 'doc',
|
type: 'doc',
|
||||||
icon: 'bx-hide',
|
icon: 'bx-hide',
|
||||||
isExpanded: true,
|
isExpanded: true,
|
||||||
attributes: [ { type: 'label', name: 'docName', value: 'launchbar_intro' } ],
|
attributes: [ { type: 'label', name: 'docName', value: 'launchbar_intro' } ],
|
||||||
children: [
|
children: [
|
||||||
{ id: 'lbBackInHistory', title: 'Back in History', type: 'launcher', builtinWidget: 'backInHistoryButton', icon: 'bx bxs-left-arrow-square' },
|
{ id: '_lbBackInHistory', title: 'Back in History', type: 'launcher', builtinWidget: 'backInHistoryButton', icon: 'bx bxs-left-arrow-square' },
|
||||||
{ id: 'lbForwardInHistory', title: 'Forward in History', type: 'launcher', builtinWidget: 'forwardInHistoryButton', icon: 'bx bxs-right-arrow-square' },
|
{ id: '_lbForwardInHistory', title: 'Forward in History', type: 'launcher', builtinWidget: 'forwardInHistoryButton', icon: 'bx bxs-right-arrow-square' },
|
||||||
{ id: 'lbBackendLog', title: 'Backend Log', type: 'launcher', targetNoteId: 'backendLog', icon: 'bx bx-terminal' },
|
{ id: '_lbBackendLog', title: 'Backend Log', type: 'launcher', targetNoteId: '_backendLog', icon: 'bx bx-terminal' },
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'lbVisibleLaunchers',
|
id: '_lbVisibleLaunchers',
|
||||||
title: 'Visible Launchers',
|
title: 'Visible Launchers',
|
||||||
type: 'doc',
|
type: 'doc',
|
||||||
icon: 'bx-show',
|
icon: 'bx-show',
|
||||||
isExpanded: true,
|
isExpanded: true,
|
||||||
attributes: [ { type: 'label', name: 'docName', value: 'launchbar_intro' } ],
|
attributes: [ { type: 'label', name: 'docName', value: 'launchbar_intro' } ],
|
||||||
children: [
|
children: [
|
||||||
{ id: 'lbNewNote', title: 'New Note', type: 'launcher', command: 'createNoteIntoInbox', icon: 'bx bx-file-blank' },
|
{ id: '_lbNewNote', title: 'New Note', type: 'launcher', command: 'createNoteIntoInbox', icon: 'bx bx-file-blank' },
|
||||||
{ id: 'lbSearch', title: 'Search Notes', type: 'launcher', command: 'searchNotes', icon: 'bx bx-search', attributes: [
|
{ id: '_lbSearch', title: 'Search Notes', type: 'launcher', command: 'searchNotes', icon: 'bx bx-search', attributes: [
|
||||||
{ type: 'label', name: 'desktopOnly' }
|
{ type: 'label', name: 'desktopOnly' }
|
||||||
] },
|
] },
|
||||||
{ id: 'lbJumpTo', title: 'Jump to Note', type: 'launcher', command: 'jumpToNote', icon: 'bx bx-send', attributes: [
|
{ id: '_lbJumpTo', title: 'Jump to Note', type: 'launcher', command: 'jumpToNote', icon: 'bx bx-send', attributes: [
|
||||||
{ type: 'label', name: 'desktopOnly' }
|
{ type: 'label', name: 'desktopOnly' }
|
||||||
] },
|
] },
|
||||||
{ id: 'lbNoteMap', title: 'Note Map', type: 'launcher', targetNoteId: 'globalNoteMap', icon: 'bx bx-map-alt' },
|
{ id: '_lbNoteMap', title: 'Note Map', type: 'launcher', targetNoteId: '_globalNoteMap', icon: 'bx bx-map-alt' },
|
||||||
{ id: 'lbCalendar', title: 'Calendar', type: 'launcher', builtinWidget: 'calendar', icon: 'bx bx-calendar' },
|
{ id: '_lbCalendar', title: 'Calendar', type: 'launcher', builtinWidget: 'calendar', icon: 'bx bx-calendar' },
|
||||||
{ id: 'lbRecentChanges', title: 'Recent Changes', type: 'launcher', command: 'showRecentChanges', icon: 'bx bx-history', attributes: [
|
{ id: '_lbRecentChanges', title: 'Recent Changes', type: 'launcher', command: 'showRecentChanges', icon: 'bx bx-history', attributes: [
|
||||||
{ type: 'label', name: 'desktopOnly' }
|
{ type: 'label', name: 'desktopOnly' }
|
||||||
] },
|
] },
|
||||||
{ id: 'lbSpacer1', title: 'Spacer', type: 'launcher', builtinWidget: 'spacer', baseSize: "50", growthFactor: "0" },
|
{ id: '_lbSpacer1', title: 'Spacer', type: 'launcher', builtinWidget: 'spacer', baseSize: "50", growthFactor: "0" },
|
||||||
{ id: 'lbBookmarks', title: 'Bookmarks', type: 'launcher', builtinWidget: 'bookmarks', icon: 'bx bx-bookmark' },
|
{ id: '_lbBookmarks', title: 'Bookmarks', type: 'launcher', builtinWidget: 'bookmarks', icon: 'bx bx-bookmark' },
|
||||||
{ id: 'lbToday', title: "Open Today's Journal Note", type: 'launcher', builtinWidget: 'todayInJournal', icon: 'bx bx-calendar-star' },
|
{ id: '_lbToday', title: "Open Today's Journal Note", type: 'launcher', builtinWidget: 'todayInJournal', icon: 'bx bx-calendar-star' },
|
||||||
{ id: 'lbSpacer2', title: 'Spacer', type: 'launcher', builtinWidget: 'spacer', baseSize: "0", growthFactor: "1" },
|
{ id: '_lbSpacer2', title: 'Spacer', type: 'launcher', builtinWidget: 'spacer', baseSize: "0", growthFactor: "1" },
|
||||||
{ id: 'lbProtectedSession', title: 'Protected Session', type: 'launcher', builtinWidget: 'protectedSession', icon: 'bx bx bx-shield-quarter' },
|
{ id: '_lbProtectedSession', title: 'Protected Session', type: 'launcher', builtinWidget: 'protectedSession', icon: 'bx bx bx-shield-quarter' },
|
||||||
{ id: 'lbSyncStatus', title: 'Sync Status', type: 'launcher', builtinWidget: 'syncStatus', icon: 'bx bx-wifi' }
|
{ id: '_lbSyncStatus', title: 'Sync Status', type: 'launcher', builtinWidget: 'syncStatus', icon: 'bx bx-wifi' }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'options',
|
id: '_options',
|
||||||
title: 'Options',
|
title: 'Options',
|
||||||
type: 'book',
|
type: 'book',
|
||||||
children: [
|
children: [
|
||||||
{ id: 'optionsAppearance', title: 'Appearance', type: 'contentWidget', icon: 'bx-layout' },
|
{ id: '_optionsAppearance', title: 'Appearance', type: 'contentWidget', icon: 'bx-layout' },
|
||||||
{ id: 'optionsShortcuts', title: 'Shortcuts', type: 'contentWidget', icon: 'bxs-keyboard' },
|
{ id: '_optionsShortcuts', title: 'Shortcuts', type: 'contentWidget', icon: 'bxs-keyboard' },
|
||||||
{ id: 'optionsTextNotes', title: 'Text Notes', type: 'contentWidget', icon: 'bx-text' },
|
{ id: '_optionsTextNotes', title: 'Text Notes', type: 'contentWidget', icon: 'bx-text' },
|
||||||
{ id: 'optionsCodeNotes', title: 'Code Notes', type: 'contentWidget', icon: 'bx-code' },
|
{ id: '_optionsCodeNotes', title: 'Code Notes', type: 'contentWidget', icon: 'bx-code' },
|
||||||
{ id: 'optionsImages', title: 'Images', type: 'contentWidget', icon: 'bx-image' },
|
{ id: '_optionsImages', title: 'Images', type: 'contentWidget', icon: 'bx-image' },
|
||||||
{ id: 'optionsSpellcheck', title: 'Spellcheck', type: 'contentWidget', icon: 'bx-check-double' },
|
{ id: '_optionsSpellcheck', title: 'Spellcheck', type: 'contentWidget', icon: 'bx-check-double' },
|
||||||
{ id: 'optionsPassword', title: 'Password', type: 'contentWidget', icon: 'bx-lock' },
|
{ id: '_optionsPassword', title: 'Password', type: 'contentWidget', icon: 'bx-lock' },
|
||||||
{ id: 'optionsEtapi', title: 'ETAPI', type: 'contentWidget', icon: 'bx-extension' },
|
{ id: '_optionsEtapi', title: 'ETAPI', type: 'contentWidget', icon: 'bx-extension' },
|
||||||
{ id: 'optionsBackup', title: 'Backup', type: 'contentWidget', icon: 'bx-data' },
|
{ id: '_optionsBackup', title: 'Backup', type: 'contentWidget', icon: 'bx-data' },
|
||||||
{ id: 'optionsSync', title: 'Sync', type: 'contentWidget', icon: 'bx-wifi' },
|
{ id: '_optionsSync', title: 'Sync', type: 'contentWidget', icon: 'bx-wifi' },
|
||||||
{ id: 'optionsOther', title: 'Other', type: 'contentWidget', icon: 'bx-dots-horizontal' },
|
{ id: '_optionsOther', title: 'Other', type: 'contentWidget', icon: 'bx-dots-horizontal' },
|
||||||
{ id: 'optionsAdvanced', title: 'Advanced', type: 'contentWidget' }
|
{ id: '_optionsAdvanced', title: 'Advanced', type: 'contentWidget' }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -231,9 +231,9 @@ function checkHiddenSubtreeRecursively(parentNoteId, item) {
|
|||||||
throw new Error(`Item does not contain mandatory properties: ${JSON.stringify(item)}`);
|
throw new Error(`Item does not contain mandatory properties: ${JSON.stringify(item)}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (item.id.charAt(0) !== '_') {
|
if (item.id.charAt(0) !== '_') {
|
||||||
// throw new Error("ID has to start with underscore");
|
throw new Error(`ID has to start with underscore, given '${item.id}'`);
|
||||||
// }
|
}
|
||||||
|
|
||||||
let note = becca.notes[item.id];
|
let note = becca.notes[item.id];
|
||||||
let branch = becca.branches[item.id];
|
let branch = becca.branches[item.id];
|
||||||
@ -311,5 +311,13 @@ function checkHiddenSubtreeRecursively(parentNoteId, item) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
checkHiddenSubtree
|
checkHiddenSubtree,
|
||||||
|
LBTPL_ROOT,
|
||||||
|
LBTPL_BASE,
|
||||||
|
LBTPL_COMMAND,
|
||||||
|
LBTPL_NOTE_LAUNCHER,
|
||||||
|
LBTPL_SCRIPT,
|
||||||
|
LBTPL_BUILTIN_WIDGET,
|
||||||
|
LBTPL_SPACER,
|
||||||
|
LBTPL_CUSTOM_WIDGET
|
||||||
};
|
};
|
||||||
|
@ -10,7 +10,7 @@ function isHoistedInHiddenSubtree() {
|
|||||||
|
|
||||||
if (hoistedNoteId === 'root') {
|
if (hoistedNoteId === 'root') {
|
||||||
return false;
|
return false;
|
||||||
} else if (hoistedNoteId === 'hidden') {
|
} else if (hoistedNoteId === '_hidden') {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -20,7 +20,7 @@ function isHoistedInHiddenSubtree() {
|
|||||||
throw new Error(`Cannot find hoisted note ${hoistedNoteId}`);
|
throw new Error(`Cannot find hoisted note ${hoistedNoteId}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
return hoistedNote.hasAncestor('hidden');
|
return hoistedNote.hasAncestor('_hidden');
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
@ -104,11 +104,11 @@ function getAndValidateParent(params) {
|
|||||||
throw new ValidationError(`Creating child notes into launcher notes is not allowed.`);
|
throw new ValidationError(`Creating child notes into launcher notes is not allowed.`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (['lbAvailableLaunchers', 'lbVisibleLaunchers'].includes(params.parentNoteId) && params.type !== 'launcher') {
|
if (['_lbAvailableLaunchers', '_lbVisibleLaunchers'].includes(params.parentNoteId) && params.type !== 'launcher') {
|
||||||
throw new ValidationError(`Only 'launcher' notes can be created in parent '${params.parentNoteId}'`);
|
throw new ValidationError(`Only 'launcher' notes can be created in parent '${params.parentNoteId}'`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!params.ignoreForbiddenParents && (['lbRoot', 'hidden'].includes(parentNote.noteId) || parentNote.isOptions())) {
|
if (!params.ignoreForbiddenParents && (['_lbRoot', '_hidden'].includes(parentNote.noteId) || parentNote.isOptions())) {
|
||||||
throw new ValidationError(`Creating child notes into '${parentNote.noteId}' is not allowed.`);
|
throw new ValidationError(`Creating child notes into '${parentNote.noteId}' is not allowed.`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,7 +165,7 @@ function findResultsWithExpression(expression, searchContext) {
|
|||||||
throw new Error(`Can't find note path for note ${JSON.stringify(note.getPojo())}`);
|
throw new Error(`Can't find note path for note ${JSON.stringify(note.getPojo())}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (notePathArray.includes("hidden")) {
|
if (notePathArray.includes('_hidden')) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,8 +6,9 @@ const cls = require("./cls");
|
|||||||
const dateUtils = require("./date_utils");
|
const dateUtils = require("./date_utils");
|
||||||
const log = require("./log");
|
const log = require("./log");
|
||||||
const hiddenSubtreeService = require("./hidden_subtree");
|
const hiddenSubtreeService = require("./hidden_subtree");
|
||||||
const searchService = require("./search/services/search.js");
|
const searchService = require("./search/services/search");
|
||||||
const SearchContext = require("./search/search_context.js");
|
const SearchContext = require("./search/search_context");
|
||||||
|
const {LBTPL_NOTE_LAUNCHER, LBTPL_CUSTOM_WIDGET, LBTPL_SPACER, LBTPL_SCRIPT} = require("./hidden_subtree");
|
||||||
|
|
||||||
function getInboxNote(date) {
|
function getInboxNote(date) {
|
||||||
const hoistedNote = getHoistedNote();
|
const hoistedNote = getHoistedNote();
|
||||||
@ -35,14 +36,14 @@ function getInboxNote(date) {
|
|||||||
|
|
||||||
function createSqlConsole() {
|
function createSqlConsole() {
|
||||||
const {note} = noteService.createNewNote({
|
const {note} = noteService.createNewNote({
|
||||||
parentNoteId: getMonthlyParentNoteId('sqlConsole'),
|
parentNoteId: getMonthlyParentNoteId('_sqlConsole'),
|
||||||
title: 'SQL Console',
|
title: 'SQL Console',
|
||||||
content: "SELECT title, isDeleted, isProtected FROM notes WHERE noteId = ''\n\n\n\n",
|
content: "SELECT title, isDeleted, isProtected FROM notes WHERE noteId = ''\n\n\n\n",
|
||||||
type: 'code',
|
type: 'code',
|
||||||
mime: 'text/x-sqlite;schema=trilium'
|
mime: 'text/x-sqlite;schema=trilium'
|
||||||
});
|
});
|
||||||
|
|
||||||
note.setLabel("sqlConsole", dateUtils.localNowDate());
|
note.setLabel('_sqlConsole', dateUtils.localNowDate());
|
||||||
note.setLabel('iconClass', 'bx bx-data');
|
note.setLabel('iconClass', 'bx bx-data');
|
||||||
note.setLabel('keepCurrentHoisting');
|
note.setLabel('keepCurrentHoisting');
|
||||||
|
|
||||||
@ -60,7 +61,7 @@ function saveSqlConsole(sqlConsoleNoteId) {
|
|||||||
const result = sqlConsoleNote.cloneTo(sqlConsoleHome.noteId);
|
const result = sqlConsoleNote.cloneTo(sqlConsoleHome.noteId);
|
||||||
|
|
||||||
for (const parentBranch of sqlConsoleNote.getParentBranches()) {
|
for (const parentBranch of sqlConsoleNote.getParentBranches()) {
|
||||||
if (parentBranch.parentNote.hasAncestor("hidden")) {
|
if (parentBranch.parentNote.hasAncestor('_hidden')) {
|
||||||
parentBranch.markAsDeleted();
|
parentBranch.markAsDeleted();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -70,7 +71,7 @@ function saveSqlConsole(sqlConsoleNoteId) {
|
|||||||
|
|
||||||
function createSearchNote(searchString, ancestorNoteId) {
|
function createSearchNote(searchString, ancestorNoteId) {
|
||||||
const {note} = noteService.createNewNote({
|
const {note} = noteService.createNewNote({
|
||||||
parentNoteId: getMonthlyParentNoteId('search'),
|
parentNoteId: getMonthlyParentNoteId('_search'),
|
||||||
title: `Search: ${searchString}`,
|
title: `Search: ${searchString}`,
|
||||||
content: "",
|
content: "",
|
||||||
type: 'search',
|
type: 'search',
|
||||||
@ -109,7 +110,7 @@ function saveSearchNote(searchNoteId) {
|
|||||||
const result = searchNote.cloneTo(searchHome.noteId);
|
const result = searchNote.cloneTo(searchHome.noteId);
|
||||||
|
|
||||||
for (const parentBranch of searchNote.getParentBranches()) {
|
for (const parentBranch of searchNote.getParentBranches()) {
|
||||||
if (parentBranch.parentNote.hasAncestor("hidden")) {
|
if (parentBranch.parentNote.hasAncestor('_hidden')) {
|
||||||
parentBranch.markAsDeleted();
|
parentBranch.markAsDeleted();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -152,7 +153,7 @@ function createScriptLauncher(parentNoteId, forceNoteId = null) {
|
|||||||
parentNoteId: parentNoteId
|
parentNoteId: parentNoteId
|
||||||
}).note;
|
}).note;
|
||||||
|
|
||||||
note.addRelation('template', 'lbTplScriptLauncher');
|
note.addRelation('template', LBTPL_SCRIPT);
|
||||||
return note;
|
return note;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,7 +168,7 @@ function createLauncher(parentNoteId, launcherType) {
|
|||||||
parentNoteId: parentNoteId
|
parentNoteId: parentNoteId
|
||||||
}).note;
|
}).note;
|
||||||
|
|
||||||
note.addRelation('template', 'lbTplNoteLauncher');
|
note.addRelation('template', LBTPL_NOTE_LAUNCHER);
|
||||||
} else if (launcherType === 'script') {
|
} else if (launcherType === 'script') {
|
||||||
note = createScriptLauncher(parentNoteId);
|
note = createScriptLauncher(parentNoteId);
|
||||||
} else if (launcherType === 'customWidget') {
|
} else if (launcherType === 'customWidget') {
|
||||||
@ -178,7 +179,7 @@ function createLauncher(parentNoteId, launcherType) {
|
|||||||
parentNoteId: parentNoteId
|
parentNoteId: parentNoteId
|
||||||
}).note;
|
}).note;
|
||||||
|
|
||||||
note.addRelation('template', 'lbTplCustomWidget');
|
note.addRelation('template', LBTPL_CUSTOM_WIDGET);
|
||||||
} else if (launcherType === 'spacer') {
|
} else if (launcherType === 'spacer') {
|
||||||
note = noteService.createNewNote({
|
note = noteService.createNewNote({
|
||||||
title: "Spacer",
|
title: "Spacer",
|
||||||
@ -187,7 +188,7 @@ function createLauncher(parentNoteId, launcherType) {
|
|||||||
parentNoteId: parentNoteId
|
parentNoteId: parentNoteId
|
||||||
}).note;
|
}).note;
|
||||||
|
|
||||||
note.addRelation('template', 'lbTplSpacer');
|
note.addRelation('template', LBTPL_SPACER);
|
||||||
} else {
|
} else {
|
||||||
throw new Error(`Unrecognized launcher type '${launcherType}'`);
|
throw new Error(`Unrecognized launcher type '${launcherType}'`);
|
||||||
}
|
}
|
||||||
@ -203,7 +204,7 @@ function resetLauncher(noteId) {
|
|||||||
|
|
||||||
if (note.isLauncherConfig()) {
|
if (note.isLauncherConfig()) {
|
||||||
if (note) {
|
if (note) {
|
||||||
if (noteId === 'lbRoot') {
|
if (noteId === '_lbRoot') {
|
||||||
// deleting hoisted notes are not allowed, so we just reset the children
|
// deleting hoisted notes are not allowed, so we just reset the children
|
||||||
for (const childNote of note.getChildNotes()) {
|
for (const childNote of note.getChildNotes()) {
|
||||||
childNote.deleteNote();
|
childNote.deleteNote();
|
||||||
@ -241,7 +242,7 @@ function createOrUpdateScriptLauncherFromApi(opts) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const launcherNote = becca.getNote(launcherId)
|
const launcherNote = becca.getNote(launcherId)
|
||||||
|| createScriptLauncher('lbVisibleLaunchers', launcherId);
|
|| createScriptLauncher('_lbVisibleLaunchers', launcherId);
|
||||||
|
|
||||||
launcherNote.title = opts.title;
|
launcherNote.title = opts.title;
|
||||||
launcherNote.setContent(`(${opts.action})()`);
|
launcherNote.setContent(`(${opts.action})()`);
|
||||||
|
@ -30,7 +30,7 @@ function getNotes(noteIds) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function validateParentChild(parentNoteId, childNoteId, branchId = null) {
|
function validateParentChild(parentNoteId, childNoteId, branchId = null) {
|
||||||
if (['root', 'hidden', 'share', 'lbRoot', 'lbAvailableLaunchers', 'lbVisibleLaunchers'].includes(childNoteId)) {
|
if (['root', '_hidden', '_share', '_lbRoot', '_lbAvailableLaunchers', '_lbVisibleLaunchers'].includes(childNoteId)) {
|
||||||
return { success: false, message: `Cannot change this note's location.`};
|
return { success: false, message: `Cannot change this note's location.`};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -187,7 +187,7 @@ function sortNotes(parentNoteId, customSortBy = 'title', reverse = false, folder
|
|||||||
for (const note of notes) {
|
for (const note of notes) {
|
||||||
const branch = note.getParentBranches().find(b => b.parentNoteId === parentNoteId);
|
const branch = note.getParentBranches().find(b => b.parentNoteId === parentNoteId);
|
||||||
|
|
||||||
if (branch.branchId === 'hidden') {
|
if (branch.branchId === '_hidden') {
|
||||||
position = 999_999_999;
|
position = 999_999_999;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ function checkNoteAccess(noteId, req, res) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (noteId === 'share' && !shaca.shareIndexEnabled) {
|
if (noteId === '_share' && !shaca.shareIndexEnabled) {
|
||||||
res.status(403)
|
res.status(403)
|
||||||
.json({ message: `Accessing share index is forbidden.` });
|
.json({ message: `Accessing share index is forbidden.` });
|
||||||
|
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
SHARE_ROOT_NOTE_ID: 'share'
|
SHARE_ROOT_NOTE_ID: '_share'
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
<body data-note-id="<%= note.noteId %>">
|
<body data-note-id="<%= note.noteId %>">
|
||||||
<div id="layout">
|
<div id="layout">
|
||||||
<div id="main">
|
<div id="main">
|
||||||
<% if (note.parents[0].noteId !== 'share' && note.parents.length !== 0) { %>
|
<% if (note.parents[0].noteId !== '_share' && note.parents.length !== 0) { %>
|
||||||
<nav id="parentLink">
|
<nav id="parentLink">
|
||||||
parent: <a href="<%= note.parents[0].shareId %>"
|
parent: <a href="<%= note.parents[0].shareId %>"
|
||||||
class="type-<%= note.parents[0].type %>"><%= note.parents[0].title %></a>
|
class="type-<%= note.parents[0].type %>"><%= note.parents[0].title %></a>
|
||||||
|
@ -33,12 +33,12 @@ Content-Type: application/json
|
|||||||
{
|
{
|
||||||
"branchId": "forcedClonedId",
|
"branchId": "forcedClonedId",
|
||||||
"noteId": "{{createdNoteId}}",
|
"noteId": "{{createdNoteId}}",
|
||||||
"parentNoteId": "hidden"
|
"parentNoteId": '_hidden'
|
||||||
}
|
}
|
||||||
|
|
||||||
> {%
|
> {%
|
||||||
client.assert(response.status === 201);
|
client.assert(response.status === 201);
|
||||||
client.assert(response.body.parentNoteId == "hidden");
|
client.assert(response.body.parentNoteId == '_hidden');
|
||||||
|
|
||||||
client.global.set("clonedBranchId", response.body.branchId);
|
client.global.set("clonedBranchId", response.body.branchId);
|
||||||
|
|
||||||
@ -88,7 +88,7 @@ Authorization: {{authToken}}
|
|||||||
> {%
|
> {%
|
||||||
client.assert(response.status === 200);
|
client.assert(response.status === 200);
|
||||||
client.assert(response.body.branchId == client.global.get("clonedBranchId"));
|
client.assert(response.body.branchId == client.global.get("clonedBranchId"));
|
||||||
client.assert(response.body.parentNoteId == "hidden");
|
client.assert(response.body.parentNoteId == '_hidden');
|
||||||
%}
|
%}
|
||||||
|
|
||||||
###
|
###
|
||||||
|
@ -22,7 +22,7 @@ Content-Type: application/json
|
|||||||
|
|
||||||
{
|
{
|
||||||
"noteId": "{{createdNoteId}}",
|
"noteId": "{{createdNoteId}}",
|
||||||
"parentNoteId": "hidden"
|
"parentNoteId": '_hidden'
|
||||||
}
|
}
|
||||||
|
|
||||||
> {% client.global.set("clonedBranchId", response.body.branchId); %}
|
> {% client.global.set("clonedBranchId", response.body.branchId); %}
|
||||||
|
@ -38,7 +38,7 @@ Content-Type: application/json
|
|||||||
|
|
||||||
{
|
{
|
||||||
"noteId": "{{createdNoteId}}",
|
"noteId": "{{createdNoteId}}",
|
||||||
"parentNoteId": "hidden"
|
"parentNoteId": '_hidden'
|
||||||
}
|
}
|
||||||
|
|
||||||
> {% client.global.set("clonedBranchId", response.body.branchId); %}
|
> {% client.global.set("clonedBranchId", response.body.branchId); %}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user