| 
									
										
										
										
											2020-05-17 09:48:24 +02:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-16 23:12:29 +02:00
										 |  |  | class Attribute { | 
					
						
							| 
									
										
										
										
											2020-05-17 10:11:19 +02:00
										 |  |  |     constructor(noteCache, row) { | 
					
						
							|  |  |  |         /** @param {NoteCache} */ | 
					
						
							|  |  |  |         this.noteCache = noteCache; | 
					
						
							| 
									
										
										
										
											2020-05-16 23:12:29 +02:00
										 |  |  |         /** @param {string} */ | 
					
						
							|  |  |  |         this.attributeId = row.attributeId; | 
					
						
							|  |  |  |         /** @param {string} */ | 
					
						
							|  |  |  |         this.noteId = row.noteId; | 
					
						
							|  |  |  |         /** @param {string} */ | 
					
						
							|  |  |  |         this.type = row.type; | 
					
						
							|  |  |  |         /** @param {string} */ | 
					
						
							| 
									
										
										
										
											2020-05-20 23:20:39 +02:00
										 |  |  |         this.name = row.name.toLowerCase(); | 
					
						
							| 
									
										
										
										
											2020-05-16 23:12:29 +02:00
										 |  |  |         /** @param {string} */ | 
					
						
							| 
									
										
										
										
											2020-06-27 00:40:35 +02:00
										 |  |  |         this.value = row.type === 'label' ? row.value.toLowerCase() : row.value; | 
					
						
							| 
									
										
										
										
											2020-05-16 23:12:29 +02:00
										 |  |  |         /** @param {boolean} */ | 
					
						
							|  |  |  |         this.isInheritable = !!row.isInheritable; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-22 09:38:30 +02:00
										 |  |  |         this.noteCache.attributes[this.attributeId] = this; | 
					
						
							| 
									
										
										
										
											2020-05-17 10:11:19 +02:00
										 |  |  |         this.noteCache.notes[this.noteId].ownedAttributes.push(this); | 
					
						
							| 
									
										
										
										
											2020-05-16 23:12:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-21 00:39:17 +02:00
										 |  |  |         const key = `${this.type}-${this.name}`; | 
					
						
							| 
									
										
										
										
											2020-05-17 10:11:19 +02:00
										 |  |  |         this.noteCache.attributeIndex[key] = this.noteCache.attributeIndex[key] || []; | 
					
						
							|  |  |  |         this.noteCache.attributeIndex[key].push(this); | 
					
						
							| 
									
										
										
										
											2020-05-16 23:12:29 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         const targetNote = this.targetNote; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (targetNote) { | 
					
						
							|  |  |  |             targetNote.targetRelations.push(this); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     get isAffectingSubtree() { | 
					
						
							|  |  |  |         return this.isInheritable | 
					
						
							|  |  |  |             || (this.type === 'relation' && this.name === 'template'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     get note() { | 
					
						
							| 
									
										
										
										
											2020-05-17 10:11:19 +02:00
										 |  |  |         return this.noteCache.notes[this.noteId]; | 
					
						
							| 
									
										
										
										
											2020-05-16 23:12:29 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     get targetNote() { | 
					
						
							|  |  |  |         if (this.type === 'relation') { | 
					
						
							| 
									
										
										
										
											2020-05-17 10:11:19 +02:00
										 |  |  |             return this.noteCache.notes[this.value]; | 
					
						
							| 
									
										
										
										
											2020-05-16 23:12:29 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2020-05-17 09:48:24 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | module.exports = Attribute; |