mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 19:38:23 +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.
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			52 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,
 | |
|   });
 | |
| }
 |