mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-30 18:05:55 +01:00 
			
		
		
		
	UI for search actions (WIP)
This commit is contained in:
		
							
								
								
									
										265
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										265
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -874,6 +874,12 @@ | |||||||
|         "@xtuc/long": "4.2.2" |         "@xtuc/long": "4.2.2" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "@webpack-cli/configtest": { | ||||||
|  |       "version": "1.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.0.tgz", | ||||||
|  |       "integrity": "sha512-Un0SdBoN1h4ACnIO7EiCjWuyhNI0Jl96JC+63q6xi4HDUYRZn8Auluea9D+v9NWKc5J4sICVEltdBaVjLX39xw==", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|     "@webpack-cli/info": { |     "@webpack-cli/info": { | ||||||
|       "version": "1.2.1", |       "version": "1.2.1", | ||||||
|       "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.1.tgz", |       "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.1.tgz", | ||||||
| @@ -884,9 +890,9 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "@webpack-cli/serve": { |     "@webpack-cli/serve": { | ||||||
|       "version": "1.2.1", |       "version": "1.2.2", | ||||||
|       "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.2.1.tgz", |       "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.2.2.tgz", | ||||||
|       "integrity": "sha512-Zj1z6AyS+vqV6Hfi7ngCjFGdHV5EwZNIHo6QfFTNe9PyW+zBU1zJ9BiOW1pmUEq950RC4+Dym6flyA/61/vhyw==", |       "integrity": "sha512-03GkWxcgFfm8+WIwcsqJb9agrSDNDDoxaNnexPnCCexP5SCE4IgFd9lNpSy+K2nFqVMpgTFw6SwbmVAVTndVew==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|     "@xtuc/ieee754": { |     "@xtuc/ieee754": { | ||||||
| @@ -1763,9 +1769,9 @@ | |||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|     "caniuse-lite": { |     "caniuse-lite": { | ||||||
|       "version": "1.0.30001177", |       "version": "1.0.30001178", | ||||||
|       "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001177.tgz", |       "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001178.tgz", | ||||||
|       "integrity": "sha512-6Ld7t3ifCL02jTj3MxPMM5wAYjbo4h/TAQGFTgv1inihP1tWnWp8mxxT4ut4JBEHLbpFXEXJJQ119JCJTBkYDw==", |       "integrity": "sha512-VtdZLC0vsXykKni8Uztx45xynytOi71Ufx9T8kHptSw9AL4dpqailUJJHavttuzUe1KYuBYtChiWv+BAb7mPmQ==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|     "caseless": { |     "caseless": { | ||||||
| @@ -1917,6 +1923,28 @@ | |||||||
|       "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", |       "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "clone-deep": { | ||||||
|  |       "version": "4.0.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", | ||||||
|  |       "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "is-plain-object": "^2.0.4", | ||||||
|  |         "kind-of": "^6.0.2", | ||||||
|  |         "shallow-clone": "^3.0.0" | ||||||
|  |       }, | ||||||
|  |       "dependencies": { | ||||||
|  |         "is-plain-object": { | ||||||
|  |           "version": "2.0.4", | ||||||
|  |           "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", | ||||||
|  |           "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "isobject": "^3.0.1" | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "clone-response": { |     "clone-response": { | ||||||
|       "version": "1.0.2", |       "version": "1.0.2", | ||||||
|       "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", |       "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", | ||||||
| @@ -3698,31 +3726,40 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "find-up": { |     "find-up": { | ||||||
|       "version": "4.1.0", |       "version": "5.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", |       "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", | ||||||
|       "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", |       "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", | ||||||
|       "dev": true, |       "dev": true, | ||||||
|       "requires": { |       "requires": { | ||||||
|         "locate-path": "^5.0.0", |         "locate-path": "^6.0.0", | ||||||
|         "path-exists": "^4.0.0" |         "path-exists": "^4.0.0" | ||||||
|       }, |       }, | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "locate-path": { |         "locate-path": { | ||||||
|           "version": "5.0.0", |           "version": "6.0.0", | ||||||
|           "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", |           "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", | ||||||
|           "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", |           "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", | ||||||
|           "dev": true, |           "dev": true, | ||||||
|           "requires": { |           "requires": { | ||||||
|             "p-locate": "^4.1.0" |             "p-locate": "^5.0.0" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "p-limit": { | ||||||
|  |           "version": "3.1.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", | ||||||
|  |           "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "yocto-queue": "^0.1.0" | ||||||
|           } |           } | ||||||
|         }, |         }, | ||||||
|         "p-locate": { |         "p-locate": { | ||||||
|           "version": "4.1.0", |           "version": "5.0.0", | ||||||
|           "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", |           "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", | ||||||
|           "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", |           "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", | ||||||
|           "dev": true, |           "dev": true, | ||||||
|           "requires": { |           "requires": { | ||||||
|             "p-limit": "^2.2.0" |             "p-limit": "^3.0.2" | ||||||
|           } |           } | ||||||
|         }, |         }, | ||||||
|         "path-exists": { |         "path-exists": { | ||||||
| @@ -3792,29 +3829,29 @@ | |||||||
|       "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" |       "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" | ||||||
|     }, |     }, | ||||||
|     "fs-extra": { |     "fs-extra": { | ||||||
|       "version": "9.0.1", |       "version": "9.1.0", | ||||||
|       "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", |       "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", | ||||||
|       "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", |       "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", | ||||||
|       "requires": { |       "requires": { | ||||||
|         "at-least-node": "^1.0.0", |         "at-least-node": "^1.0.0", | ||||||
|         "graceful-fs": "^4.2.0", |         "graceful-fs": "^4.2.0", | ||||||
|         "jsonfile": "^6.0.1", |         "jsonfile": "^6.0.1", | ||||||
|         "universalify": "^1.0.0" |         "universalify": "^2.0.0" | ||||||
|       }, |       }, | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "jsonfile": { |         "jsonfile": { | ||||||
|           "version": "6.0.1", |           "version": "6.1.0", | ||||||
|           "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", |           "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", | ||||||
|           "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", |           "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", | ||||||
|           "requires": { |           "requires": { | ||||||
|             "graceful-fs": "^4.1.6", |             "graceful-fs": "^4.1.6", | ||||||
|             "universalify": "^1.0.0" |             "universalify": "^2.0.0" | ||||||
|           } |           } | ||||||
|         }, |         }, | ||||||
|         "universalify": { |         "universalify": { | ||||||
|           "version": "1.0.0", |           "version": "2.0.0", | ||||||
|           "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", |           "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", | ||||||
|           "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" |           "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
| @@ -4307,6 +4344,51 @@ | |||||||
|       "requires": { |       "requires": { | ||||||
|         "pkg-dir": "^4.2.0", |         "pkg-dir": "^4.2.0", | ||||||
|         "resolve-cwd": "^3.0.0" |         "resolve-cwd": "^3.0.0" | ||||||
|  |       }, | ||||||
|  |       "dependencies": { | ||||||
|  |         "find-up": { | ||||||
|  |           "version": "4.1.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", | ||||||
|  |           "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "locate-path": "^5.0.0", | ||||||
|  |             "path-exists": "^4.0.0" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "locate-path": { | ||||||
|  |           "version": "5.0.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", | ||||||
|  |           "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "p-locate": "^4.1.0" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "p-locate": { | ||||||
|  |           "version": "4.1.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", | ||||||
|  |           "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "p-limit": "^2.2.0" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "path-exists": { | ||||||
|  |           "version": "4.0.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", | ||||||
|  |           "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", | ||||||
|  |           "dev": true | ||||||
|  |         }, | ||||||
|  |         "pkg-dir": { | ||||||
|  |           "version": "4.2.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", | ||||||
|  |           "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "find-up": "^4.0.0" | ||||||
|  |           } | ||||||
|  |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "imurmurhash": { |     "imurmurhash": { | ||||||
| @@ -4493,6 +4575,12 @@ | |||||||
|       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", |       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", | ||||||
|       "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" |       "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" | ||||||
|     }, |     }, | ||||||
|  |     "isobject": { | ||||||
|  |       "version": "3.0.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", | ||||||
|  |       "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|     "isstream": { |     "isstream": { | ||||||
|       "version": "0.1.2", |       "version": "0.1.2", | ||||||
|       "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", |       "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", | ||||||
| @@ -4517,9 +4605,9 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "jasmine": { |     "jasmine": { | ||||||
|       "version": "3.6.3", |       "version": "3.6.4", | ||||||
|       "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.6.3.tgz", |       "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.6.4.tgz", | ||||||
|       "integrity": "sha512-Th91zHsbsALWjDUIiU5d/W5zaYQsZFMPTdeNmi8GivZPmAaUAK8MblSG3yQI4VMGC/abF2us7ex60NH1AAIMTA==", |       "integrity": "sha512-hIeOou6y0BgCOKYgXYveQvlY+PTHgDPajFf+vLCYbMTQ+VjAP9+EQv0nuC9+gyCAAWISRFauB1XUb9kFuOKtcQ==", | ||||||
|       "dev": true, |       "dev": true, | ||||||
|       "requires": { |       "requires": { | ||||||
|         "glob": "^7.1.6", |         "glob": "^7.1.6", | ||||||
| @@ -4760,6 +4848,12 @@ | |||||||
|         "json-buffer": "3.0.0" |         "json-buffer": "3.0.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "kind-of": { | ||||||
|  |       "version": "6.0.3", | ||||||
|  |       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", | ||||||
|  |       "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|     "klaw": { |     "klaw": { | ||||||
|       "version": "3.0.0", |       "version": "3.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", |       "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", | ||||||
| @@ -5390,9 +5484,9 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "node-releases": { |     "node-releases": { | ||||||
|       "version": "1.1.69", |       "version": "1.1.70", | ||||||
|       "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.69.tgz", |       "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz", | ||||||
|       "integrity": "sha512-DGIjo79VDEyAnRlfSqYTsy+yoHd2IOjJiKUozD2MV2D85Vso6Bug56mb9tT/fY5Urt0iqk01H7x+llAruDR2zA==", |       "integrity": "sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|     "noop-logger": { |     "noop-logger": { | ||||||
| @@ -5861,12 +5955,12 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "pkg-dir": { |     "pkg-dir": { | ||||||
|       "version": "4.2.0", |       "version": "5.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", |       "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", | ||||||
|       "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", |       "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", | ||||||
|       "dev": true, |       "dev": true, | ||||||
|       "requires": { |       "requires": { | ||||||
|         "find-up": "^4.0.0" |         "find-up": "^5.0.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "plist": { |     "plist": { | ||||||
| @@ -6716,6 +6810,15 @@ | |||||||
|       "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", |       "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", | ||||||
|       "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" |       "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" | ||||||
|     }, |     }, | ||||||
|  |     "shallow-clone": { | ||||||
|  |       "version": "3.0.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", | ||||||
|  |       "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "kind-of": "^6.0.2" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "shebang-command": { |     "shebang-command": { | ||||||
|       "version": "1.2.0", |       "version": "1.2.0", | ||||||
|       "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", |       "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", | ||||||
| @@ -7577,9 +7680,9 @@ | |||||||
|       "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" |       "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" | ||||||
|     }, |     }, | ||||||
|     "webpack": { |     "webpack": { | ||||||
|       "version": "5.15.0", |       "version": "5.16.0", | ||||||
|       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.15.0.tgz", |       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.16.0.tgz", | ||||||
|       "integrity": "sha512-y/xG+ONDz78yn3VvP6gAvGr1/gkxOgitvHSXBmquyN8KDtrGEyE3K9WkXOPB7QmfcOBCpO4ELXwNcCYQnEmexA==", |       "integrity": "sha512-QOkctcjYfEGxcYg4AzPJafyAQ7ANc266/URkX881uFA7b2k31E0Dmpy1ExfppHOTp1kHDTsRh9sXojVUvgPF0g==", | ||||||
|       "dev": true, |       "dev": true, | ||||||
|       "requires": { |       "requires": { | ||||||
|         "@types/eslint-scope": "^3.7.0", |         "@types/eslint-scope": "^3.7.0", | ||||||
| @@ -7614,75 +7717,24 @@ | |||||||
|           "integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==", |           "integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==", | ||||||
|           "dev": true |           "dev": true | ||||||
|         }, |         }, | ||||||
|         "find-up": { |  | ||||||
|           "version": "5.0.0", |  | ||||||
|           "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", |  | ||||||
|           "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", |  | ||||||
|           "dev": true, |  | ||||||
|           "requires": { |  | ||||||
|             "locate-path": "^6.0.0", |  | ||||||
|             "path-exists": "^4.0.0" |  | ||||||
|           } |  | ||||||
|         }, |  | ||||||
|         "graceful-fs": { |         "graceful-fs": { | ||||||
|           "version": "4.2.4", |           "version": "4.2.4", | ||||||
|           "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", |           "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", | ||||||
|           "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", |           "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", | ||||||
|           "dev": true |           "dev": true | ||||||
|         }, |  | ||||||
|         "locate-path": { |  | ||||||
|           "version": "6.0.0", |  | ||||||
|           "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", |  | ||||||
|           "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", |  | ||||||
|           "dev": true, |  | ||||||
|           "requires": { |  | ||||||
|             "p-locate": "^5.0.0" |  | ||||||
|           } |  | ||||||
|         }, |  | ||||||
|         "p-limit": { |  | ||||||
|           "version": "3.1.0", |  | ||||||
|           "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", |  | ||||||
|           "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", |  | ||||||
|           "dev": true, |  | ||||||
|           "requires": { |  | ||||||
|             "yocto-queue": "^0.1.0" |  | ||||||
|           } |  | ||||||
|         }, |  | ||||||
|         "p-locate": { |  | ||||||
|           "version": "5.0.0", |  | ||||||
|           "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", |  | ||||||
|           "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", |  | ||||||
|           "dev": true, |  | ||||||
|           "requires": { |  | ||||||
|             "p-limit": "^3.0.2" |  | ||||||
|           } |  | ||||||
|         }, |  | ||||||
|         "path-exists": { |  | ||||||
|           "version": "4.0.0", |  | ||||||
|           "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", |  | ||||||
|           "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", |  | ||||||
|           "dev": true |  | ||||||
|         }, |  | ||||||
|         "pkg-dir": { |  | ||||||
|           "version": "5.0.0", |  | ||||||
|           "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", |  | ||||||
|           "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", |  | ||||||
|           "dev": true, |  | ||||||
|           "requires": { |  | ||||||
|             "find-up": "^5.0.0" |  | ||||||
|           } |  | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "webpack-cli": { |     "webpack-cli": { | ||||||
|       "version": "4.3.1", |       "version": "4.4.0", | ||||||
|       "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.3.1.tgz", |       "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.4.0.tgz", | ||||||
|       "integrity": "sha512-/F4+9QNZM/qKzzL9/06Am8NXIkGV+/NqQ62Dx7DSqudxxpAgBqYn6V7+zp+0Y7JuWksKUbczRY3wMTd+7Uj6OA==", |       "integrity": "sha512-/Qh07CXfXEkMu5S8wEpjuaw2Zj/CC0hf/qbTDp6N8N7JjdGuaOjZ7kttz+zhuJO/J5m7alQEhNk9lsc4rC6xgQ==", | ||||||
|       "dev": true, |       "dev": true, | ||||||
|       "requires": { |       "requires": { | ||||||
|         "@discoveryjs/json-ext": "^0.5.0", |         "@discoveryjs/json-ext": "^0.5.0", | ||||||
|  |         "@webpack-cli/configtest": "^1.0.0", | ||||||
|         "@webpack-cli/info": "^1.2.1", |         "@webpack-cli/info": "^1.2.1", | ||||||
|         "@webpack-cli/serve": "^1.2.1", |         "@webpack-cli/serve": "^1.2.2", | ||||||
|         "colorette": "^1.2.1", |         "colorette": "^1.2.1", | ||||||
|         "commander": "^6.2.0", |         "commander": "^6.2.0", | ||||||
|         "enquirer": "^2.3.6", |         "enquirer": "^2.3.6", | ||||||
| @@ -7692,7 +7744,7 @@ | |||||||
|         "interpret": "^2.2.0", |         "interpret": "^2.2.0", | ||||||
|         "rechoir": "^0.7.0", |         "rechoir": "^0.7.0", | ||||||
|         "v8-compile-cache": "^2.2.0", |         "v8-compile-cache": "^2.2.0", | ||||||
|         "webpack-merge": "^4.2.2" |         "webpack-merge": "^5.7.3" | ||||||
|       }, |       }, | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "commander": { |         "commander": { | ||||||
| @@ -7704,12 +7756,13 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "webpack-merge": { |     "webpack-merge": { | ||||||
|       "version": "4.2.2", |       "version": "5.7.3", | ||||||
|       "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", |       "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", | ||||||
|       "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", |       "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", | ||||||
|       "dev": true, |       "dev": true, | ||||||
|       "requires": { |       "requires": { | ||||||
|         "lodash": "^4.17.15" |         "clone-deep": "^4.0.1", | ||||||
|  |         "wildcard": "^2.0.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "webpack-sources": { |     "webpack-sources": { | ||||||
| @@ -7822,6 +7875,12 @@ | |||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "wildcard": { | ||||||
|  |       "version": "2.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", | ||||||
|  |       "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|     "word-wrap": { |     "word-wrap": { | ||||||
|       "version": "1.2.3", |       "version": "1.2.3", | ||||||
|       "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", |       "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", | ||||||
|   | |||||||
| @@ -40,7 +40,7 @@ | |||||||
|     "electron-window-state": "5.0.3", |     "electron-window-state": "5.0.3", | ||||||
|     "express": "4.17.1", |     "express": "4.17.1", | ||||||
|     "express-session": "1.17.1", |     "express-session": "1.17.1", | ||||||
|     "fs-extra": "9.0.1", |     "fs-extra": "9.1.0", | ||||||
|     "helmet": "4.4.1", |     "helmet": "4.4.1", | ||||||
|     "html": "1.0.0", |     "html": "1.0.0", | ||||||
|     "html2plaintext": "2.1.2", |     "html2plaintext": "2.1.2", | ||||||
| @@ -82,12 +82,12 @@ | |||||||
|     "electron-packager": "15.2.0", |     "electron-packager": "15.2.0", | ||||||
|     "electron-rebuild": "2.3.4", |     "electron-rebuild": "2.3.4", | ||||||
|     "esm": "3.2.25", |     "esm": "3.2.25", | ||||||
|     "jasmine": "3.6.3", |     "jasmine": "3.6.4", | ||||||
|     "jsdoc": "3.6.6", |     "jsdoc": "3.6.6", | ||||||
|     "lorem-ipsum": "2.0.3", |     "lorem-ipsum": "2.0.3", | ||||||
|     "rcedit": "3.0.0", |     "rcedit": "3.0.0", | ||||||
|     "webpack": "5.15.0", |     "webpack": "5.16.0", | ||||||
|     "webpack-cli": "4.3.1" |     "webpack-cli": "4.4.0" | ||||||
|   }, |   }, | ||||||
|   "optionalDependencies": { |   "optionalDependencies": { | ||||||
|     "electron-installer-debian": "2.0.1" |     "electron-installer-debian": "2.0.1" | ||||||
|   | |||||||
| @@ -88,6 +88,13 @@ class Attribute { | |||||||
|     getDefinition() { |     getDefinition() { | ||||||
|         return promotedAttributeDefinitionParser.parse(this.value); |         return promotedAttributeDefinitionParser.parse(this.value); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     get dto() { | ||||||
|  |         const dto = Object.assign({}, this); | ||||||
|  |         delete dto.treeCache; | ||||||
|  |  | ||||||
|  |         return dto; | ||||||
|  |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| export default Attribute; | export default Attribute; | ||||||
|   | |||||||
| @@ -3,6 +3,7 @@ import appContext from "./app_context.js"; | |||||||
| import utils from './utils.js'; | import utils from './utils.js'; | ||||||
| import noteCreateService from './note_create.js'; | import noteCreateService from './note_create.js'; | ||||||
| import treeService from './tree.js'; | import treeService from './tree.js'; | ||||||
|  | import treeCache from "./tree_cache.js"; | ||||||
|  |  | ||||||
| // this key needs to have this value so it's hit by the tooltip | // this key needs to have this value so it's hit by the tooltip | ||||||
| const SELECTED_NOTE_PATH_KEY = "data-note-path"; | const SELECTED_NOTE_PATH_KEY = "data-note-path"; | ||||||
| @@ -249,6 +250,14 @@ function init() { | |||||||
|             .find(".go-to-selected-note-button") |             .find(".go-to-selected-note-button") | ||||||
|             .toggleClass("disabled", true); |             .toggleClass("disabled", true); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     $.fn.setNote = async function (noteId) { | ||||||
|  |         const note = noteId ? await treeCache.getNote(noteId, true) : null; | ||||||
|  |  | ||||||
|  |         $(this) | ||||||
|  |             .val(note ? note.title : "") | ||||||
|  |             .setSelectedNotePath(noteId); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| export default { | export default { | ||||||
|   | |||||||
							
								
								
									
										39
									
								
								src/public/app/widgets/search_actions/abstract_action.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								src/public/app/widgets/search_actions/abstract_action.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | |||||||
|  | import server from "../../services/server.js"; | ||||||
|  | import ws from "../../services/ws.js"; | ||||||
|  |  | ||||||
|  | export default class AbstractAction { | ||||||
|  |     constructor(attribute, actionDef) { | ||||||
|  |         this.attribute = attribute; | ||||||
|  |         this.actionDef = actionDef; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     render() { | ||||||
|  |         try { | ||||||
|  |             const $rendered = this.doRender(); | ||||||
|  |  | ||||||
|  |             $rendered.attr('data-attribute-id', this.attribute.attributeId); | ||||||
|  |  | ||||||
|  |             return $rendered; | ||||||
|  |         } | ||||||
|  |         catch (e) { | ||||||
|  |             logError(`Failed rendering search action: ${JSON.stringify(this.attribute.dto)} with error: ${e.message} ${e.stack}`); | ||||||
|  |             return null; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     // to be overriden | ||||||
|  |     doRender() {} | ||||||
|  |  | ||||||
|  |     async saveAction(data) { | ||||||
|  |         const actionObject = Object.assign({ name: this.constructor.actionName }, data); | ||||||
|  |  | ||||||
|  |         await server.put(`notes/${this.attribute.noteId}/attribute`, { | ||||||
|  |             attributeId: this.attribute.attributeId, | ||||||
|  |             type: 'label', | ||||||
|  |             name: 'action', | ||||||
|  |             value: JSON.stringify(actionObject) | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         await ws.waitForMaxKnownEntityChangeId(); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										37
									
								
								src/public/app/widgets/search_actions/delete_label.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/public/app/widgets/search_actions/delete_label.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | import SpacedUpdate from "../../services/spaced_update.js"; | ||||||
|  | import AbstractAction from "./abstract_action.js"; | ||||||
|  |  | ||||||
|  | const TPL = ` | ||||||
|  | <tr> | ||||||
|  |     <td> | ||||||
|  |         Delete label: | ||||||
|  |     </td> | ||||||
|  |     <td> | ||||||
|  |         <div style="display: flex; align-items: center"> | ||||||
|  |             <div style="margin-right: 15px;" class="text-nowrap">Label name:</div>  | ||||||
|  |              | ||||||
|  |             <input type="text" class="form-control label-name"/> | ||||||
|  |         </div> | ||||||
|  |     </td> | ||||||
|  |     <td> | ||||||
|  |         <span class="bx bx-x icon-action" data-action-conf-del></span> | ||||||
|  |     </td> | ||||||
|  | </tr>`; | ||||||
|  |  | ||||||
|  | export default class DeleteLabelSearchAction extends AbstractAction { | ||||||
|  |     static get actionName() { return "deleteLabel"; } | ||||||
|  |  | ||||||
|  |     doRender() { | ||||||
|  |         const $action = $(TPL); | ||||||
|  |         const $labelName = $action.find('.label-name'); | ||||||
|  |         $labelName.val(this.actionDef.labelName || ""); | ||||||
|  |  | ||||||
|  |         const spacedUpdate = new SpacedUpdate(async () => { | ||||||
|  |             await this.saveAction({ labelName: $labelName.val() }); | ||||||
|  |         }, 1000) | ||||||
|  |  | ||||||
|  |         $labelName.on('input', () => spacedUpdate.scheduleUpdate()); | ||||||
|  |  | ||||||
|  |         return $action; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										21
									
								
								src/public/app/widgets/search_actions/delete_note.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/public/app/widgets/search_actions/delete_note.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | |||||||
|  | import AbstractAction from "./abstract_action.js"; | ||||||
|  |  | ||||||
|  | const TPL = ` | ||||||
|  | <tr> | ||||||
|  |     <td colspan="2"> | ||||||
|  |         <span class="bx bx-trash"></span> | ||||||
|  |      | ||||||
|  |         Delete matched note | ||||||
|  |     </td> | ||||||
|  |     <td> | ||||||
|  |         <span class="bx bx-x icon-action" data-action-conf-del></span> | ||||||
|  |     </td> | ||||||
|  | </tr>`; | ||||||
|  |  | ||||||
|  | export default class DeleteNoteSearchAction extends AbstractAction { | ||||||
|  |     static get actionName() { return "deleteNote"; } | ||||||
|  |  | ||||||
|  |     doRender() { | ||||||
|  |         return $(TPL); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										37
									
								
								src/public/app/widgets/search_actions/delete_relation.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/public/app/widgets/search_actions/delete_relation.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | import SpacedUpdate from "../../services/spaced_update.js"; | ||||||
|  | import AbstractAction from "./abstract_action.js"; | ||||||
|  |  | ||||||
|  | const TPL = ` | ||||||
|  | <tr> | ||||||
|  |     <td> | ||||||
|  |         Delete relation: | ||||||
|  |     </td> | ||||||
|  |     <td> | ||||||
|  |         <div style="display: flex; align-items: center"> | ||||||
|  |             <div style="margin-right: 15px;" class="text-nowrap">Relation name:</div>  | ||||||
|  |              | ||||||
|  |             <input type="text" class="form-control relation-name"/> | ||||||
|  |         </div> | ||||||
|  |     </td> | ||||||
|  |     <td> | ||||||
|  |         <span class="bx bx-x icon-action" data-action-conf-del></span> | ||||||
|  |     </td> | ||||||
|  | </tr>`; | ||||||
|  |  | ||||||
|  | export default class DeleteRelationSearchAction extends AbstractAction { | ||||||
|  |     static get actionName() { return "deleteRelation"; } | ||||||
|  |  | ||||||
|  |     doRender() { | ||||||
|  |         const $action = $(TPL); | ||||||
|  |         const $relationName = $action.find('.relation-name'); | ||||||
|  |         $relationName.val(this.actionDef.relationName || ""); | ||||||
|  |  | ||||||
|  |         const spacedUpdate = new SpacedUpdate(async () => { | ||||||
|  |             await this.saveAction({ relationName: $relationName.val() }); | ||||||
|  |         }, 1000) | ||||||
|  |  | ||||||
|  |         $relationName.on('input', () => spacedUpdate.scheduleUpdate()); | ||||||
|  |  | ||||||
|  |         return $action; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										51
									
								
								src/public/app/widgets/search_actions/rename_label.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								src/public/app/widgets/search_actions/rename_label.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | |||||||
|  | import SpacedUpdate from "../../services/spaced_update.js"; | ||||||
|  | import AbstractAction from "./abstract_action.js"; | ||||||
|  |  | ||||||
|  | const TPL = ` | ||||||
|  | <tr> | ||||||
|  |     <td> | ||||||
|  |         Rename label: | ||||||
|  |     </td> | ||||||
|  |     <td> | ||||||
|  |         <div style="display: flex; align-items: center"> | ||||||
|  |             <div style="display: flex; align-items: center"> | ||||||
|  |                 <div style="margin-right: 15px;">From:</div>  | ||||||
|  |                  | ||||||
|  |                 <input type="text" class="form-control old-label-name" placeholder="old name"/> | ||||||
|  |                  | ||||||
|  |                 <div style="margin-right: 15px; margin-left: 15px;">To:</div>  | ||||||
|  |                  | ||||||
|  |                 <input type="text" class="form-control new-label-name" placeholder="new name"/> | ||||||
|  |             </div> | ||||||
|  |         </div> | ||||||
|  |     </td> | ||||||
|  |     <td> | ||||||
|  |         <span class="bx bx-x icon-action" data-action-conf-del></span> | ||||||
|  |     </td> | ||||||
|  | </tr>`; | ||||||
|  |  | ||||||
|  | export default class RenameLabelSearchAction extends AbstractAction { | ||||||
|  |     static get actionName() { return "renameLabel"; } | ||||||
|  |  | ||||||
|  |     doRender() { | ||||||
|  |         const $action = $(TPL); | ||||||
|  |  | ||||||
|  |         const $oldLabelName = $action.find('.old-label-name'); | ||||||
|  |         $oldLabelName.val(this.actionDef.oldLabelName || ""); | ||||||
|  |  | ||||||
|  |         const $newLabelName = $action.find('.new-label-name'); | ||||||
|  |         $newLabelName.val(this.actionDef.newLabelName || ""); | ||||||
|  |  | ||||||
|  |         const spacedUpdate = new SpacedUpdate(async () => { | ||||||
|  |             await this.saveAction({ | ||||||
|  |                 oldLabelName: $oldLabelName.val(), | ||||||
|  |                 newLabelName: $newLabelName.val() | ||||||
|  |             }); | ||||||
|  |         }, 1000) | ||||||
|  |  | ||||||
|  |         $oldLabelName.on('input', () => spacedUpdate.scheduleUpdate()); | ||||||
|  |         $newLabelName.on('input', () => spacedUpdate.scheduleUpdate()); | ||||||
|  |  | ||||||
|  |         return $action; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										51
									
								
								src/public/app/widgets/search_actions/set_label_value.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								src/public/app/widgets/search_actions/set_label_value.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | |||||||
|  | import SpacedUpdate from "../../services/spaced_update.js"; | ||||||
|  | import AbstractAction from "./abstract_action.js"; | ||||||
|  |  | ||||||
|  | const TPL = ` | ||||||
|  | <tr> | ||||||
|  |     <td> | ||||||
|  |         Set label value: | ||||||
|  |     </td> | ||||||
|  |     <td> | ||||||
|  |         <div style="display: flex; align-items: center"> | ||||||
|  |             <div style="display: flex; align-items: center"> | ||||||
|  |                 <div style="margin-right: 15px;" class="text-nowrap">Set label</div>  | ||||||
|  |                  | ||||||
|  |                 <input type="text" class="form-control label-name" placeholder="label name"/> | ||||||
|  |                  | ||||||
|  |                 <div style="margin-right: 15px; margin-left: 15px;" class="text-nowrap">to value</div> | ||||||
|  |                  | ||||||
|  |                 <input type="text" class="form-control label-value" placeholder="new value"/> | ||||||
|  |             </div> | ||||||
|  |         </div> | ||||||
|  |     </td> | ||||||
|  |     <td> | ||||||
|  |         <span class="bx bx-x icon-action" data-action-conf-del></span> | ||||||
|  |     </td> | ||||||
|  | </tr>`; | ||||||
|  |  | ||||||
|  | export default class SetLabelValueSearchAction extends AbstractAction { | ||||||
|  |     static get actionName() { return "setLabelValue"; } | ||||||
|  |  | ||||||
|  |     doRender() { | ||||||
|  |         const $action = $(TPL); | ||||||
|  |  | ||||||
|  |         const $labelName = $action.find('.label-name'); | ||||||
|  |         $labelName.val(this.actionDef.labelName || ""); | ||||||
|  |  | ||||||
|  |         const $labelValue = $action.find('.label-value'); | ||||||
|  |         $labelValue.val(this.actionDef.labelValue || ""); | ||||||
|  |  | ||||||
|  |         const spacedUpdate = new SpacedUpdate(async () => { | ||||||
|  |             await this.saveAction({ | ||||||
|  |                 labelName: $labelName.val(), | ||||||
|  |                 labelValue: $labelValue.val() | ||||||
|  |             }); | ||||||
|  |         }, 1000) | ||||||
|  |  | ||||||
|  |         $labelName.on('input', () => spacedUpdate.scheduleUpdate()); | ||||||
|  |         $labelValue.on('input', () => spacedUpdate.scheduleUpdate()); | ||||||
|  |  | ||||||
|  |         return $action; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										54
									
								
								src/public/app/widgets/search_actions/set_relation_target.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								src/public/app/widgets/search_actions/set_relation_target.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | |||||||
|  | import SpacedUpdate from "../../services/spaced_update.js"; | ||||||
|  | import AbstractAction from "./abstract_action.js"; | ||||||
|  | import noteAutocompleteService from "../../services/note_autocomplete.js"; | ||||||
|  |  | ||||||
|  | const TPL = ` | ||||||
|  | <tr> | ||||||
|  |     <td> | ||||||
|  |         Set relation target note: | ||||||
|  |     </td> | ||||||
|  |     <td>         | ||||||
|  |         <div style="display: flex; align-items: center"> | ||||||
|  |             <div style="margin-right: 15px;" class="text-nowrap">Set relation</div>  | ||||||
|  |              | ||||||
|  |             <input type="text" class="form-control relation-name" placeholder="relation name"/> | ||||||
|  |         </div> | ||||||
|  |         <div style="display: flex; align-items: center; margin-top: 10px;"> | ||||||
|  |             <div style="margin-right: 15px;" class="text-nowrap">target to note</div> | ||||||
|  |              | ||||||
|  |             <input type="text" class="form-control target-note"/> | ||||||
|  |         </div> | ||||||
|  |     </td> | ||||||
|  |     <td> | ||||||
|  |         <span class="bx bx-x icon-action" data-action-conf-del></span> | ||||||
|  |     </td> | ||||||
|  | </tr>`; | ||||||
|  |  | ||||||
|  | export default class SetRelationTargetSearchAction extends AbstractAction { | ||||||
|  |     static get actionName() { return "setLabelValue"; } | ||||||
|  |  | ||||||
|  |     doRender() { | ||||||
|  |         const $action = $(TPL); | ||||||
|  |  | ||||||
|  |         const $relationName = $action.find('.relation-name'); | ||||||
|  |         $relationName.val(this.actionDef.relationName || ""); | ||||||
|  |  | ||||||
|  |         const $targetNote = $action.find('.target-note'); | ||||||
|  |         noteAutocompleteService.initNoteAutocomplete($targetNote); | ||||||
|  |         $targetNote.setNote(this.actionDef.targetNoteId); | ||||||
|  |  | ||||||
|  |         $targetNote.on('autocomplete:closed', () => spacedUpdate.scheduleUpdate()); | ||||||
|  |  | ||||||
|  |         const spacedUpdate = new SpacedUpdate(async () => { | ||||||
|  |             await this.saveAction({ | ||||||
|  |                 relationName: $relationName.val(), | ||||||
|  |                 targetNoteId: $targetNote.getSelectedNoteId() | ||||||
|  |             }); | ||||||
|  |         }, 1000) | ||||||
|  |  | ||||||
|  |         $relationName.on('input', () => spacedUpdate.scheduleUpdate()); | ||||||
|  |         $targetNote.on('input', () => spacedUpdate.scheduleUpdate()); | ||||||
|  |  | ||||||
|  |         return $action; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -5,6 +5,12 @@ import TabAwareWidget from "./tab_aware_widget.js"; | |||||||
| import treeCache from "../services/tree_cache.js"; | import treeCache from "../services/tree_cache.js"; | ||||||
| import ws from "../services/ws.js"; | import ws from "../services/ws.js"; | ||||||
| import utils from "../services/utils.js"; | import utils from "../services/utils.js"; | ||||||
|  | import DeleteNoteSearchAction from "./search_actions/delete_note.js"; | ||||||
|  | import DeleteLabelSearchAction from "./search_actions/delete_label.js"; | ||||||
|  | import DeleteRelationSearchAction from "./search_actions/delete_relation.js"; | ||||||
|  | import RenameLabelSearchAction from "./search_actions/rename_label.js"; | ||||||
|  | import SetLabelValueSearchAction from "./search_actions/set_label_value.js"; | ||||||
|  | import SetRelationTargetSearchAction from "./search_actions/set_relation_target.js"; | ||||||
|  |  | ||||||
| const TPL = ` | const TPL = ` | ||||||
| <div class="search-definition-widget"> | <div class="search-definition-widget"> | ||||||
| @@ -95,14 +101,18 @@ const TPL = ` | |||||||
|                       <div class="dropdown-menu"> |                       <div class="dropdown-menu"> | ||||||
|                         <a class="dropdown-item" href="#" data-action-add="deleteNote"> |                         <a class="dropdown-item" href="#" data-action-add="deleteNote"> | ||||||
|                             Delete note</a> |                             Delete note</a> | ||||||
|                         <a class="dropdown-item" href="#" data-action-add="deleteAttribute"> |                         <a class="dropdown-item" href="#" data-action-add="deleteLabel"> | ||||||
|                             Delete attribute</a> |                             Delete label</a> | ||||||
|                         <a class="dropdown-item" href="#" data-action-add="renameAttribute"> |                         <a class="dropdown-item" href="#" data-action-add="deleteRelation"> | ||||||
|                             Rename attribute</a> |                             Delete relation</a> | ||||||
|                         <a class="dropdown-item" href="#" data-action-add="changeLabelValue"> |                         <a class="dropdown-item" href="#" data-action-add="renameLabel"> | ||||||
|                             Change label value</a> |                             Rename label</a> | ||||||
|                         <a class="dropdown-item" href="#" data-action-add="changeRelationTarget"> |                         <a class="dropdown-item" href="#" data-action-add="renameRelation"> | ||||||
|                             Change relation target</a> |                             Rename relation</a> | ||||||
|  |                         <a class="dropdown-item" href="#" data-action-add="setLabelValue"> | ||||||
|  |                             Set label value</a> | ||||||
|  |                         <a class="dropdown-item" href="#" data-action-add="setRelationTarget"> | ||||||
|  |                             Set relation target</a> | ||||||
|                         <a class="dropdown-item" href="#" data-action-add="executeScript"> |                         <a class="dropdown-item" href="#" data-action-add="executeScript"> | ||||||
|                             Execute script</a> |                             Execute script</a> | ||||||
|                       </div> |                       </div> | ||||||
| @@ -166,27 +176,7 @@ const TPL = ` | |||||||
|                     </td> |                     </td> | ||||||
|                 </tr> |                 </tr> | ||||||
|             </tbody> |             </tbody> | ||||||
|             <tbody class="action-options"> |             <tbody class="action-options"></tbody> | ||||||
|                 <tr> |  | ||||||
|                     <td> |  | ||||||
|                         Rename attribute name: |  | ||||||
|                     </td> |  | ||||||
|                     <td> |  | ||||||
|                         <div style="display: flex; align-items: center"> |  | ||||||
|                             <div style="margin-right: 15px;">From:</div>  |  | ||||||
|                              |  | ||||||
|                             <input type="text" class="form-control" placeholder="old name"/> |  | ||||||
|                              |  | ||||||
|                             <div style="margin-right: 15px; margin-left: 15px;">To:</div>  |  | ||||||
|                              |  | ||||||
|                             <input type="text" class="form-control" placeholder="new name"/> |  | ||||||
|                         </div> |  | ||||||
|                     </td> |  | ||||||
|                     <td> |  | ||||||
|                         <span class="bx bx-x icon-action"></span> |  | ||||||
|                     </td> |  | ||||||
|                 </tr> |  | ||||||
|             </tbody> |  | ||||||
|             <tbody> |             <tbody> | ||||||
|                 <tr> |                 <tr> | ||||||
|                     <td colspan="3"> |                     <td colspan="3"> | ||||||
| @@ -210,35 +200,18 @@ const TPL = ` | |||||||
|     </div> |     </div> | ||||||
| </div>`; | </div>`; | ||||||
|  |  | ||||||
| const ACTION_TPLS = { | const ACTION_CLASSES = {}; | ||||||
|     deleteNote: ` |  | ||||||
| <tr> | for (const clazz of [ | ||||||
|     <td colspan="2"> |     DeleteNoteSearchAction, | ||||||
|         <span class="bx bx-trash"></span> |     DeleteLabelSearchAction, | ||||||
|      |     DeleteRelationSearchAction, | ||||||
|         Delete matched note |     RenameLabelSearchAction, | ||||||
|     </td> |     SetLabelValueSearchAction, | ||||||
|     <td> |     SetRelationTargetSearchAction | ||||||
|         <span class="bx bx-x icon-action" data-action-conf-del></span> | ]) { | ||||||
|     </td> |     ACTION_CLASSES[clazz.actionName] = clazz; | ||||||
| </tr>`, | } | ||||||
|     deleteAttribute: ` |  | ||||||
| <tr> |  | ||||||
|     <td> |  | ||||||
|         Delete attribute: |  | ||||||
|     </td> |  | ||||||
|     <td> |  | ||||||
|         <div style="display: flex; align-items: center"> |  | ||||||
|             <div style="margin-right: 15px;">Attribute name:</div>  |  | ||||||
|              |  | ||||||
|             <input type="text" class="form-control"/> |  | ||||||
|         </div> |  | ||||||
|     </td> |  | ||||||
|     <td> |  | ||||||
|         <span class="bx bx-x icon-action"></span> |  | ||||||
|     </td> |  | ||||||
| </tr>` |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| export default class SearchDefinitionWidget extends TabAwareWidget { | export default class SearchDefinitionWidget extends TabAwareWidget { | ||||||
|     static getType() { return "search"; } |     static getType() { return "search"; } | ||||||
| @@ -403,11 +376,8 @@ export default class SearchDefinitionWidget extends TabAwareWidget { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         const ancestorNoteId = this.note.getRelationValue('ancestor'); |         const ancestorNoteId = this.note.getRelationValue('ancestor'); | ||||||
|         const ancestorNote = ancestorNoteId ? await treeCache.getNote(ancestorNoteId, true) : null; |  | ||||||
|  |  | ||||||
|         this.$ancestor |         await this.$ancestor.setNote(ancestorNoteId); | ||||||
|             .val(ancestorNote ? ancestorNote.title : "") |  | ||||||
|             .setSelectedNotePath(ancestorNoteId); |  | ||||||
|  |  | ||||||
|         if (note.hasLabel('orderBy')) { |         if (note.hasLabel('orderBy')) { | ||||||
|             this.$orderBy.val(note.getLabelValue('orderBy')); |             this.$orderBy.val(note.getLabelValue('orderBy')); | ||||||
| @@ -425,14 +395,20 @@ export default class SearchDefinitionWidget extends TabAwareWidget { | |||||||
|                 actionDef = JSON.parse(actionAttr.value); |                 actionDef = JSON.parse(actionAttr.value); | ||||||
|             } |             } | ||||||
|             catch (e) { |             catch (e) { | ||||||
|                 console.log(`Parsing of attribute: '${actionAttr.value}' failed with error: ${e.message}`); |                 logError(`Parsing of attribute: '${actionAttr.value}' failed with error: ${e.message}`); | ||||||
|                 continue; |                 continue; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             const $actionConf = $(ACTION_TPLS[actionDef.name]); |             const ActionClass = ACTION_CLASSES[actionDef.name]; | ||||||
|             $actionConf.attr('data-attribute-id', actionAttr.attributeId); |  | ||||||
|  |  | ||||||
|             this.$actionOptions.append($actionConf); |             if (!ActionClass) { | ||||||
|  |                 logError(`No action class for '${actionDef.name}' found.`); | ||||||
|  |                 continue; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             const action = new ActionClass(actionAttr, actionDef); | ||||||
|  |  | ||||||
|  |             this.$actionOptions.append(action.render()); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         this.$searchAndExecuteButton.css('visibility', actionLabels.length > 0 ? 'visible' : 'hidden'); |         this.$searchAndExecuteButton.css('visibility', actionLabels.length > 0 ? 'visible' : 'hidden'); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user