mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 10:26:08 +01:00 
			
		
		
		
	lazy loading of note list
This commit is contained in:
		
							
								
								
									
										108
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										108
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -54,6 +54,12 @@ | |||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "@discoveryjs/json-ext": { | ||||||
|  |       "version": "0.5.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", | ||||||
|  |       "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|     "@electron/get": { |     "@electron/get": { | ||||||
|       "version": "1.7.2", |       "version": "1.7.2", | ||||||
|       "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.7.2.tgz", |       "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.7.2.tgz", | ||||||
| @@ -898,18 +904,18 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "@webpack-cli/info": { |     "@webpack-cli/info": { | ||||||
|       "version": "1.1.0", |       "version": "1.2.0", | ||||||
|       "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.1.0.tgz", |       "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.0.tgz", | ||||||
|       "integrity": "sha512-uNWSdaYHc+f3LdIZNwhdhkjjLDDl3jP2+XBqAq9H8DjrJUvlOKdP8TNruy1yEaDfgpAIgbSAN7pye4FEHg9tYQ==", |       "integrity": "sha512-+wA8lBKopgKmN76BSGJVJby5ZXDlsrO6p/nm7fUBsHznRNWB/ozotJP7Yfcz8JPfqeG2LxwYlTH2u6D9a/0XAw==", | ||||||
|       "dev": true, |       "dev": true, | ||||||
|       "requires": { |       "requires": { | ||||||
|         "envinfo": "^7.7.3" |         "envinfo": "^7.7.3" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "@webpack-cli/serve": { |     "@webpack-cli/serve": { | ||||||
|       "version": "1.1.0", |       "version": "1.2.0", | ||||||
|       "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.1.0.tgz", |       "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.2.0.tgz", | ||||||
|       "integrity": "sha512-7RfnMXCpJ/NThrhq4gYQYILB18xWyoQcBey81oIyVbmgbc6m5ZHHyFK+DyH7pLHJf0p14MxL4mTsoPAgBSTpIg==", |       "integrity": "sha512-jI3P7jMp/AXDSPkM+ClwRcJZbxnlvNC8bVZBmyRr4scMMZ4p5WQcXkw3Q+Hc7RQekomJlBMN+UQGliT4hhG8Vw==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|     "@xtuc/ieee754": { |     "@xtuc/ieee754": { | ||||||
| @@ -1145,12 +1151,6 @@ | |||||||
|         "sprintf-js": "~1.0.2" |         "sprintf-js": "~1.0.2" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "array-back": { |  | ||||||
|       "version": "4.0.1", |  | ||||||
|       "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.1.tgz", |  | ||||||
|       "integrity": "sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==", |  | ||||||
|       "dev": true |  | ||||||
|     }, |  | ||||||
|     "array-flatten": { |     "array-flatten": { | ||||||
|       "version": "1.1.1", |       "version": "1.1.1", | ||||||
|       "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", |       "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", | ||||||
| @@ -2009,18 +2009,6 @@ | |||||||
|         "delayed-stream": "~1.0.0" |         "delayed-stream": "~1.0.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "command-line-usage": { |  | ||||||
|       "version": "6.1.1", |  | ||||||
|       "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", |  | ||||||
|       "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", |  | ||||||
|       "dev": true, |  | ||||||
|       "requires": { |  | ||||||
|         "array-back": "^4.0.1", |  | ||||||
|         "chalk": "^2.4.2", |  | ||||||
|         "table-layout": "^1.0.1", |  | ||||||
|         "typical": "^5.2.0" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "commander": { |     "commander": { | ||||||
|       "version": "5.1.0", |       "version": "5.1.0", | ||||||
|       "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", |       "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", | ||||||
| @@ -2373,9 +2361,9 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "dayjs": { |     "dayjs": { | ||||||
|       "version": "1.9.7", |       "version": "1.9.8", | ||||||
|       "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.9.7.tgz", |       "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.9.8.tgz", | ||||||
|       "integrity": "sha512-IC877KBdMhBrCfBfJXHQlo0G8keZ0Opy7YIIq5QKtUbCuHMzim8S4PyiVK4YmihI3iOF9lhfUBW4AQWHTR5WHA==" |       "integrity": "sha512-F42qBtJRa30FKF7XDnOQyNUTsaxDkuaZRj/i7BejSHC34LlLfPoIU4aeopvWfM+m1dJ6/DHKAWLg2ur+pLgq1w==" | ||||||
|     }, |     }, | ||||||
|     "debug": { |     "debug": { | ||||||
|       "version": "4.1.1", |       "version": "4.1.1", | ||||||
| @@ -3661,6 +3649,12 @@ | |||||||
|       "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", |       "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", | ||||||
|       "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" |       "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" | ||||||
|     }, |     }, | ||||||
|  |     "fastest-levenshtein": { | ||||||
|  |       "version": "1.0.12", | ||||||
|  |       "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", | ||||||
|  |       "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|     "fd-slicer": { |     "fd-slicer": { | ||||||
|       "version": "1.1.0", |       "version": "1.1.0", | ||||||
|       "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", |       "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", | ||||||
| @@ -4823,12 +4817,6 @@ | |||||||
|       "integrity": "sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q==", |       "integrity": "sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|     "leven": { |  | ||||||
|       "version": "3.1.0", |  | ||||||
|       "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", |  | ||||||
|       "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", |  | ||||||
|       "dev": true |  | ||||||
|     }, |  | ||||||
|     "levn": { |     "levn": { | ||||||
|       "version": "0.3.0", |       "version": "0.3.0", | ||||||
|       "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", |       "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", | ||||||
| @@ -6223,12 +6211,6 @@ | |||||||
|         "resolve": "^1.9.0" |         "resolve": "^1.9.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "reduce-flatten": { |  | ||||||
|       "version": "2.0.0", |  | ||||||
|       "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", |  | ||||||
|       "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", |  | ||||||
|       "dev": true |  | ||||||
|     }, |  | ||||||
|     "regenerator-runtime": { |     "regenerator-runtime": { | ||||||
|       "version": "0.13.7", |       "version": "0.13.7", | ||||||
|       "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", |       "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", | ||||||
| @@ -7018,18 +7000,6 @@ | |||||||
|       "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", |       "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", | ||||||
|       "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" |       "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" | ||||||
|     }, |     }, | ||||||
|     "table-layout": { |  | ||||||
|       "version": "1.0.1", |  | ||||||
|       "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.1.tgz", |  | ||||||
|       "integrity": "sha512-dEquqYNJiGwY7iPfZ3wbXDI944iqanTSchrACLL2nOB+1r+h1Nzu2eH+DuPPvWvm5Ry7iAPeFlgEtP5bIp5U7Q==", |  | ||||||
|       "dev": true, |  | ||||||
|       "requires": { |  | ||||||
|         "array-back": "^4.0.1", |  | ||||||
|         "deep-extend": "~0.6.0", |  | ||||||
|         "typical": "^5.2.0", |  | ||||||
|         "wordwrapjs": "^4.0.0" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "taffydb": { |     "taffydb": { | ||||||
|       "version": "2.6.2", |       "version": "2.6.2", | ||||||
|       "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", |       "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", | ||||||
| @@ -7390,12 +7360,6 @@ | |||||||
|         "is-typedarray": "^1.0.0" |         "is-typedarray": "^1.0.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "typical": { |  | ||||||
|       "version": "5.2.0", |  | ||||||
|       "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", |  | ||||||
|       "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", |  | ||||||
|       "dev": true |  | ||||||
|     }, |  | ||||||
|     "uc.micro": { |     "uc.micro": { | ||||||
|       "version": "1.0.6", |       "version": "1.0.6", | ||||||
|       "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", |       "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", | ||||||
| @@ -7731,30 +7695,30 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "webpack-cli": { |     "webpack-cli": { | ||||||
|       "version": "4.2.0", |       "version": "4.3.0", | ||||||
|       "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.2.0.tgz", |       "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.3.0.tgz", | ||||||
|       "integrity": "sha512-EIl3k88vaF4fSxWSgtAQR+VwicfLMTZ9amQtqS4o+TDPW9HGaEpbFBbAZ4A3ZOT5SOnMxNOzROsSTPiE8tBJPA==", |       "integrity": "sha512-gve+BBKrzMPTOYDjupzV8JchUznhVWMKtWM1hFIQWi6XoeLvGNoQwkrtMWVb+aJ437GgCKdta7sIn10v621pKA==", | ||||||
|       "dev": true, |       "dev": true, | ||||||
|       "requires": { |       "requires": { | ||||||
|         "@webpack-cli/info": "^1.1.0", |         "@discoveryjs/json-ext": "^0.5.0", | ||||||
|         "@webpack-cli/serve": "^1.1.0", |         "@webpack-cli/info": "^1.2.0", | ||||||
|  |         "@webpack-cli/serve": "^1.2.0", | ||||||
|         "colorette": "^1.2.1", |         "colorette": "^1.2.1", | ||||||
|         "command-line-usage": "^6.1.0", |  | ||||||
|         "commander": "^6.2.0", |         "commander": "^6.2.0", | ||||||
|         "enquirer": "^2.3.6", |         "enquirer": "^2.3.6", | ||||||
|         "execa": "^4.1.0", |         "execa": "^4.1.0", | ||||||
|  |         "fastest-levenshtein": "^1.0.12", | ||||||
|         "import-local": "^3.0.2", |         "import-local": "^3.0.2", | ||||||
|         "interpret": "^2.2.0", |         "interpret": "^2.2.0", | ||||||
|         "leven": "^3.1.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": "^4.2.2" | ||||||
|       }, |       }, | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "commander": { |         "commander": { | ||||||
|           "version": "6.2.0", |           "version": "6.2.1", | ||||||
|           "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", |           "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", | ||||||
|           "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==", |           "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", | ||||||
|           "dev": true |           "dev": true | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
| @@ -7883,16 +7847,6 @@ | |||||||
|       "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", | ||||||
|       "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" |       "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" | ||||||
|     }, |     }, | ||||||
|     "wordwrapjs": { |  | ||||||
|       "version": "4.0.0", |  | ||||||
|       "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.0.tgz", |  | ||||||
|       "integrity": "sha512-Svqw723a3R34KvsMgpjFBYCgNOSdcW3mQFK4wIfhGQhtaFVOJmdYoXgi63ne3dTlWgatVcUc7t4HtQ/+bUVIzQ==", |  | ||||||
|       "dev": true, |  | ||||||
|       "requires": { |  | ||||||
|         "reduce-flatten": "^2.0.0", |  | ||||||
|         "typical": "^5.0.0" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "wrap-ansi": { |     "wrap-ansi": { | ||||||
|       "version": "5.1.0", |       "version": "5.1.0", | ||||||
|       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", |       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", | ||||||
|   | |||||||
| @@ -32,7 +32,7 @@ | |||||||
|     "commonmark": "0.29.3", |     "commonmark": "0.29.3", | ||||||
|     "cookie-parser": "1.4.5", |     "cookie-parser": "1.4.5", | ||||||
|     "csurf": "1.11.0", |     "csurf": "1.11.0", | ||||||
|     "dayjs": "1.9.7", |     "dayjs": "1.9.8", | ||||||
|     "ejs": "3.1.5", |     "ejs": "3.1.5", | ||||||
|     "electron-debug": "3.2.0", |     "electron-debug": "3.2.0", | ||||||
|     "electron-dl": "3.0.2", |     "electron-dl": "3.0.2", | ||||||
| @@ -87,7 +87,7 @@ | |||||||
|     "lorem-ipsum": "2.0.3", |     "lorem-ipsum": "2.0.3", | ||||||
|     "rcedit": "3.0.0", |     "rcedit": "3.0.0", | ||||||
|     "webpack": "5.11.0", |     "webpack": "5.11.0", | ||||||
|     "webpack-cli": "4.2.0" |     "webpack-cli": "4.3.0" | ||||||
|   }, |   }, | ||||||
|   "optionalDependencies": { |   "optionalDependencies": { | ||||||
|     "electron-installer-debian": "2.0.1" |     "electron-installer-debian": "2.0.1" | ||||||
|   | |||||||
| @@ -26,6 +26,7 @@ import PromotedAttributesWidget from "../widgets/attribute_widgets/promoted_attr | |||||||
| import InheritedAttributesWidget from "../widgets/inherited_attribute_list.js"; | import InheritedAttributesWidget from "../widgets/inherited_attribute_list.js"; | ||||||
| import NoteListWidget from "../widgets/note_list.js"; | import NoteListWidget from "../widgets/note_list.js"; | ||||||
| import SearchDefinitionWidget from "../widgets/search_definition.js"; | import SearchDefinitionWidget from "../widgets/search_definition.js"; | ||||||
|  | import Container from "../widgets/container.js"; | ||||||
|  |  | ||||||
| const RIGHT_PANE_CSS = ` | const RIGHT_PANE_CSS = ` | ||||||
| <style> | <style> | ||||||
| @@ -160,8 +161,11 @@ export default class DesktopMainWindowLayout { | |||||||
|                             .child(new InheritedAttributesWidget()) |                             .child(new InheritedAttributesWidget()) | ||||||
|                         ) |                         ) | ||||||
|                     ) |                     ) | ||||||
|  |                     .child(new Container() | ||||||
|  |                         .css('height: 100%; overflow: auto;') | ||||||
|                         .child(new TabCachingWidget(() => new NoteDetailWidget())) |                         .child(new TabCachingWidget(() => new NoteDetailWidget())) | ||||||
|                         .child(new TabCachingWidget(() => new NoteListWidget())) |                         .child(new TabCachingWidget(() => new NoteListWidget())) | ||||||
|  |                     ) | ||||||
|                     .child(new TabCachingWidget(() => new SimilarNotesWidget())) |                     .child(new TabCachingWidget(() => new SimilarNotesWidget())) | ||||||
|                     .child(...this.customWidgets.get('center-pane')) |                     .child(...this.customWidgets.get('center-pane')) | ||||||
|                 ) |                 ) | ||||||
|   | |||||||
| @@ -59,7 +59,7 @@ async function createNote(parentNoteId, options = {}) { | |||||||
|             appContext.triggerCommand('focusAndSelectTitle'); |             appContext.triggerCommand('focusAndSelectTitle'); | ||||||
|         } |         } | ||||||
|         else if (options.focus === 'content') { |         else if (options.focus === 'content') { | ||||||
|             appContext.triggerCommand('focusOnDetail', {tabId: this.tabId}); |             appContext.triggerCommand('focusOnDetail', {tabId: activeTabContext.tabId}); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -148,8 +148,12 @@ class NoteListRenderer { | |||||||
|     /* |     /* | ||||||
|      * We're using noteIds so that it's not necessary to load all notes at once when paging |      * We're using noteIds so that it's not necessary to load all notes at once when paging | ||||||
|      */ |      */ | ||||||
|     constructor(parentNote, noteIds) { |     constructor($parent, parentNote, noteIds) { | ||||||
|         this.$noteList = $(TPL); |         this.$noteList = $(TPL); | ||||||
|  |  | ||||||
|  |         // note list must be added to the DOM immediatelly, otherwise some functionality scripting (canvas) won't work | ||||||
|  |         $parent.empty().append(this.$noteList); | ||||||
|  |  | ||||||
|         this.parentNote = parentNote; |         this.parentNote = parentNote; | ||||||
|         this.noteIds = noteIds; |         this.noteIds = noteIds; | ||||||
|         this.page = 1; |         this.page = 1; | ||||||
|   | |||||||
							
								
								
									
										38
									
								
								src/public/app/widgets/container.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/public/app/widgets/container.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | |||||||
|  | import BasicWidget from "./basic_widget.js"; | ||||||
|  |  | ||||||
|  | export default class Container extends BasicWidget { | ||||||
|  |     constructor() { | ||||||
|  |         super(); | ||||||
|  |  | ||||||
|  |         this.children = []; | ||||||
|  |  | ||||||
|  |         this.positionCounter = 10; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     child(...components) { | ||||||
|  |         if (!components) { | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         super.child(...components); | ||||||
|  |  | ||||||
|  |         for (const component of components) { | ||||||
|  |             if (!component.position) { | ||||||
|  |                 component.position = this.positionCounter; | ||||||
|  |                 this.positionCounter += 10; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         this.children.sort((a, b) => a.position - b.position < 0 ? -1 : 1); | ||||||
|  |  | ||||||
|  |         return this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     doRender() { | ||||||
|  |         this.$widget = $(`<div>`); | ||||||
|  |  | ||||||
|  |         for (const widget of this.children) { | ||||||
|  |             this.$widget.append(widget.render()); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1,6 +1,6 @@ | |||||||
| import BasicWidget from "./basic_widget.js"; | import Container from "./container.js"; | ||||||
|  |  | ||||||
| export default class FlexContainer extends BasicWidget { | export default class FlexContainer extends Container { | ||||||
|     constructor(direction) { |     constructor(direction) { | ||||||
|         super(); |         super(); | ||||||
|  |  | ||||||
| @@ -9,36 +9,5 @@ export default class FlexContainer extends BasicWidget { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         this.attrs.style = `display: flex; flex-direction: ${direction};`; |         this.attrs.style = `display: flex; flex-direction: ${direction};`; | ||||||
|  |  | ||||||
|         this.children = []; |  | ||||||
|  |  | ||||||
|         this.positionCounter = 10; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     child(...components) { |  | ||||||
|         if (!components) { |  | ||||||
|             return this; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         super.child(...components); |  | ||||||
|  |  | ||||||
|         for (const component of components) { |  | ||||||
|             if (!component.position) { |  | ||||||
|                 component.position = this.positionCounter; |  | ||||||
|                 this.positionCounter += 10; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         this.children.sort((a, b) => a.position - b.position < 0 ? -1 : 1); |  | ||||||
|  |  | ||||||
|         return this; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     doRender() { |  | ||||||
|         this.$widget = $(`<div>`); |  | ||||||
|  |  | ||||||
|         for (const widget of this.children) { |  | ||||||
|             this.$widget.append(widget.render()); |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -25,8 +25,6 @@ const TPL = ` | |||||||
| <div class="note-detail"> | <div class="note-detail"> | ||||||
|     <style> |     <style> | ||||||
|     .note-detail { |     .note-detail { | ||||||
|         min-height: 0; |  | ||||||
|         flex-grow: 1; |  | ||||||
|         font-family: var(--detail-font-family); |         font-family: var(--detail-font-family); | ||||||
|         font-size: var(--detail-font-size); |         font-size: var(--detail-font-size); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -32,12 +32,46 @@ export default class NoteListWidget extends TabAwareWidget { | |||||||
|         this.$widget = $(TPL); |         this.$widget = $(TPL); | ||||||
|         this.$content = this.$widget.find('.note-list-widget-content'); |         this.$content = this.$widget.find('.note-list-widget-content'); | ||||||
|         this.contentSized(); |         this.contentSized(); | ||||||
|  |  | ||||||
|  |         const observer = new IntersectionObserver(entries => { | ||||||
|  |             this.isIntersecting = entries[0].isIntersecting; | ||||||
|  |  | ||||||
|  |             this.checkRenderStatus(); | ||||||
|  |         }, { | ||||||
|  |             rootMargin: '50px', | ||||||
|  |             threshold: 0.1 | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         observer.observe(this.$widget[0]); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     async refreshWithNote(note) { |     checkRenderStatus() { | ||||||
|         const noteListRenderer = new NoteListRenderer(note, note.getChildNoteIds()); |         console.log("this.isIntersecting", this.isIntersecting); | ||||||
|  |         console.log("this.noteIdRefreshed === this.noteId", this.noteIdRefreshed === this.noteId); | ||||||
|  |         console.log("this.shownNoteId !== this.noteId", this.shownNoteId !== this.noteId); | ||||||
|  |  | ||||||
|         this.$content.empty().append(await noteListRenderer.renderList()); |         if (this.isIntersecting | ||||||
|  |             && this.noteIdRefreshed === this.noteId | ||||||
|  |             && this.shownNoteId !== this.noteId) { | ||||||
|  |  | ||||||
|  |             this.shownNoteId = this.noteId; | ||||||
|  |             this.renderNoteList(this.note); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     async renderNoteList(note) { | ||||||
|  |         const noteListRenderer = new NoteListRenderer(this.$content, note, note.getChildNoteIds()); | ||||||
|  |         await noteListRenderer.renderList(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     noteDetailRefreshedEvent({tabId}) { | ||||||
|  |         if (!this.isTab(tabId)) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         this.noteIdRefreshed = this.noteId; | ||||||
|  |  | ||||||
|  |         setTimeout(() => this.checkRenderStatus(), 100); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     autoBookDisabledEvent({tabContext}) { |     autoBookDisabledEvent({tabContext}) { | ||||||
|   | |||||||
| @@ -124,7 +124,7 @@ export default class EditableCodeTypeWidget extends TypeWidget { | |||||||
|     async doRefresh(note) { |     async doRefresh(note) { | ||||||
|         const noteComplement = await this.tabContext.getNoteComplement(); |         const noteComplement = await this.tabContext.getNoteComplement(); | ||||||
|  |  | ||||||
|         this.spacedUpdate.allowUpdateWithoutChange(() => { |         await this.spacedUpdate.allowUpdateWithoutChange(() => { | ||||||
|             // CodeMirror breaks pretty badly on null so even though it shouldn't happen (guarded by consistency check) |             // CodeMirror breaks pretty badly on null so even though it shouldn't happen (guarded by consistency check) | ||||||
|             // we provide fallback |             // we provide fallback | ||||||
|             this.codeEditor.setValue(noteComplement.content || ""); |             this.codeEditor.setValue(noteComplement.content || ""); | ||||||
|   | |||||||
| @@ -54,8 +54,6 @@ const TPL = ` | |||||||
|     .note-detail-editable-text h6::before { content: "######\\00a0\\00a0"; color: var(--muted-text-color); } |     .note-detail-editable-text h6::before { content: "######\\00a0\\00a0"; color: var(--muted-text-color); } | ||||||
|      |      | ||||||
|     .note-detail-editable-text { |     .note-detail-editable-text { | ||||||
|         overflow: auto; |  | ||||||
|         height: 100%; |  | ||||||
|         font-family: var(--detail-text-font-family); |         font-family: var(--detail-text-font-family); | ||||||
|         padding-left: 12px; |         padding-left: 12px; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -22,6 +22,8 @@ export default class TypeWidget extends TabAwareWidget { | |||||||
|             this.toggleInt(true); |             this.toggleInt(true); | ||||||
|  |  | ||||||
|             await this.doRefresh(this.note); |             await this.doRefresh(this.note); | ||||||
|  |  | ||||||
|  |             this.triggerEvent('noteDetailRefreshed', {tabId: this.tabContext.tabId}); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user