Update.
This commit is contained in:
		
							parent
							
								
									7fe4289f42
								
							
						
					
					
						commit
						e4e2e919c2
					
				| @ -46,6 +46,89 @@ class ChatInputComponent extends HTMLElement { | ||||
|   focus() { | ||||
|     this.textarea.focus(); | ||||
|   }  | ||||
|     getAuthors(){ | ||||
| 	const uniqueAuthors = new Set() | ||||
| 	document.querySelectorAll('div.author').forEach(el=> | ||||
| 		{ | ||||
| 			uniqueAuthors.add(el.innerText.trim()) | ||||
| 		}) | ||||
| 		 | ||||
|     return Array.from(uniqueAuthors) | ||||
| } | ||||
|  extractMentions(text) { | ||||
|   const regex = /@([a-zA-Z0-9_]+)/g; | ||||
|   const mentions = []; | ||||
|   let match; | ||||
| 
 | ||||
|   while ((match = regex.exec(text)) !== null) { | ||||
|     mentions.push(match[1]); | ||||
|   } | ||||
| 
 | ||||
|   return mentions; | ||||
| } | ||||
|     matchMentionsToAuthors(mentions, authors) { | ||||
|   return mentions.map(mention => { | ||||
|     let closestAuthor = null; | ||||
|     let minDistance = Infinity; | ||||
| 
 | ||||
|     authors.forEach(author => { | ||||
|       const distance = this.levenshteinDistance(mention.toLowerCase(), author.toLowerCase()); | ||||
|       if (distance < minDistance) { | ||||
|         minDistance = distance; | ||||
|         closestAuthor = author; | ||||
|       } | ||||
|     }); | ||||
| 
 | ||||
|     return { mention, closestAuthor, distance: minDistance }; | ||||
|   }); | ||||
| } | ||||
| levenshteinDistance(a, b) { | ||||
|   const matrix = []; | ||||
| 
 | ||||
|   // Initialize the first row and column
 | ||||
|   for (let i = 0; i <= b.length; i++) { | ||||
|     matrix[i] = [i]; | ||||
|   } | ||||
|   for (let j = 0; j <= a.length; j++) { | ||||
|     matrix[0][j] = j; | ||||
|   } | ||||
| 
 | ||||
|   // Fill in the matrix
 | ||||
|   for (let i = 1; i <= b.length; i++) { | ||||
|     for (let j = 1; j <= a.length; j++) { | ||||
|       if (b.charAt(i - 1) === a.charAt(j - 1)) { | ||||
|         matrix[i][j] = matrix[i - 1][j - 1]; | ||||
|       } else { | ||||
|         matrix[i][j] = Math.min( | ||||
|           matrix[i - 1][j] + 1,    // Deletion
 | ||||
|           matrix[i][j - 1] + 1,    // Insertion
 | ||||
|           matrix[i - 1][j - 1] + 1 // Substitution
 | ||||
|         ); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   return matrix[b.length][a.length]; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|       replaceMentionsWithAuthors(text) { | ||||
|     const authors = this.getAuthors(); | ||||
|   const mentions = this.extractMentions(text); | ||||
|    | ||||
|   const matches = this.matchMentionsToAuthors(mentions, authors); | ||||
|  console.info(matches)  | ||||
|   let updatedText = text; | ||||
|   matches.forEach(({ mention, closestAuthor }) => { | ||||
|     const mentionRegex = new RegExp(`@${mention}`, 'g'); | ||||
|     console.info(closestAuthor) | ||||
|       updatedText = updatedText.replace(mentionRegex, `@${closestAuthor}`); | ||||
|   }); | ||||
|    | ||||
|   return updatedText; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   async connectedCallback() { | ||||
| @ -53,6 +136,7 @@ class ChatInputComponent extends HTMLElement { | ||||
|     app.rpc.getUser(null).then((user) => { | ||||
|         this.user=user | ||||
|     }) | ||||
|       const me = this; | ||||
|     this.liveType = this.getAttribute("live-type") === "true"; | ||||
|     this.liveTypeInterval = | ||||
|       parseInt(this.getAttribute("live-type-interval")) || 3; | ||||
| @ -102,7 +186,7 @@ class ChatInputComponent extends HTMLElement { | ||||
|       if (e.key === "Enter" && !e.shiftKey) { | ||||
|         e.preventDefault(); | ||||
| 
 | ||||
|         const message = e.target.value; | ||||
|         const message = me.replaceMentionsWithAuthors(this.value); | ||||
|         this.messageUid = null; | ||||
|         this.value = ""; | ||||
|         this.previousValue = ""; | ||||
| @ -192,6 +276,7 @@ class ChatInputComponent extends HTMLElement { | ||||
|       app.rpc && | ||||
|       typeof app.rpc.updateMessageText === "function" | ||||
|     ) { | ||||
|         this.value = this.replaceMentionsWithAuthors(this.value); | ||||
|       app.rpc.updateMessageText(this.messageUid, this.value); | ||||
|     } | ||||
|   } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user