sidebar POC WIP

This commit is contained in:
zadam 2019-07-24 22:52:51 +02:00
parent a06bd877c9
commit b488adc330
7 changed files with 151 additions and 15657 deletions

File diff suppressed because one or more lines are too long

193
package-lock.json generated
View File

@ -77,6 +77,42 @@
}
}
},
"@develar/schema-utils": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.1.0.tgz",
"integrity": "sha512-qjCqB4ctMig9Gz5bd6lkdFr3bO6arOdQqptdBSpF1ZpCnjofieCciEzkoS9ujY9cMGyllYSCSmBJ3x9OKHXzoA==",
"dev": true,
"requires": {
"ajv": "^6.1.0",
"ajv-keywords": "^3.1.0"
},
"dependencies": {
"ajv": {
"version": "6.10.2",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
"integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
"dev": true,
"requires": {
"fast-deep-equal": "^2.0.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"fast-deep-equal": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
"integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
"dev": true
},
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
}
}
},
"@electron/get": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/@electron/get/-/get-1.3.1.tgz",
@ -770,26 +806,27 @@
"integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg=="
},
"app-builder-bin": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-3.4.0.tgz",
"integrity": "sha512-ZyQqfFnyjAmXep29PmuMIu2KvGlfHiziz2/I38zOFe5kqnkMqeNNn/qmnwD6wdCKKeHqBuZtoWQnft8q0YyLpw==",
"version": "3.4.2",
"resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-3.4.2.tgz",
"integrity": "sha512-E9VvUrZm60oLl0rvLw/ErvZiEOIHkulZbJ9C9TWMD4ftNrkXFc2+a5JGlD19Bwvj329d4qz91zs/hWD01q18TQ==",
"dev": true
},
"app-builder-lib": {
"version": "21.1.1",
"resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-21.1.1.tgz",
"integrity": "sha512-nG5w9xjv4c16ki+pyBPqJvUCtQY97XQNsA4dEBryq6vClwDTkwKrl7aS0cXjo3dsWKsf/5EIcLrV0tfIiXUqJA==",
"version": "21.1.5",
"resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-21.1.5.tgz",
"integrity": "sha512-hLsSVSstMTq33a9jbBStrF0e+fa6eWXWIpsatPvHnJlkjx7dAZ5d2cZPe/1bAO3bCL3afpRl5j+HU853eGfDCg==",
"dev": true,
"requires": {
"7zip-bin": "~5.0.3",
"@develar/schema-utils": "~2.1.0",
"async-exit-hook": "^2.0.1",
"bluebird-lst": "^1.0.9",
"builder-util": "21.1.1",
"builder-util": "21.1.5",
"builder-util-runtime": "8.3.0",
"chromium-pickle-js": "^0.2.0",
"debug": "^4.1.1",
"ejs": "^2.6.2",
"electron-publish": "21.1.1",
"electron-publish": "21.1.5",
"fs-extra": "^8.1.0",
"hosted-git-info": "^2.7.1",
"is-ci": "^2.0.0",
@ -798,9 +835,9 @@
"lazy-val": "^1.0.4",
"minimatch": "^3.0.4",
"normalize-package-data": "^2.5.0",
"read-config-file": "4.0.1",
"read-config-file": "5.0.0",
"sanitize-filename": "^1.6.1",
"semver": "^6.2.0",
"semver": "^6.3.0",
"temp-file": "^3.3.4"
},
"dependencies": {
@ -1577,14 +1614,14 @@
}
},
"builder-util": {
"version": "21.1.1",
"resolved": "https://registry.npmjs.org/builder-util/-/builder-util-21.1.1.tgz",
"integrity": "sha512-+t6pbMo/COTYDfqfRDrWDi9tuPxBctb0S9PVt8Kgd+K0eqD1lvbF05rrkiQpXIrhb6cndXgcl3FG18Oqgy5YPg==",
"version": "21.1.5",
"resolved": "https://registry.npmjs.org/builder-util/-/builder-util-21.1.5.tgz",
"integrity": "sha512-RBr06OnoTKTkg0W7Om2dnuKe8I82CiciU9EdsNnLO8DAfH0ZVCPsVpc3qYmr7g/7cH3zXA3yyQP73QDGNpbVYQ==",
"dev": true,
"requires": {
"7zip-bin": "~5.0.3",
"@types/debug": "^4.1.4",
"app-builder-bin": "3.4.0",
"app-builder-bin": "3.4.2",
"bluebird-lst": "^1.0.9",
"builder-util-runtime": "8.3.0",
"chalk": "^2.4.2",
@ -2243,9 +2280,9 @@
}
},
"content-security-policy-builder": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-2.0.0.tgz",
"integrity": "sha512-j+Nhmj1yfZAikJLImCvPJFE29x/UuBi+/MWqggGGc515JKaZrjuei2RhULJmy0MsstW3E3htl002bwmBNMKr7w=="
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-2.1.0.tgz",
"integrity": "sha512-/MtLWhJVvJNkA9dVLAp6fg9LxD2gfI6R2Fi1hPmfjYXSahJJzcfvoeDOxSyp4NvxMuwWv3WMssE9o31DoULHrQ=="
},
"content-type": {
"version": "1.0.4",
@ -2869,18 +2906,17 @@
}
},
"dmg-builder": {
"version": "21.1.1",
"resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-21.1.1.tgz",
"integrity": "sha512-WsafJ+LkG20ddVfKfNlJC6AMRKTvLMJhAwAmBHzb+KWhMZVs9/3QY2yd2BIpvWYRfUD/lWd+LmclTNWw7540Cw==",
"version": "21.1.5",
"resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-21.1.5.tgz",
"integrity": "sha512-o9rZua7mzNzZIo9SZJi57ZXe4zjNaajxEJ0LO/8k2z8Q2CL57RIaJZ95sA6G0dC1/g5Gm4cmW3O5nv9Ur8Ayow==",
"dev": true,
"requires": {
"app-builder-lib": "~21.1.1",
"app-builder-lib": "~21.1.5",
"bluebird-lst": "^1.0.9",
"builder-util": "~21.1.1",
"builder-util": "~21.1.5",
"fs-extra": "^8.1.0",
"iconv-lite": "^0.5.0",
"js-yaml": "^3.13.1",
"parse-color": "^1.0.0",
"sanitize-filename": "^1.6.1"
},
"dependencies": {
@ -3088,21 +3124,21 @@
}
},
"electron-builder": {
"version": "21.1.1",
"resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-21.1.1.tgz",
"integrity": "sha512-4A3h0dhqSranoX7cM0eqkzABeHABH9Nch12003XIZ9MUPV4jL97nK5WBbbVG06qglYTV9x62XAqPPDS+KBOsEg==",
"version": "21.1.5",
"resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-21.1.5.tgz",
"integrity": "sha512-2tEgBESGWQ661dC9/rZlpbtmhlofoNPwnkO6KUuCZUBYpFMRvpMzH2IF7vQYsCst78yxnrV0CtiBePhM1i+DfA==",
"dev": true,
"requires": {
"app-builder-lib": "21.1.1",
"app-builder-lib": "21.1.5",
"bluebird-lst": "^1.0.9",
"builder-util": "21.1.1",
"builder-util": "21.1.5",
"builder-util-runtime": "8.3.0",
"chalk": "^2.4.2",
"dmg-builder": "21.1.1",
"dmg-builder": "21.1.5",
"fs-extra": "^8.1.0",
"is-ci": "^2.0.0",
"lazy-val": "^1.0.4",
"read-config-file": "4.0.1",
"read-config-file": "5.0.0",
"sanitize-filename": "^1.6.1",
"update-notifier": "^3.0.1",
"yargs": "^13.3.0"
@ -3372,15 +3408,15 @@
"dev": true
},
"package-json": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/package-json/-/package-json-6.4.0.tgz",
"integrity": "sha512-bd1T8OBG7hcvMd9c/udgv6u5v9wISP3Oyl9Cm7Weop8EFwrtcQDnS2sb6zhwqus2WslSr5wSTIPiTTpxxmPm7Q==",
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz",
"integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==",
"dev": true,
"requires": {
"got": "^9.6.0",
"registry-auth-token": "^3.4.0",
"registry-auth-token": "^4.0.0",
"registry-url": "^5.0.0",
"semver": "^6.1.1"
"semver": "^6.2.0"
}
},
"prepend-http": {
@ -3390,12 +3426,12 @@
"dev": true
},
"registry-auth-token": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz",
"integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.0.0.tgz",
"integrity": "sha512-lpQkHxd9UL6tb3k/aHAVfnVtn+Bcs9ob5InuFLLEDqSqeq+AljB8GZW9xY0x7F+xYwEcjKe07nyoxzEYz6yvkw==",
"dev": true,
"requires": {
"rc": "^1.1.6",
"rc": "^1.2.8",
"safe-buffer": "^5.0.1"
}
},
@ -3901,13 +3937,13 @@
}
},
"electron-publish": {
"version": "21.1.1",
"resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-21.1.1.tgz",
"integrity": "sha512-cM5XLFolIB5NnVpBKewcUM3Ggg+wm+LeKRYHjcB9ri58cbPKxaN+fRUXAZs3m1U9t7SIgjZy83sUSi3asxMXgQ==",
"version": "21.1.5",
"resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-21.1.5.tgz",
"integrity": "sha512-EgFxZJBrb+EBUcEwg8RNKouoBaOEpACnjLi+ipUsk72x+/6kzhcofAYBchIkGns7meengoXy7QdoiThgpr6rew==",
"dev": true,
"requires": {
"bluebird-lst": "^1.0.9",
"builder-util": "~21.1.1",
"builder-util": "~21.1.5",
"builder-util-runtime": "8.3.0",
"chalk": "^2.4.2",
"fs-extra": "^8.1.0",
@ -6488,9 +6524,9 @@
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
},
"helmet": {
"version": "3.19.0",
"resolved": "https://registry.npmjs.org/helmet/-/helmet-3.19.0.tgz",
"integrity": "sha512-l58Q3unSpYatlurvFzkCbTRQ8oWUmdXbOs7h+pnwQbFJRhRJDjER6UMyqHxp9iFtWPcVA05VLcUGSi0EXIv7GA==",
"version": "3.20.0",
"resolved": "https://registry.npmjs.org/helmet/-/helmet-3.20.0.tgz",
"integrity": "sha512-Ob+TqmQFZ5f7WgP8kBbAzNPsbf6p1lOj5r+327/ymw/IILWih3wcx9u/u/S8Mwv5wbBkO7Li6x5s23t3COhUKw==",
"requires": {
"depd": "2.0.0",
"dns-prefetch-control": "0.2.0",
@ -6499,7 +6535,7 @@
"feature-policy": "0.3.0",
"frameguard": "3.1.0",
"helmet-crossdomain": "0.4.0",
"helmet-csp": "2.7.1",
"helmet-csp": "2.8.0",
"hide-powered-by": "1.1.0",
"hpkp": "2.0.0",
"hsts": "2.2.0",
@ -6522,12 +6558,12 @@
"integrity": "sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA=="
},
"helmet-csp": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.7.1.tgz",
"integrity": "sha512-sCHwywg4daQ2mY0YYwXSZRsgcCeerUwxMwNixGA7aMLkVmPTYBl7gJoZDHOZyXkqPrtuDT3s2B1A+RLI7WxSdQ==",
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.8.0.tgz",
"integrity": "sha512-MlCPeM0Sm3pS9RACRihx70VeTHmkQwa7sum9EK1tfw1VZyvFU0dBWym9nHh3CRkTRNlyNm/WFCMvuh9zXkOjNw==",
"requires": {
"camelize": "1.0.0",
"content-security-policy-builder": "2.0.0",
"content-security-policy-builder": "2.1.0",
"dasherize": "2.0.0",
"platform": "1.3.5"
}
@ -9701,23 +9737,6 @@
"xml2js": "^0.4.5"
}
},
"parse-color": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/parse-color/-/parse-color-1.0.0.tgz",
"integrity": "sha1-e3SLlag/A/FqlPU15S1/PZRlhhk=",
"dev": true,
"requires": {
"color-convert": "~0.5.0"
},
"dependencies": {
"color-convert": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz",
"integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=",
"dev": true
}
}
},
"parse-glob": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
@ -10875,13 +10894,11 @@
}
},
"read-config-file": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-4.0.1.tgz",
"integrity": "sha512-5caED3uo2IAZMPcbh/9hx/O29s2430RLxtnFDdzxpH/epEpawOrQnGBHueotIXUrGPPIgdNQN+S/CIp2WmiSfw==",
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-5.0.0.tgz",
"integrity": "sha512-jIKUu+C84bfnKxyJ5j30CxCqgXWYjZLXuVE/NYlMEpeni+dhESgAeZOZd0JZbg1xTkMmnCdxksDoarkOyfEsOg==",
"dev": true,
"requires": {
"ajv": "^6.10.1",
"ajv-keywords": "^3.4.1",
"dotenv": "^8.0.0",
"dotenv-expand": "^5.1.0",
"fs-extra": "^8.1.0",
@ -10890,30 +10907,12 @@
"lazy-val": "^1.0.4"
},
"dependencies": {
"ajv": {
"version": "6.10.2",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
"integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
"dev": true,
"requires": {
"fast-deep-equal": "^2.0.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true
},
"fast-deep-equal": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
"integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
"dev": true
},
"js-yaml": {
"version": "3.13.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
@ -10923,12 +10922,6 @@
"argparse": "^1.0.7",
"esprima": "^4.0.0"
}
},
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
}
}
},
@ -11424,9 +11417,9 @@
}
},
"semver": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz",
"integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A=="
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
},
"semver-diff": {
"version": "2.1.0",

View File

@ -40,7 +40,7 @@
"express-session": "1.16.2",
"file-type": "12.0.1",
"fs-extra": "8.1.0",
"helmet": "3.19.0",
"helmet": "3.20.0",
"html": "1.0.0",
"html2plaintext": "2.1.2",
"http-proxy-agent": "^2.1.0",
@ -64,7 +64,7 @@
"rimraf": "2.6.3",
"sanitize-filename": "1.6.1",
"sax": "1.2.4",
"semver": "6.2.0",
"semver": "6.3.0",
"serve-favicon": "2.5.0",
"session-file-store": "1.3.1",
"simple-node-logger": "18.12.23",
@ -79,7 +79,7 @@
"devDependencies": {
"devtron": "1.4.0",
"electron": "6.0.0-beta.14",
"electron-builder": "21.1.1",
"electron-builder": "21.1.5",
"electron-compile": "6.4.4",
"electron-installer-debian": "2.0.0",
"electron-packager": "14.0.2",

View File

@ -3,12 +3,12 @@ import LinkMapWidget from "../widgets/link_map.js";
const WIDGET_TPL = `
<div class="card widget">
<div class="card-header">
<h5 class="mb-0">
<button class="btn btn-sm widget-title" data-toggle="collapse" data-target="#collapseOne">
Collapsible Group Item
</button>
</h5>
<div class="card-header">
<button class="btn btn-sm widget-title" data-toggle="collapse" data-target="#collapseOne">
Collapsible Group Item
</button>
<div class="widget-header-actions"></div>
</div>
<div id="collapseOne" class="collapse show body-wrapper">

View File

@ -1,4 +1,5 @@
import libraryLoader from "../services/library_loader.js";
import linkMapDialog from "../dialogs/link_map.js";
import server from "../services/server.js";
import treeCache from "../services/tree_cache.js";
import linkService from "../services/link.js";
@ -31,6 +32,14 @@ class LinkMapWidget {
this.$widget = $widget;
this.$title = this.$widget.find('.widget-title');
this.$title.text("Link map");
this.$headerActions = this.$widget.find('.widget-header-actions');
const $showFullButton = $("<a>").append("show full").addClass('widget-header-action');
$showFullButton.click(() => {
linkMapDialog.showDialog();
});
this.$headerActions.append($showFullButton);
}
async renderBody() {
@ -61,7 +70,8 @@ class LinkMapWidget {
const links = await server.post(`notes/${noteId}/link-map`, {
linkTypes,
maxNotes
maxNotes,
maxDepth: 1
});
const noteIds = new Set(links.map(l => l.noteId).concat(links.map(l => l.targetNoteId)));
@ -190,7 +200,7 @@ class LinkMapWidget {
this.$linkMapContainer.empty();
// reset zoom/pan
this.pzInstance.zoomTo(0, 0, 0.5);
this.pzInstance.zoomTo(0, 0, 0.7);
this.pzInstance.moveTo(0, 0);
}

View File

@ -123,30 +123,36 @@ ul.fancytree-container {
font-size: 90%;
}
.note-detail-sidebar .widget-title {
width: 100%;
border-radius: 0;
padding: 0;
border-left: 0;
border-right: 0;
}
.note-detail-sidebar .card {
border: 0;
}
.note-detail-sidebar .card-header {
background: inherit;
padding: 5px;
width: 100%;
background-color: var(--button-background-color);
border-color: var(--button-border-color);
border-width: 1px 0 1px 0;
border-style: solid;
display: flex;
justify-content: space-between;
}
.note-detail-sidebar .widget-title {
border-radius: 0;
padding: 0;
border: 0;
background: inherit;
font-weight: bold;
}
.note-detail-sidebar .card-header button {
.note-detail-sidebar .widget-header-actions {
}
.note-detail-sidebar .card-header h5 {
font-size: 1rem;
.note-detail-sidebar .widget-header-action {
color: var(--link-color) !important;
cursor: pointer;
}
.note-detail-sidebar .card-body {

View File

@ -19,14 +19,21 @@ async function getLinks(noteIds, linkTypes) {
async function getLinkMap(req) {
const {noteId} = req.params;
const {linkTypes, maxNotes} = req.body;
const {linkTypes, maxNotes, maxDepth} = req.body;
let noteIds = new Set([noteId]);
let links = [];
let depth = 0;
while (true) {
const newLinks = await getLinks(noteIds, linkTypes);
const newNoteIds = new Set(newLinks.map(l => l.noteId).concat(newLinks.map(l => l.targetNoteId)));
links = await getLinks(noteIds, linkTypes);
if (depth === maxDepth) {
break;
}
const newNoteIds = new Set(links.map(l => l.noteId).concat(links.map(l => l.targetNoteId)));
if (newNoteIds.size === noteIds.size) {
// no new note discovered, no need to search any further
@ -39,7 +46,8 @@ async function getLinkMap(req) {
}
noteIds = newNoteIds;
links = newLinks;
depth++;
}
// keep only links coming from and targetting some note in the noteIds set