aboutsummaryrefslogtreecommitdiffstats
path: root/web_src/js/features/comp/SearchUserBox.ts
diff options
context:
space:
mode:
authorsilverwind <me@silverwind.io>2024-07-07 17:32:30 +0200
committerGitHub <noreply@github.com>2024-07-07 15:32:30 +0000
commit5791a73e75b630db3cade3e606c45eb8d8a641cb (patch)
tree3042132ac6f486723ff2ae42245a5b8a09d98c72 /web_src/js/features/comp/SearchUserBox.ts
parent5115c278ff8f3f8beebb172ce20a939a10476dfd (diff)
downloadgitea-5791a73e75b630db3cade3e606c45eb8d8a641cb.tar.gz
gitea-5791a73e75b630db3cade3e606c45eb8d8a641cb.zip
Convert frontend code to typescript (#31559)
None of the frontend js/ts files was touched besides these two commands (edit: no longer true, I touched one file in https://github.com/go-gitea/gitea/pull/31559/commits/61105d0618e285d97e95044bfb64415f364a4526 because of a deprecation that was not showing before the rename). `tsc` currently reports 778 errors, so I have disabled it in CI as planned. Everything appears to work fine.
Diffstat (limited to 'web_src/js/features/comp/SearchUserBox.ts')
-rw-r--r--web_src/js/features/comp/SearchUserBox.ts51
1 files changed, 51 insertions, 0 deletions
diff --git a/web_src/js/features/comp/SearchUserBox.ts b/web_src/js/features/comp/SearchUserBox.ts
new file mode 100644
index 0000000000..7ef23fe4b0
--- /dev/null
+++ b/web_src/js/features/comp/SearchUserBox.ts
@@ -0,0 +1,51 @@
+import $ from 'jquery';
+import {htmlEscape} from 'escape-goat';
+
+const {appSubUrl} = window.config;
+const looksLikeEmailAddressCheck = /^\S+@\S+$/;
+
+export function initCompSearchUserBox() {
+ const searchUserBox = document.querySelector('#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,
+ });
+}