mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-27 16:26:31 +01:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			feat/impro
			...
			algolia_v1
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | baed93e749 | 
							
								
								
									
										2
									
								
								libraries/autocomplete-theme-classic.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								libraries/autocomplete-theme-classic.css
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										7
									
								
								libraries/autocomplete.jquery.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								libraries/autocomplete.jquery.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										9
									
								
								libraries/autocomplete.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								libraries/autocomplete.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										182
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										182
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -616,9 +616,9 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "@types/eslint": { |     "@types/eslint": { | ||||||
|       "version": "8.2.0", |       "version": "8.2.1", | ||||||
|       "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.0.tgz", |       "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.1.tgz", | ||||||
|       "integrity": "sha512-74hbvsnc+7TEDa1z5YLSe4/q8hGYB3USNvCuzHUJrjPV6hXaq8IXcngCrHkuvFt0+8rFz7xYXrHgNayIX0UZvQ==", |       "integrity": "sha512-UP9rzNn/XyGwb5RQ2fok+DzcIRIYwc16qTXse5+Smsy8MOIccCChT15KAwnsgQx4PzJkaMq4myFyZ4CL5TjhIQ==", | ||||||
|       "dev": true, |       "dev": true, | ||||||
|       "requires": { |       "requires": { | ||||||
|         "@types/estree": "*", |         "@types/estree": "*", | ||||||
| @@ -1468,20 +1468,20 @@ | |||||||
|       "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" |       "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" | ||||||
|     }, |     }, | ||||||
|     "body-parser": { |     "body-parser": { | ||||||
|       "version": "1.19.0", |       "version": "1.19.1", | ||||||
|       "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", |       "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", | ||||||
|       "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", |       "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", | ||||||
|       "requires": { |       "requires": { | ||||||
|         "bytes": "3.1.0", |         "bytes": "3.1.1", | ||||||
|         "content-type": "~1.0.4", |         "content-type": "~1.0.4", | ||||||
|         "debug": "2.6.9", |         "debug": "2.6.9", | ||||||
|         "depd": "~1.1.2", |         "depd": "~1.1.2", | ||||||
|         "http-errors": "1.7.2", |         "http-errors": "1.8.1", | ||||||
|         "iconv-lite": "0.4.24", |         "iconv-lite": "0.4.24", | ||||||
|         "on-finished": "~2.3.0", |         "on-finished": "~2.3.0", | ||||||
|         "qs": "6.7.0", |         "qs": "6.9.6", | ||||||
|         "raw-body": "2.4.0", |         "raw-body": "2.4.2", | ||||||
|         "type-is": "~1.6.17" |         "type-is": "~1.6.18" | ||||||
|       }, |       }, | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "debug": { |         "debug": { | ||||||
| @@ -1491,6 +1491,38 @@ | |||||||
|           "requires": { |           "requires": { | ||||||
|             "ms": "2.0.0" |             "ms": "2.0.0" | ||||||
|           } |           } | ||||||
|  |         }, | ||||||
|  |         "http-errors": { | ||||||
|  |           "version": "1.8.1", | ||||||
|  |           "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", | ||||||
|  |           "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", | ||||||
|  |           "requires": { | ||||||
|  |             "depd": "~1.1.2", | ||||||
|  |             "inherits": "2.0.4", | ||||||
|  |             "setprototypeof": "1.2.0", | ||||||
|  |             "statuses": ">= 1.5.0 < 2", | ||||||
|  |             "toidentifier": "1.0.1" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "inherits": { | ||||||
|  |           "version": "2.0.4", | ||||||
|  |           "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", | ||||||
|  |           "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" | ||||||
|  |         }, | ||||||
|  |         "qs": { | ||||||
|  |           "version": "6.9.6", | ||||||
|  |           "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", | ||||||
|  |           "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" | ||||||
|  |         }, | ||||||
|  |         "setprototypeof": { | ||||||
|  |           "version": "1.2.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", | ||||||
|  |           "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" | ||||||
|  |         }, | ||||||
|  |         "toidentifier": { | ||||||
|  |           "version": "1.0.1", | ||||||
|  |           "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", | ||||||
|  |           "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
| @@ -1831,9 +1863,9 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "bytes": { |     "bytes": { | ||||||
|       "version": "3.1.0", |       "version": "3.1.1", | ||||||
|       "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", |       "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", | ||||||
|       "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" |       "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" | ||||||
|     }, |     }, | ||||||
|     "cacache": { |     "cacache": { | ||||||
|       "version": "15.3.0", |       "version": "15.3.0", | ||||||
| @@ -1920,9 +1952,9 @@ | |||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|     "caniuse-lite": { |     "caniuse-lite": { | ||||||
|       "version": "1.0.30001283", |       "version": "1.0.30001286", | ||||||
|       "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001283.tgz", |       "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001286.tgz", | ||||||
|       "integrity": "sha512-9RoKo841j1GQFSJz/nCXOj0sD7tHBtlowjYlrqIUS812x9/emfBLBt6IyMz1zIaYc/eRL8Cs6HPUVi2Hzq4sIg==", |       "integrity": "sha512-zaEMRH6xg8ESMi2eQ3R4eZ5qw/hJiVsO/HlLwniIwErij0JDr9P+8V4dtx1l+kLq6j3yy8l8W4fst1lBnat5wQ==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|     "caseless": { |     "caseless": { | ||||||
| @@ -3702,9 +3734,9 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "electron-to-chromium": { |     "electron-to-chromium": { | ||||||
|       "version": "1.4.8", |       "version": "1.4.16", | ||||||
|       "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.8.tgz", |       "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.16.tgz", | ||||||
|       "integrity": "sha512-Cu5+dbg55+1E3ohlsa8HT0s4b8D0gBewXEGG8s5wBl8ynWv60VuvYW25GpsOeTVXpulhyU/U8JYZH+yxASSJBQ==", |       "integrity": "sha512-BQb7FgYwnu6haWLU63/CdVW+9xhmHls3RCQUFiV4lvw3wimEHTVcUk2hkuZo76QhR8nnDdfZE7evJIZqijwPdA==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|     "electron-window-state": { |     "electron-window-state": { | ||||||
| @@ -3995,6 +4027,28 @@ | |||||||
|         "vary": "~1.1.2" |         "vary": "~1.1.2" | ||||||
|       }, |       }, | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|  |         "body-parser": { | ||||||
|  |           "version": "1.19.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", | ||||||
|  |           "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", | ||||||
|  |           "requires": { | ||||||
|  |             "bytes": "3.1.0", | ||||||
|  |             "content-type": "~1.0.4", | ||||||
|  |             "debug": "2.6.9", | ||||||
|  |             "depd": "~1.1.2", | ||||||
|  |             "http-errors": "1.7.2", | ||||||
|  |             "iconv-lite": "0.4.24", | ||||||
|  |             "on-finished": "~2.3.0", | ||||||
|  |             "qs": "6.7.0", | ||||||
|  |             "raw-body": "2.4.0", | ||||||
|  |             "type-is": "~1.6.17" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "bytes": { | ||||||
|  |           "version": "3.1.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", | ||||||
|  |           "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" | ||||||
|  |         }, | ||||||
|         "debug": { |         "debug": { | ||||||
|           "version": "2.6.9", |           "version": "2.6.9", | ||||||
|           "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", |           "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", | ||||||
| @@ -4002,6 +4056,17 @@ | |||||||
|           "requires": { |           "requires": { | ||||||
|             "ms": "2.0.0" |             "ms": "2.0.0" | ||||||
|           } |           } | ||||||
|  |         }, | ||||||
|  |         "raw-body": { | ||||||
|  |           "version": "2.4.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", | ||||||
|  |           "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", | ||||||
|  |           "requires": { | ||||||
|  |             "bytes": "3.1.0", | ||||||
|  |             "http-errors": "1.7.2", | ||||||
|  |             "iconv-lite": "0.4.24", | ||||||
|  |             "unpipe": "1.0.0" | ||||||
|  |           } | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
| @@ -5100,9 +5165,9 @@ | |||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|     "jest-worker": { |     "jest-worker": { | ||||||
|       "version": "27.4.2", |       "version": "27.4.4", | ||||||
|       "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.2.tgz", |       "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.4.tgz", | ||||||
|       "integrity": "sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag==", |       "integrity": "sha512-jfwxYJvfua1b1XkyuyPh01ATmgg4e5fPM/muLmhy9Qc6dmiwacQB0MLHaU6IjEsv/+nAixHGxTn8WllA27Pn0w==", | ||||||
|       "dev": true, |       "dev": true, | ||||||
|       "requires": { |       "requires": { | ||||||
|         "@types/node": "*", |         "@types/node": "*", | ||||||
| @@ -5891,9 +5956,9 @@ | |||||||
|       "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" |       "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" | ||||||
|     }, |     }, | ||||||
|     "multer": { |     "multer": { | ||||||
|       "version": "1.4.3", |       "version": "1.4.4", | ||||||
|       "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.3.tgz", |       "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz", | ||||||
|       "integrity": "sha512-np0YLKncuZoTzufbkM6wEKp68EhWJXcU6fq6QqrSwkckd2LlMgd1UqhUJLj6NS/5sZ8dE8LYDWslsltJznnXlg==", |       "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==", | ||||||
|       "requires": { |       "requires": { | ||||||
|         "append-field": "^1.0.0", |         "append-field": "^1.0.0", | ||||||
|         "busboy": "^0.2.11", |         "busboy": "^0.2.11", | ||||||
| @@ -6513,9 +6578,9 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "postcss": { |     "postcss": { | ||||||
|       "version": "8.4.0", |       "version": "8.4.4", | ||||||
|       "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.0.tgz", |       "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.4.tgz", | ||||||
|       "integrity": "sha512-BRMNx3Wy7UI89jN8H4ZVS5lQMPM2OSMkOkvDCSjwXa7PWTs24k7Lm55NXLbMbs070LvraXaxN5l1npSOS6wMVw==", |       "integrity": "sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q==", | ||||||
|       "requires": { |       "requires": { | ||||||
|         "nanoid": "^3.1.30", |         "nanoid": "^3.1.30", | ||||||
|         "picocolors": "^1.0.0", |         "picocolors": "^1.0.0", | ||||||
| @@ -6669,14 +6734,43 @@ | |||||||
|       "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" |       "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" | ||||||
|     }, |     }, | ||||||
|     "raw-body": { |     "raw-body": { | ||||||
|       "version": "2.4.0", |       "version": "2.4.2", | ||||||
|       "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", |       "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", | ||||||
|       "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", |       "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", | ||||||
|       "requires": { |       "requires": { | ||||||
|         "bytes": "3.1.0", |         "bytes": "3.1.1", | ||||||
|         "http-errors": "1.7.2", |         "http-errors": "1.8.1", | ||||||
|         "iconv-lite": "0.4.24", |         "iconv-lite": "0.4.24", | ||||||
|         "unpipe": "1.0.0" |         "unpipe": "1.0.0" | ||||||
|  |       }, | ||||||
|  |       "dependencies": { | ||||||
|  |         "http-errors": { | ||||||
|  |           "version": "1.8.1", | ||||||
|  |           "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", | ||||||
|  |           "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", | ||||||
|  |           "requires": { | ||||||
|  |             "depd": "~1.1.2", | ||||||
|  |             "inherits": "2.0.4", | ||||||
|  |             "setprototypeof": "1.2.0", | ||||||
|  |             "statuses": ">= 1.5.0 < 2", | ||||||
|  |             "toidentifier": "1.0.1" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "inherits": { | ||||||
|  |           "version": "2.0.4", | ||||||
|  |           "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", | ||||||
|  |           "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" | ||||||
|  |         }, | ||||||
|  |         "setprototypeof": { | ||||||
|  |           "version": "1.2.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", | ||||||
|  |           "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" | ||||||
|  |         }, | ||||||
|  |         "toidentifier": { | ||||||
|  |           "version": "1.0.1", | ||||||
|  |           "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", | ||||||
|  |           "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" | ||||||
|  |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "rc": { |     "rc": { | ||||||
| @@ -6986,9 +7080,9 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "sanitize-html": { |     "sanitize-html": { | ||||||
|       "version": "2.6.0", |       "version": "2.6.1", | ||||||
|       "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.6.0.tgz", |       "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.6.1.tgz", | ||||||
|       "integrity": "sha512-qc+NqTeaOi/QVAVs5gOY9tqIVk4r1pcUbx1Q2N1a609Os3TNlm85zll2d8g8m/RM6RWg9llir0SpAcePQVIC1w==", |       "integrity": "sha512-DzjSz3H5qDntD7s1TcWCSoRPmNR8UmA+y+xZQOvWgjATe2Br9ZW73+vD3Pj6Snrg0RuEuJdXgrKvnYuiuixRkA==", | ||||||
|       "requires": { |       "requires": { | ||||||
|         "deepmerge": "^4.2.2", |         "deepmerge": "^4.2.2", | ||||||
|         "escape-string-regexp": "^4.0.0", |         "escape-string-regexp": "^4.0.0", | ||||||
| @@ -8094,9 +8188,9 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "watchpack": { |     "watchpack": { | ||||||
|       "version": "2.3.0", |       "version": "2.3.1", | ||||||
|       "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.0.tgz", |       "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", | ||||||
|       "integrity": "sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==", |       "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", | ||||||
|       "dev": true, |       "dev": true, | ||||||
|       "requires": { |       "requires": { | ||||||
|         "glob-to-regexp": "^0.4.1", |         "glob-to-regexp": "^0.4.1", | ||||||
| @@ -8118,9 +8212,9 @@ | |||||||
|       "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" |       "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" | ||||||
|     }, |     }, | ||||||
|     "webpack": { |     "webpack": { | ||||||
|       "version": "5.64.4", |       "version": "5.65.0", | ||||||
|       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.64.4.tgz", |       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.65.0.tgz", | ||||||
|       "integrity": "sha512-LWhqfKjCLoYJLKJY8wk2C3h77i8VyHowG3qYNZiIqD6D0ZS40439S/KVuc/PY48jp2yQmy0mhMknq8cys4jFMw==", |       "integrity": "sha512-Q5or2o6EKs7+oKmJo7LaqZaMOlDWQse9Tm5l1WAfU/ujLGN5Pb0SqGeVkN/4bpPmEqEP5RnVhiqsOtWtUVwGRw==", | ||||||
|       "dev": true, |       "dev": true, | ||||||
|       "requires": { |       "requires": { | ||||||
|         "@types/eslint-scope": "^3.7.0", |         "@types/eslint-scope": "^3.7.0", | ||||||
| @@ -8145,7 +8239,7 @@ | |||||||
|         "schema-utils": "^3.1.0", |         "schema-utils": "^3.1.0", | ||||||
|         "tapable": "^2.1.1", |         "tapable": "^2.1.1", | ||||||
|         "terser-webpack-plugin": "^5.1.3", |         "terser-webpack-plugin": "^5.1.3", | ||||||
|         "watchpack": "^2.3.0", |         "watchpack": "^2.3.1", | ||||||
|         "webpack-sources": "^3.2.2" |         "webpack-sources": "^3.2.2" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|   | |||||||
| @@ -28,7 +28,7 @@ | |||||||
|     "async-mutex": "0.3.2", |     "async-mutex": "0.3.2", | ||||||
|     "axios": "0.24.0", |     "axios": "0.24.0", | ||||||
|     "better-sqlite3": "7.4.5", |     "better-sqlite3": "7.4.5", | ||||||
|     "body-parser": "1.19.0", |     "body-parser": "1.19.1", | ||||||
|     "chokidar": "3.5.2", |     "chokidar": "3.5.2", | ||||||
|     "cls-hooked": "4.2.2", |     "cls-hooked": "4.2.2", | ||||||
|     "commonmark": "0.30.0", |     "commonmark": "0.30.0", | ||||||
| @@ -67,7 +67,7 @@ | |||||||
|     "request": "^2.88.2", |     "request": "^2.88.2", | ||||||
|     "rimraf": "3.0.2", |     "rimraf": "3.0.2", | ||||||
|     "sanitize-filename": "1.6.3", |     "sanitize-filename": "1.6.3", | ||||||
|     "sanitize-html": "2.6.0", |     "sanitize-html": "2.6.1", | ||||||
|     "sax": "1.2.4", |     "sax": "1.2.4", | ||||||
|     "semver": "7.3.5", |     "semver": "7.3.5", | ||||||
|     "serve-favicon": "2.5.0", |     "serve-favicon": "2.5.0", | ||||||
|   | |||||||
| @@ -30,8 +30,6 @@ bundleService.getWidgetBundlesByParent().then(widgetBundles => { | |||||||
|  |  | ||||||
| noteTooltipService.setupGlobalTooltip(); | noteTooltipService.setupGlobalTooltip(); | ||||||
|  |  | ||||||
| noteAutocompleteService.init(); |  | ||||||
|  |  | ||||||
| if (utils.isElectron()) { | if (utils.isElectron()) { | ||||||
|     const electron = utils.dynamicRequire('electron'); |     const electron = utils.dynamicRequire('electron'); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -41,7 +41,7 @@ export async function showDialog(widget, text = '') { | |||||||
|         $linkTitle.val(noteTitle); |         $linkTitle.val(noteTitle); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     noteAutocompleteService.initNoteAutocomplete($autoComplete, { |     const ac = noteAutocompleteService.initNoteAutocomplete($autoComplete, { | ||||||
|         allowExternalLinks: true, |         allowExternalLinks: true, | ||||||
|         allowCreatingNotes: true |         allowCreatingNotes: true | ||||||
|     }); |     }); | ||||||
| @@ -84,7 +84,7 @@ export async function showDialog(widget, text = '') { | |||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     if (text && text.trim()) { |     if (text && text.trim()) { | ||||||
|         noteAutocompleteService.setText($autoComplete, text); |         noteAutocompleteService.setText(ac, text); | ||||||
|     } |     } | ||||||
|     else { |     else { | ||||||
|         noteAutocompleteService.showRecentNotes($autoComplete); |         noteAutocompleteService.showRecentNotes($autoComplete); | ||||||
|   | |||||||
| @@ -12,7 +12,12 @@ const KEEP_LAST_SEARCH_FOR_X_SECONDS = 120; | |||||||
| export async function showDialog() { | export async function showDialog() { | ||||||
|     utils.openDialog($dialog); |     utils.openDialog($dialog); | ||||||
|  |  | ||||||
|     noteAutocompleteService.initNoteAutocomplete($autoComplete, { hideGoToSelectedNoteButton: true }) |     const ac = noteAutocompleteService.initNoteAutocomplete($autoComplete, { | ||||||
|  |         hideGoToSelectedNoteButton: true, | ||||||
|  |         placeholder: "search for note by its name" | ||||||
|  |     }); | ||||||
|  |  | ||||||
|  |     $autoComplete | ||||||
|         // clear any event listener added in previous invocation of this function |         // clear any event listener added in previous invocation of this function | ||||||
|         .off('autocomplete:noteselected') |         .off('autocomplete:noteselected') | ||||||
|         .on('autocomplete:noteselected', function(event, suggestion, dataset) { |         .on('autocomplete:noteselected', function(event, suggestion, dataset) { | ||||||
| @@ -28,15 +33,12 @@ export async function showDialog() { | |||||||
|     // so we'll keep the content. |     // so we'll keep the content. | ||||||
|     // if it's outside of this time limit then we assume it's a completely new search and show recent notes instead. |     // if it's outside of this time limit then we assume it's a completely new search and show recent notes instead. | ||||||
|     if (Date.now() - lastOpenedTs > KEEP_LAST_SEARCH_FOR_X_SECONDS * 1000) { |     if (Date.now() - lastOpenedTs > KEEP_LAST_SEARCH_FOR_X_SECONDS * 1000) { | ||||||
|         noteAutocompleteService.showRecentNotes($autoComplete); |         noteAutocompleteService.showRecentNotes(ac, $autoComplete); | ||||||
|     } |     } | ||||||
|     else { |     else { | ||||||
|         $autoComplete |         ac.setIsOpen(true); | ||||||
|             // hack, the actual search value is stored in <pre> element next to the search input |         ac.ext.focus(); | ||||||
|             // this is important because the search input value is replaced with the suggestion note's title |         ac.ext.select(); | ||||||
|             .autocomplete("val", $autoComplete.next().text()) |  | ||||||
|             .trigger('focus') |  | ||||||
|             .trigger('select'); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     lastOpenedTs = Date.now(); |     lastOpenedTs = Date.now(); | ||||||
|   | |||||||
| @@ -8,7 +8,75 @@ import froca from "./froca.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"; | ||||||
|  |  | ||||||
| const SELECTED_EXTERNAL_LINK_KEY = "data-external-link"; | const acMixin = { | ||||||
|  |     selectedNotePath: "", | ||||||
|  |     selectedExternalLink: "", | ||||||
|  |     $el: "", | ||||||
|  |  | ||||||
|  |     focus() { | ||||||
|  |         this.$el.find('.aa-Input').focus(); | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     select() { | ||||||
|  |         this.$el.find('.aa-Input').select(); | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     getQuery() { | ||||||
|  |         return this?.lastState.query; | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     getSelectedNotePath() { | ||||||
|  |         if (!this.getQuery()) { | ||||||
|  |             return ""; | ||||||
|  |         } else { | ||||||
|  |             return this.selectedNotePath; | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     getSelectedNoteId() { | ||||||
|  |         const notePath = this.getSelectedNotePath(); | ||||||
|  |         const chunks = notePath.split('/'); | ||||||
|  |  | ||||||
|  |         return chunks.length >= 1 ? chunks[chunks.length - 1] : null; | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     setSelectedNotePath(notePath) { | ||||||
|  |         notePath = notePath || ""; | ||||||
|  |  | ||||||
|  |         this.selectedNotePath = notePath; | ||||||
|  |  | ||||||
|  |         $(this) | ||||||
|  |             .closest(".input-group") | ||||||
|  |             .find(".go-to-selected-note-button") | ||||||
|  |             .toggleClass("disabled", !notePath.trim()) | ||||||
|  |             .attr(SELECTED_NOTE_PATH_KEY, notePath); // we also set attr here so tooltip can be displayed | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     getSelectedExternalLink() { | ||||||
|  |         if (!$(this).val().trim()) { | ||||||
|  |             return ""; | ||||||
|  |         } else { | ||||||
|  |             return this.selectedExternalLink; | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     setSelectedExternalLink(externalLink) { | ||||||
|  |         this.selectedExternalLink = externalLink; | ||||||
|  |  | ||||||
|  |         $(this) | ||||||
|  |             .closest(".input-group") | ||||||
|  |             .find(".go-to-selected-note-button") | ||||||
|  |             .toggleClass("disabled", true); | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     async setNote(noteId) { | ||||||
|  |         const note = noteId ? await froca.getNote(noteId, true) : null; | ||||||
|  |  | ||||||
|  |         $(this) | ||||||
|  |             .val(note ? note.title : "") | ||||||
|  |             .setSelectedNotePath(noteId); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
| async function autocompleteSourceForCKEditor(queryText) { | async function autocompleteSourceForCKEditor(queryText) { | ||||||
|     return await new Promise((res, rej) => { |     return await new Promise((res, rej) => { | ||||||
| @@ -30,7 +98,7 @@ async function autocompleteSourceForCKEditor(queryText) { | |||||||
|     }); |     }); | ||||||
| } | } | ||||||
|  |  | ||||||
| async function autocompleteSource(term, cb, options = {}) { | async function autocompleteSource(term, options = {}) { | ||||||
|     const activeNoteId = appContext.tabManager.getActiveContextNoteId(); |     const activeNoteId = appContext.tabManager.getActiveContextNoteId(); | ||||||
|  |  | ||||||
|     let results = await server.get('autocomplete' |     let results = await server.get('autocomplete' | ||||||
| @@ -58,206 +126,176 @@ async function autocompleteSource(term, cb, options = {}) { | |||||||
|         ].concat(results); |         ].concat(results); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     cb(results); |     return results; | ||||||
| } | } | ||||||
|  |  | ||||||
| function clearText($el) { | function clearText(acObj) { | ||||||
|     if (utils.isMobile()) { |     if (utils.isMobile()) { | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     $el.setSelectedNotePath(""); |     acObj.ext.setSelectedNotePath(""); | ||||||
|     $el.autocomplete("val", "").trigger('change'); |     acObj.setQuery(""); | ||||||
| } | } | ||||||
|  |  | ||||||
| function setText($el, text) { | function setText(ac, text) { | ||||||
|     if (utils.isMobile()) { |     if (utils.isMobile()) { | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     $el.setSelectedNotePath(""); |     ac.ext.setSelectedNotePath(""); | ||||||
|     $el |     ac.setQuery(text.trim()); | ||||||
|         .autocomplete("val", text.trim()) |     ac.setIsOpen(true); | ||||||
|         .autocomplete("open"); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| function showRecentNotes($el) { | function showRecentNotes(ac) { | ||||||
|     if (utils.isMobile()) { |     if (utils.isMobile()) { | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     $el.setSelectedNotePath(""); |     ac.ext.$el.find(".aa-Input").val("").change(); | ||||||
|     $el.autocomplete("val", ""); |  | ||||||
|     $el.trigger('focus'); |     ac.setQuery(""); | ||||||
|  |     ac.setIsOpen(true); | ||||||
|  |     ac.update(); | ||||||
|  |     ac.ext.setSelectedNotePath(""); | ||||||
|  |     ac.ext.focus(); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     console.log("BBB"); | ||||||
| } | } | ||||||
|  |  | ||||||
| function initNoteAutocomplete($el, options) { | function initNoteAutocomplete($container, options) { | ||||||
|     if ($el.hasClass("note-autocomplete-input") || utils.isMobile()) { |     if ($container.hasClass("note-autocomplete-container") || utils.isMobile()) { | ||||||
|         // clear any event listener added in previous invocation of this function |         // clear any event listener added in previous invocation of this function | ||||||
|         $el.off('autocomplete:noteselected'); |         $container.off('autocomplete:noteselected'); | ||||||
|  |  | ||||||
|         return $el; |         return $container.prop("acObj"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     options = options || {}; |     options = options || {}; | ||||||
|  |  | ||||||
|     $el.addClass("note-autocomplete-input"); |     const $el = $('<div class="note-autocomplete-input">'); | ||||||
|  |     const $sideButtons = $('<div>'); | ||||||
|  |  | ||||||
|     const $clearTextButton = $("<a>") |     $container.addClass("note-autocomplete-container") | ||||||
|             .addClass("input-group-text input-clearer-button bx bx-x") |         .append($el) | ||||||
|             .prop("title", "Clear text field"); |         .append($sideButtons); | ||||||
|  |  | ||||||
|     const $showRecentNotesButton = $("<a>") |     const $showRecentNotesButton = $("<a>") | ||||||
|             .addClass("input-group-text show-recent-notes-button bx bx-time") |             .addClass("show-recent-notes-button bx bx-time") | ||||||
|             .prop("title", "Show recent notes"); |             .prop("title", "Show recent notes"); | ||||||
|  |  | ||||||
|     const $goToSelectedNoteButton = $("<a>") |     const $goToSelectedNoteButton = $("<a>") | ||||||
|         .addClass("input-group-text go-to-selected-note-button bx bx-arrow-to-right") |         .addClass("go-to-selected-note-button bx bx-arrow-to-right") | ||||||
|         .attr("data-action", "note"); |         .attr("data-action", "note"); | ||||||
|  |  | ||||||
|     const $sideButtons = $("<div>") |     $sideButtons.append($showRecentNotesButton); | ||||||
|         .addClass("input-group-append") |  | ||||||
|         .append($clearTextButton) |  | ||||||
|         .append($showRecentNotesButton); |  | ||||||
|  |  | ||||||
|     if (!options.hideGoToSelectedNoteButton) { |     if (!options.hideGoToSelectedNoteButton) { | ||||||
|         $sideButtons.append($goToSelectedNoteButton); |         $sideButtons.append($goToSelectedNoteButton); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     $el.after($sideButtons); |  | ||||||
|  |  | ||||||
|     $clearTextButton.on('click', () => clearText($el)); |  | ||||||
|  |  | ||||||
|     $showRecentNotesButton.on('click', e => { |     $showRecentNotesButton.on('click', e => { | ||||||
|         showRecentNotes($el); |         showRecentNotes(acObj); | ||||||
|  |  | ||||||
|         // this will cause the click not give focus to the "show recent notes" button |         // this will cause the click not give focus to the "show recent notes" button | ||||||
|         // this is important because otherwise input will lose focus immediatelly and not show the results |         // this is important because otherwise input will lose focus immediatelly and not show the results | ||||||
|         return false; |         return false; | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     $el.autocomplete({ |     const { autocomplete } = window['@algolia/autocomplete-js']; | ||||||
|         appendTo: document.querySelector('body'), |  | ||||||
|         hint: false, |     let acObj = autocomplete({ | ||||||
|         autoselect: true, |         container: $el[0], | ||||||
|  |         defaultActiveItemId: 0, | ||||||
|         openOnFocus: true, |         openOnFocus: true, | ||||||
|         minLength: 0, |         tabAutocomplete: false, | ||||||
|         tabAutocomplete: false |         placeholder: options.placeholder, | ||||||
|     }, [ |         onStateChange({ state }) { | ||||||
|         { |             acObj.lastState = state; | ||||||
|             source: (term, cb) => autocompleteSource(term, cb, options), |         }, | ||||||
|             displayKey: 'notePathTitle', |         async getSources({ query }) { | ||||||
|             templates: { |             const items = await autocompleteSource(query, options); | ||||||
|                 suggestion: suggestion => suggestion.highlightedNotePathTitle |  | ||||||
|             }, |             return [ | ||||||
|             // we can't cache identical searches because notes can be created / renamed, new recent notes can be added |                 { | ||||||
|             cache: false |                     getItems() { | ||||||
|  |                         return items; | ||||||
|  |                     }, | ||||||
|  |                     onSelect({item}) { | ||||||
|  |                         acObj.ext.$el.trigger("autocomplete:selected", [item]); | ||||||
|  |                     }, | ||||||
|  |                     displayKey: 'notePathTitle', | ||||||
|  |                     templates: { | ||||||
|  |                         item({ item, createElement }) { | ||||||
|  |                             return createElement('div', { | ||||||
|  |                                 dangerouslySetInnerHTML: { | ||||||
|  |                                     __html: item.highlightedNotePathTitle, | ||||||
|  |                                 }, | ||||||
|  |                             }); | ||||||
|  |                         } | ||||||
|  |                     }, | ||||||
|  |                     // we can't cache identical searches because notes can be created / renamed, new recent notes can be added | ||||||
|  |                     cache: false | ||||||
|  |                 } | ||||||
|  |             ] | ||||||
|         } |         } | ||||||
|     ]); |     }); | ||||||
|  |  | ||||||
|     $el.on('autocomplete:selected', async (event, suggestion) => { |     acObj.ext = {...acMixin, $el, $container }; | ||||||
|         if (suggestion.action === 'external-link') { |  | ||||||
|             $el.setSelectedNotePath(null); |  | ||||||
|             $el.setSelectedExternalLink(suggestion.externalLink); |  | ||||||
|  |  | ||||||
|             $el.autocomplete("val", suggestion.externalLink); |     $container.prop("acObj", acObj); | ||||||
|  |  | ||||||
|             $el.autocomplete("close"); |     $container.on('autocomplete:selected', async (event, item) => { | ||||||
|  |         if (item.action === 'external-link') { | ||||||
|  |             acObj.ext.setSelectedNotePath(null); | ||||||
|  |             acObj.ext.setSelectedExternalLink(item.externalLink); | ||||||
|  |  | ||||||
|             $el.trigger('autocomplete:externallinkselected', [suggestion]); |             acObj.setQuery(item.externalLink); | ||||||
|  |  | ||||||
|  |             $container.autocomplete("close"); | ||||||
|  |  | ||||||
|  |             $container.trigger('autocomplete:externallinkselected', [item]); | ||||||
|  |  | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if (suggestion.action === 'create-note') { |         if (item.action === 'create-note') { | ||||||
|             const {note} = await noteCreateService.createNote(suggestion.parentNoteId, { |             const {note} = await noteCreateService.createNote(item.parentNoteId, { | ||||||
|                 title: suggestion.noteTitle, |                 title: item.noteTitle, | ||||||
|                 activate: false |                 activate: false | ||||||
|             }); |             }); | ||||||
|  |  | ||||||
|             suggestion.notePath = treeService.getSomeNotePath(note); |             item.notePath = treeService.getSomeNotePath(note); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         $el.setSelectedNotePath(suggestion.notePath); |         acObj.ext.setSelectedNotePath(item.notePath); | ||||||
|         $el.setSelectedExternalLink(null); |         acObj.ext.setSelectedExternalLink(null); | ||||||
|  |  | ||||||
|         $el.autocomplete("val", suggestion.noteTitle); |         acObj.setQuery(item.noteTitle); | ||||||
|  |  | ||||||
|         $el.autocomplete("close"); |         acObj.setIsOpen(false); | ||||||
|  |  | ||||||
|         $el.trigger('autocomplete:noteselected', [suggestion]); |         $container.trigger('autocomplete:noteselected', [item]); | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     $el.on('autocomplete:closed', () => { |     $container.on('autocomplete:closed', () => { | ||||||
|         if (!$el.val().trim()) { |         if (!$container.val().trim()) { | ||||||
|             clearText($el); |             clearText($container); | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     $el.on('autocomplete:opened', () => { |     $container.on('autocomplete:opened', () => { | ||||||
|         if ($el.attr("readonly")) { |         if ($container.attr("readonly")) { | ||||||
|             $el.autocomplete('close'); |             $container.autocomplete('close'); | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     // clear any event listener added in previous invocation of this function |     // clear any event listener added in previous invocation of this function | ||||||
|     $el.off('autocomplete:noteselected'); |     $container.off('autocomplete:noteselected'); | ||||||
|  |  | ||||||
|     return $el; |     return acObj; | ||||||
| } |  | ||||||
|  |  | ||||||
| function init() { |  | ||||||
|     $.fn.getSelectedNotePath = function () { |  | ||||||
|         if (!$(this).val().trim()) { |  | ||||||
|             return ""; |  | ||||||
|         } else { |  | ||||||
|             return $(this).attr(SELECTED_NOTE_PATH_KEY); |  | ||||||
|         } |  | ||||||
|     }; |  | ||||||
|  |  | ||||||
|     $.fn.getSelectedNoteId = function () { |  | ||||||
|         const notePath = $(this).getSelectedNotePath(); |  | ||||||
|         const chunks = notePath.split('/'); |  | ||||||
|  |  | ||||||
|         return chunks.length >= 1 ? chunks[chunks.length - 1] : null; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     $.fn.setSelectedNotePath = function (notePath) { |  | ||||||
|         notePath = notePath || ""; |  | ||||||
|  |  | ||||||
|         $(this).attr(SELECTED_NOTE_PATH_KEY, notePath); |  | ||||||
|  |  | ||||||
|         $(this) |  | ||||||
|             .closest(".input-group") |  | ||||||
|             .find(".go-to-selected-note-button") |  | ||||||
|             .toggleClass("disabled", !notePath.trim()) |  | ||||||
|             .attr(SELECTED_NOTE_PATH_KEY, notePath); // we also set attr here so tooltip can be displayed |  | ||||||
|     }; |  | ||||||
|  |  | ||||||
|     $.fn.getSelectedExternalLink = function () { |  | ||||||
|         if (!$(this).val().trim()) { |  | ||||||
|             return ""; |  | ||||||
|         } else { |  | ||||||
|             return $(this).attr(SELECTED_EXTERNAL_LINK_KEY); |  | ||||||
|         } |  | ||||||
|     }; |  | ||||||
|  |  | ||||||
|     $.fn.setSelectedExternalLink = function (externalLink) { |  | ||||||
|         $(this).attr(SELECTED_EXTERNAL_LINK_KEY, externalLink); |  | ||||||
|  |  | ||||||
|         $(this) |  | ||||||
|             .closest(".input-group") |  | ||||||
|             .find(".go-to-selected-note-button") |  | ||||||
|             .toggleClass("disabled", true); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     $.fn.setNote = async function (noteId) { |  | ||||||
|         const note = noteId ? await froca.getNote(noteId, true) : null; |  | ||||||
|  |  | ||||||
|         $(this) |  | ||||||
|             .val(note ? note.title : "") |  | ||||||
|             .setSelectedNotePath(noteId); |  | ||||||
|     } |  | ||||||
| } | } | ||||||
|  |  | ||||||
| export default { | export default { | ||||||
| @@ -265,6 +303,5 @@ export default { | |||||||
|     autocompleteSourceForCKEditor, |     autocompleteSourceForCKEditor, | ||||||
|     initNoteAutocomplete, |     initNoteAutocomplete, | ||||||
|     showRecentNotes, |     showRecentNotes, | ||||||
|     setText, |     setText | ||||||
|     init |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -59,10 +59,10 @@ class NoteContext extends Component { | |||||||
|             }); |             }); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if (utils.isDesktop()) { |         // if (utils.isDesktop()) { | ||||||
|             // close dangling autocompletes after closing the tab |         //     // close dangling autocompletes after closing the tab | ||||||
|             $(".aa-input").autocomplete("close"); |         //     $(".aa-input").autocomplete("close"); | ||||||
|         } |         // } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     getSubContexts() { |     getSubContexts() { | ||||||
|   | |||||||
| @@ -292,7 +292,9 @@ export default class AttributeDetailWidget extends NoteContextAwareWidget { | |||||||
|         this.$rowTargetNote = this.$widget.find('.attr-row-target-note'); |         this.$rowTargetNote = this.$widget.find('.attr-row-target-note'); | ||||||
|         this.$inputTargetNote = this.$widget.find('.attr-input-target-note'); |         this.$inputTargetNote = this.$widget.find('.attr-input-target-note'); | ||||||
|  |  | ||||||
|         noteAutocompleteService.initNoteAutocomplete(this.$inputTargetNote, {allowCreatingNotes: true}) |         noteAutocompleteService.initNoteAutocomplete(this.$inputTargetNote, {allowCreatingNotes: true}); | ||||||
|  |  | ||||||
|  |         this.$inputTargetNote | ||||||
|             .on('autocomplete:noteselected', (event, suggestion, dataset) => { |             .on('autocomplete:noteselected', (event, suggestion, dataset) => { | ||||||
|                 if (!suggestion.notePath) { |                 if (!suggestion.notePath) { | ||||||
|                     return false; |                     return false; | ||||||
|   | |||||||
| @@ -358,9 +358,12 @@ pre:not(.CodeMirror-line) { | |||||||
|     color: var(--button-disabled-background-color) !important; |     color: var(--button-disabled-background-color) !important; | ||||||
| } | } | ||||||
|  |  | ||||||
| .note-autocomplete-input { | .note-autocomplete-container { | ||||||
|     /* this is for seamless integration of "input clearer" button */ |     display: flex; | ||||||
|     border-right: 0; | } | ||||||
|  |  | ||||||
|  | .note-autocomplete-container .note-autocomplete-input { | ||||||
|  |     flex-grow: 1; | ||||||
| } | } | ||||||
|  |  | ||||||
| table.promoted-attributes-in-tooltip { | table.promoted-attributes-in-tooltip { | ||||||
| @@ -432,43 +435,6 @@ table.promoted-attributes-in-tooltip td, table.promoted-attributes-in-tooltip th | |||||||
|     opacity: 1; |     opacity: 1; | ||||||
| } | } | ||||||
|  |  | ||||||
| .algolia-autocomplete { |  | ||||||
|     width: calc(100% - 30px); |  | ||||||
|     z-index: 2000 !important; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .algolia-autocomplete .aa-input, .algolia-autocomplete .aa-hint { |  | ||||||
|     width: 100%; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .algolia-autocomplete .aa-dropdown-menu { |  | ||||||
|     width: 100%; |  | ||||||
|     background-color: var(--main-background-color); |  | ||||||
|     border: 1px solid var(--main-border-color); |  | ||||||
|     border-top: none; |  | ||||||
|     z-index: 2000 !important; |  | ||||||
|     max-height: 500px; |  | ||||||
|     overflow: auto; |  | ||||||
|     padding: 0; |  | ||||||
|     margin: 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .algolia-autocomplete .aa-dropdown-menu .aa-suggestion { |  | ||||||
|     cursor: pointer; |  | ||||||
|     padding: 5px; |  | ||||||
|     margin: 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .algolia-autocomplete .aa-dropdown-menu .aa-suggestion p { |  | ||||||
|     padding: 0; |  | ||||||
|     margin: 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor { |  | ||||||
|     color: var(--hover-item-text-color); |  | ||||||
|     background-color: var(--hover-item-background-color); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .help-button { | .help-button { | ||||||
|     float: right; |     float: right; | ||||||
|     background: none; |     background: none; | ||||||
| @@ -958,3 +924,7 @@ input { | |||||||
| .note-split.full-content-width { | .note-split.full-content-width { | ||||||
|     max-width: 999999px; |     max-width: 999999px; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | .aa-Panel { | ||||||
|  |     z-index: 10000; | ||||||
|  | } | ||||||
|   | |||||||
| @@ -79,7 +79,8 @@ | |||||||
|  |  | ||||||
| <script src="libraries/jquery.hotkeys.js"></script> | <script src="libraries/jquery.hotkeys.js"></script> | ||||||
|  |  | ||||||
| <script src="libraries/autocomplete.jquery.min.js"></script> | <link href="libraries/autocomplete-theme-classic.css" rel="stylesheet"> | ||||||
|  | <script src="libraries/autocomplete.js"></script> | ||||||
|  |  | ||||||
| <script src="libraries/dayjs.min.js"></script> | <script src="libraries/dayjs.min.js"></script> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -10,9 +10,8 @@ | |||||||
|             <div class="modal-body"> |             <div class="modal-body"> | ||||||
|                 <div class="form-group"> |                 <div class="form-group"> | ||||||
|                     <label for="jump-to-note-autocomplete">Note</label> |                     <label for="jump-to-note-autocomplete">Note</label> | ||||||
|                     <div class="input-group"> |  | ||||||
|                         <input id="jump-to-note-autocomplete" class="form-control" placeholder="search for note by its name"> |                     <div id="jump-to-note-autocomplete"></div> | ||||||
|                     </div> |  | ||||||
|                 </div> |                 </div> | ||||||
|             </div> |             </div> | ||||||
|             <div class="modal-footer"> |             <div class="modal-footer"> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user