code.gitea.io/gitea@v1.22.3/web_src/js/features/comp/SearchUserBox.js (about)

     1  import $ from 'jquery';
     2  import {htmlEscape} from 'escape-goat';
     3  
     4  const {appSubUrl} = window.config;
     5  const looksLikeEmailAddressCheck = /^\S+@\S+$/;
     6  
     7  export function initCompSearchUserBox() {
     8    const searchUserBox = document.getElementById('search-user-box');
     9    if (!searchUserBox) return;
    10  
    11    const $searchUserBox = $(searchUserBox);
    12    const allowEmailInput = searchUserBox.getAttribute('data-allow-email') === 'true';
    13    const allowEmailDescription = searchUserBox.getAttribute('data-allow-email-description') ?? undefined;
    14    $searchUserBox.search({
    15      minCharacters: 2,
    16      apiSettings: {
    17        url: `${appSubUrl}/user/search?active=1&q={query}`,
    18        onResponse(response) {
    19          const items = [];
    20          const searchQuery = $searchUserBox.find('input').val();
    21          const searchQueryUppercase = searchQuery.toUpperCase();
    22          $.each(response.data, (_i, item) => {
    23            const resultItem = {
    24              title: item.login,
    25              image: item.avatar_url,
    26            };
    27            if (item.full_name) {
    28              resultItem.description = htmlEscape(item.full_name);
    29            }
    30            if (searchQueryUppercase === item.login.toUpperCase()) {
    31              items.unshift(resultItem);
    32            } else {
    33              items.push(resultItem);
    34            }
    35          });
    36  
    37          if (allowEmailInput && !items.length && looksLikeEmailAddressCheck.test(searchQuery)) {
    38            const resultItem = {
    39              title: searchQuery,
    40              description: allowEmailDescription,
    41            };
    42            items.push(resultItem);
    43          }
    44  
    45          return {results: items};
    46        },
    47      },
    48      searchFields: ['login', 'full_name'],
    49      showNoResults: false,
    50    });
    51  }