mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-31 06:21:11 +00:00 
			
		
		
		
	This pattern comes of often during review, so let's fix it once and for all. Did not test, but changes are trivial enough imho. (cherry picked from commit 8fe26fb314f1710139728d9118b455fc6a16cce2)
		
			
				
	
	
		
			51 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import $ from 'jquery';
 | |
| import {htmlEscape} from 'escape-goat';
 | |
| 
 | |
| const {appSubUrl} = window.config;
 | |
| const looksLikeEmailAddressCheck = /^\S+@\S+$/;
 | |
| 
 | |
| export function initCompSearchUserBox() {
 | |
|   const searchUserBox = document.getElementById('search-user-box');
 | |
|   if (!searchUserBox) return;
 | |
| 
 | |
|   const $searchUserBox = $(searchUserBox);
 | |
|   const allowEmailInput = searchUserBox.getAttribute('data-allow-email') === 'true';
 | |
|   const allowEmailDescription = searchUserBox.getAttribute('data-allow-email-description') ?? undefined;
 | |
|   $searchUserBox.search({
 | |
|     minCharacters: 2,
 | |
|     apiSettings: {
 | |
|       url: `${appSubUrl}/user/search?active=1&q={query}`,
 | |
|       onResponse(response) {
 | |
|         const items = [];
 | |
|         const searchQuery = $searchUserBox.find('input').val();
 | |
|         const searchQueryUppercase = searchQuery.toUpperCase();
 | |
|         $.each(response.data, (_i, item) => {
 | |
|           const resultItem = {
 | |
|             title: item.login,
 | |
|             image: item.avatar_url,
 | |
|           };
 | |
|           if (item.full_name) {
 | |
|             resultItem.description = htmlEscape(item.full_name);
 | |
|           }
 | |
|           if (searchQueryUppercase === item.login.toUpperCase()) {
 | |
|             items.unshift(resultItem);
 | |
|           } else {
 | |
|             items.push(resultItem);
 | |
|           }
 | |
|         });
 | |
| 
 | |
|         if (allowEmailInput && !items.length && looksLikeEmailAddressCheck.test(searchQuery)) {
 | |
|           const resultItem = {
 | |
|             title: searchQuery,
 | |
|             description: allowEmailDescription,
 | |
|           };
 | |
|           items.push(resultItem);
 | |
|         }
 | |
| 
 | |
|         return {results: items};
 | |
|       },
 | |
|     },
 | |
|     searchFields: ['login', 'full_name'],
 | |
|     showNoResults: false,
 | |
|   });
 | |
| }
 |