aboutsummaryrefslogtreecommitdiffstats
path: root/web_src/js/features
diff options
context:
space:
mode:
Diffstat (limited to 'web_src/js/features')
-rw-r--r--web_src/js/features/admin/common.ts (renamed from web_src/js/features/admin/common.js)6
-rw-r--r--web_src/js/features/admin/config.ts (renamed from web_src/js/features/admin/config.js)4
-rw-r--r--web_src/js/features/admin/emails.ts (renamed from web_src/js/features/admin/emails.js)0
-rw-r--r--web_src/js/features/admin/selfcheck.ts (renamed from web_src/js/features/admin/selfcheck.js)4
-rw-r--r--web_src/js/features/admin/users.ts (renamed from web_src/js/features/admin/users.js)0
-rw-r--r--web_src/js/features/autofocus-end.ts (renamed from web_src/js/features/autofocus-end.js)0
-rw-r--r--web_src/js/features/captcha.ts (renamed from web_src/js/features/captcha.js)2
-rw-r--r--web_src/js/features/citation.ts (renamed from web_src/js/features/citation.js)2
-rw-r--r--web_src/js/features/clipboard.ts (renamed from web_src/js/features/clipboard.js)4
-rw-r--r--web_src/js/features/code-frequency.ts (renamed from web_src/js/features/code-frequency.js)0
-rw-r--r--web_src/js/features/codeeditor.ts (renamed from web_src/js/features/codeeditor.js)4
-rw-r--r--web_src/js/features/colorpicker.ts (renamed from web_src/js/features/colorpicker.js)2
-rw-r--r--web_src/js/features/common-button.ts (renamed from web_src/js/features/common-button.js)6
-rw-r--r--web_src/js/features/common-fetch-action.ts (renamed from web_src/js/features/common-fetch-action.js)8
-rw-r--r--web_src/js/features/common-form.ts (renamed from web_src/js/features/common-form.js)4
-rw-r--r--web_src/js/features/common-issue-list.test.ts (renamed from web_src/js/features/common-issue-list.test.js)2
-rw-r--r--web_src/js/features/common-issue-list.ts (renamed from web_src/js/features/common-issue-list.js)4
-rw-r--r--web_src/js/features/common-organization.ts (renamed from web_src/js/features/common-organization.js)4
-rw-r--r--web_src/js/features/common-page.ts (renamed from web_src/js/features/common-page.js)4
-rw-r--r--web_src/js/features/comp/ComboMarkdownEditor.ts (renamed from web_src/js/features/comp/ComboMarkdownEditor.js)22
-rw-r--r--web_src/js/features/comp/ConfirmModal.ts (renamed from web_src/js/features/comp/ConfirmModal.js)4
-rw-r--r--web_src/js/features/comp/EasyMDEToolbarActions.ts (renamed from web_src/js/features/comp/EasyMDEToolbarActions.js)2
-rw-r--r--web_src/js/features/comp/EditorMarkdown.ts (renamed from web_src/js/features/comp/EditorMarkdown.js)0
-rw-r--r--web_src/js/features/comp/EditorUpload.test.ts (renamed from web_src/js/features/comp/EditorUpload.test.js)2
-rw-r--r--web_src/js/features/comp/EditorUpload.ts (renamed from web_src/js/features/comp/EditorUpload.js)10
-rw-r--r--web_src/js/features/comp/LabelEdit.ts (renamed from web_src/js/features/comp/LabelEdit.js)0
-rw-r--r--web_src/js/features/comp/QuickSubmit.ts (renamed from web_src/js/features/comp/QuickSubmit.js)0
-rw-r--r--web_src/js/features/comp/ReactionSelector.ts (renamed from web_src/js/features/comp/ReactionSelector.js)2
-rw-r--r--web_src/js/features/comp/SearchUserBox.ts (renamed from web_src/js/features/comp/SearchUserBox.js)0
-rw-r--r--web_src/js/features/comp/TextExpander.ts (renamed from web_src/js/features/comp/TextExpander.js)4
-rw-r--r--web_src/js/features/comp/WebHookEditor.ts (renamed from web_src/js/features/comp/WebHookEditor.js)4
-rw-r--r--web_src/js/features/contextpopup.ts (renamed from web_src/js/features/contextpopup.js)4
-rw-r--r--web_src/js/features/contributors.ts (renamed from web_src/js/features/contributors.js)0
-rw-r--r--web_src/js/features/copycontent.ts (renamed from web_src/js/features/copycontent.js)6
-rw-r--r--web_src/js/features/dropzone.ts (renamed from web_src/js/features/dropzone.js)12
-rw-r--r--web_src/js/features/emoji.ts (renamed from web_src/js/features/emoji.js)0
-rw-r--r--web_src/js/features/eventsource.sharedworker.ts (renamed from web_src/js/features/eventsource.sharedworker.js)0
-rw-r--r--web_src/js/features/file-fold.ts (renamed from web_src/js/features/file-fold.js)2
-rw-r--r--web_src/js/features/heatmap.ts (renamed from web_src/js/features/heatmap.js)2
-rw-r--r--web_src/js/features/imagediff.ts (renamed from web_src/js/features/imagediff.js)6
-rw-r--r--web_src/js/features/install.ts (renamed from web_src/js/features/install.js)4
-rw-r--r--web_src/js/features/notification.ts (renamed from web_src/js/features/notification.js)6
-rw-r--r--web_src/js/features/org-team.ts (renamed from web_src/js/features/org-team.js)2
-rw-r--r--web_src/js/features/pull-view-file.ts (renamed from web_src/js/features/pull-view-file.js)6
-rw-r--r--web_src/js/features/recent-commits.ts (renamed from web_src/js/features/recent-commits.js)0
-rw-r--r--web_src/js/features/repo-branch.ts (renamed from web_src/js/features/repo-branch.js)2
-rw-r--r--web_src/js/features/repo-code.test.ts (renamed from web_src/js/features/repo-code.test.js)2
-rw-r--r--web_src/js/features/repo-code.ts (renamed from web_src/js/features/repo-code.js)8
-rw-r--r--web_src/js/features/repo-commit.ts (renamed from web_src/js/features/repo-commit.js)4
-rw-r--r--web_src/js/features/repo-common.ts (renamed from web_src/js/features/repo-common.js)8
-rw-r--r--web_src/js/features/repo-diff-commit.ts (renamed from web_src/js/features/repo-diff-commit.js)4
-rw-r--r--web_src/js/features/repo-diff-commitselect.ts (renamed from web_src/js/features/repo-diff-commitselect.js)0
-rw-r--r--web_src/js/features/repo-diff-filetree.ts (renamed from web_src/js/features/repo-diff-filetree.js)0
-rw-r--r--web_src/js/features/repo-diff.ts (renamed from web_src/js/features/repo-diff.js)20
-rw-r--r--web_src/js/features/repo-editor.ts (renamed from web_src/js/features/repo-editor.js)12
-rw-r--r--web_src/js/features/repo-findfile.test.ts (renamed from web_src/js/features/repo-findfile.test.js)2
-rw-r--r--web_src/js/features/repo-findfile.ts (renamed from web_src/js/features/repo-findfile.js)8
-rw-r--r--web_src/js/features/repo-graph.ts (renamed from web_src/js/features/repo-graph.js)4
-rw-r--r--web_src/js/features/repo-home.ts (renamed from web_src/js/features/repo-home.js)8
-rw-r--r--web_src/js/features/repo-issue-content.ts (renamed from web_src/js/features/repo-issue-content.js)8
-rw-r--r--web_src/js/features/repo-issue-edit.ts (renamed from web_src/js/features/repo-issue-edit.js)14
-rw-r--r--web_src/js/features/repo-issue-list.ts (renamed from web_src/js/features/repo-issue-list.js)14
-rw-r--r--web_src/js/features/repo-issue-pr-form.ts (renamed from web_src/js/features/repo-issue-pr-form.js)0
-rw-r--r--web_src/js/features/repo-issue-pr-status.ts (renamed from web_src/js/features/repo-issue-pr-status.js)0
-rw-r--r--web_src/js/features/repo-issue.ts (renamed from web_src/js/features/repo-issue.js)18
-rw-r--r--web_src/js/features/repo-legacy.ts (renamed from web_src/js/features/repo-legacy.js)28
-rw-r--r--web_src/js/features/repo-migrate.ts (renamed from web_src/js/features/repo-migrate.js)4
-rw-r--r--web_src/js/features/repo-migration.ts (renamed from web_src/js/features/repo-migration.js)2
-rw-r--r--web_src/js/features/repo-projects.ts (renamed from web_src/js/features/repo-projects.js)6
-rw-r--r--web_src/js/features/repo-release.ts (renamed from web_src/js/features/repo-release.js)4
-rw-r--r--web_src/js/features/repo-search.ts (renamed from web_src/js/features/repo-search.js)0
-rw-r--r--web_src/js/features/repo-settings.ts (renamed from web_src/js/features/repo-settings.js)6
-rw-r--r--web_src/js/features/repo-template.ts (renamed from web_src/js/features/repo-template.js)2
-rw-r--r--web_src/js/features/repo-unicode-escape.ts (renamed from web_src/js/features/repo-unicode-escape.js)2
-rw-r--r--web_src/js/features/repo-wiki.ts (renamed from web_src/js/features/repo-wiki.js)8
-rw-r--r--web_src/js/features/sshkey-helper.ts (renamed from web_src/js/features/sshkey-helper.js)0
-rw-r--r--web_src/js/features/stopwatch.ts (renamed from web_src/js/features/stopwatch.js)8
-rw-r--r--web_src/js/features/tablesort.ts (renamed from web_src/js/features/tablesort.js)0
-rw-r--r--web_src/js/features/tribute.ts (renamed from web_src/js/features/tribute.js)2
-rw-r--r--web_src/js/features/user-auth-webauthn.ts (renamed from web_src/js/features/user-auth-webauthn.js)6
-rw-r--r--web_src/js/features/user-auth.ts (renamed from web_src/js/features/user-auth.js)2
-rw-r--r--web_src/js/features/user-settings.ts (renamed from web_src/js/features/user-settings.js)2
82 files changed, 189 insertions, 189 deletions
diff --git a/web_src/js/features/admin/common.js b/web_src/js/features/admin/common.ts
index 0f26ce6bc1..934a30a3ee 100644
--- a/web_src/js/features/admin/common.js
+++ b/web_src/js/features/admin/common.ts
@@ -1,7 +1,7 @@
import $ from 'jquery';
-import {checkAppUrl} from '../common-page.js';
-import {hideElem, showElem, toggleElem} from '../../utils/dom.js';
-import {POST} from '../../modules/fetch.js';
+import {checkAppUrl} from '../common-page.ts';
+import {hideElem, showElem, toggleElem} from '../../utils/dom.ts';
+import {POST} from '../../modules/fetch.ts';
const {appSubUrl} = window.config;
diff --git a/web_src/js/features/admin/config.js b/web_src/js/features/admin/config.ts
index c3823425ad..4ccbbacd5b 100644
--- a/web_src/js/features/admin/config.js
+++ b/web_src/js/features/admin/config.ts
@@ -1,5 +1,5 @@
-import {showTemporaryTooltip} from '../../modules/tippy.js';
-import {POST} from '../../modules/fetch.js';
+import {showTemporaryTooltip} from '../../modules/tippy.ts';
+import {POST} from '../../modules/fetch.ts';
const {appSubUrl} = window.config;
diff --git a/web_src/js/features/admin/emails.js b/web_src/js/features/admin/emails.ts
index 46fafa7eff..46fafa7eff 100644
--- a/web_src/js/features/admin/emails.js
+++ b/web_src/js/features/admin/emails.ts
diff --git a/web_src/js/features/admin/selfcheck.js b/web_src/js/features/admin/selfcheck.ts
index 699395b363..498c52ffb5 100644
--- a/web_src/js/features/admin/selfcheck.js
+++ b/web_src/js/features/admin/selfcheck.ts
@@ -1,5 +1,5 @@
-import {toggleElem} from '../../utils/dom.js';
-import {POST} from '../../modules/fetch.js';
+import {toggleElem} from '../../utils/dom.ts';
+import {POST} from '../../modules/fetch.ts';
const {appSubUrl} = window.config;
diff --git a/web_src/js/features/admin/users.js b/web_src/js/features/admin/users.ts
index 7cac603b5c..7cac603b5c 100644
--- a/web_src/js/features/admin/users.js
+++ b/web_src/js/features/admin/users.ts
diff --git a/web_src/js/features/autofocus-end.js b/web_src/js/features/autofocus-end.ts
index da71ce9536..da71ce9536 100644
--- a/web_src/js/features/autofocus-end.js
+++ b/web_src/js/features/autofocus-end.ts
diff --git a/web_src/js/features/captcha.js b/web_src/js/features/captcha.ts
index c803a5006b..23dbae3740 100644
--- a/web_src/js/features/captcha.js
+++ b/web_src/js/features/captcha.ts
@@ -1,4 +1,4 @@
-import {isDarkTheme} from '../utils.js';
+import {isDarkTheme} from '../utils.ts';
export async function initCaptcha() {
const captchaEl = document.querySelector('#captcha');
diff --git a/web_src/js/features/citation.js b/web_src/js/features/citation.ts
index 245ba56f81..ffab75c389 100644
--- a/web_src/js/features/citation.js
+++ b/web_src/js/features/citation.ts
@@ -1,5 +1,5 @@
import $ from 'jquery';
-import {getCurrentLocale} from '../utils.js';
+import {getCurrentLocale} from '../utils.ts';
const {pageData} = window.config;
diff --git a/web_src/js/features/clipboard.js b/web_src/js/features/clipboard.ts
index daf7e2ae2d..8de150d0f9 100644
--- a/web_src/js/features/clipboard.js
+++ b/web_src/js/features/clipboard.ts
@@ -1,5 +1,5 @@
-import {showTemporaryTooltip} from '../modules/tippy.js';
-import {toAbsoluteUrl} from '../utils.js';
+import {showTemporaryTooltip} from '../modules/tippy.ts';
+import {toAbsoluteUrl} from '../utils.ts';
import {clippie} from 'clippie';
const {copy_success, copy_error} = window.config.i18n;
diff --git a/web_src/js/features/code-frequency.js b/web_src/js/features/code-frequency.ts
index da7cd6b2c0..da7cd6b2c0 100644
--- a/web_src/js/features/code-frequency.js
+++ b/web_src/js/features/code-frequency.ts
diff --git a/web_src/js/features/codeeditor.js b/web_src/js/features/codeeditor.ts
index 2b1e64c10d..539db0e969 100644
--- a/web_src/js/features/codeeditor.js
+++ b/web_src/js/features/codeeditor.ts
@@ -1,6 +1,6 @@
import tinycolor from 'tinycolor2';
-import {basename, extname, isObject, isDarkTheme} from '../utils.js';
-import {onInputDebounce} from '../utils/dom.js';
+import {basename, extname, isObject, isDarkTheme} from '../utils.ts';
+import {onInputDebounce} from '../utils/dom.ts';
const languagesByFilename = {};
const languagesByExt = {};
diff --git a/web_src/js/features/colorpicker.js b/web_src/js/features/colorpicker.ts
index a85c04de41..3b5f8c66eb 100644
--- a/web_src/js/features/colorpicker.js
+++ b/web_src/js/features/colorpicker.ts
@@ -1,4 +1,4 @@
-import {createTippy} from '../modules/tippy.js';
+import {createTippy} from '../modules/tippy.ts';
export async function initColorPickers() {
const els = document.querySelectorAll('.js-color-picker-input');
diff --git a/web_src/js/features/common-button.js b/web_src/js/features/common-button.ts
index 2db39871f0..7e335ce7b4 100644
--- a/web_src/js/features/common-button.js
+++ b/web_src/js/features/common-button.ts
@@ -1,7 +1,7 @@
import $ from 'jquery';
-import {POST} from '../modules/fetch.js';
-import {hideElem, showElem, toggleElem} from '../utils/dom.js';
-import {showErrorToast} from '../modules/toast.js';
+import {POST} from '../modules/fetch.ts';
+import {hideElem, showElem, toggleElem} from '../utils/dom.ts';
+import {showErrorToast} from '../modules/toast.ts';
export function initGlobalButtonClickOnEnter() {
$(document).on('keypress', 'div.ui.button,span.ui.button', (e) => {
diff --git a/web_src/js/features/common-fetch-action.js b/web_src/js/features/common-fetch-action.ts
index ddf1ec2e79..76973d8ce7 100644
--- a/web_src/js/features/common-fetch-action.js
+++ b/web_src/js/features/common-fetch-action.ts
@@ -1,8 +1,8 @@
-import {request} from '../modules/fetch.js';
-import {showErrorToast} from '../modules/toast.js';
-import {submitEventSubmitter} from '../utils/dom.js';
+import {request} from '../modules/fetch.ts';
+import {showErrorToast} from '../modules/toast.ts';
+import {submitEventSubmitter} from '../utils/dom.ts';
import {htmlEscape} from 'escape-goat';
-import {confirmModal} from './comp/ConfirmModal.js';
+import {confirmModal} from './comp/ConfirmModal.ts';
const {appSubUrl, i18n} = window.config;
diff --git a/web_src/js/features/common-form.js b/web_src/js/features/common-form.ts
index 96ba06ff80..719a5170b4 100644
--- a/web_src/js/features/common-form.js
+++ b/web_src/js/features/common-form.ts
@@ -1,6 +1,6 @@
import $ from 'jquery';
-import {initAreYouSure} from '../vendor/jquery.are-you-sure.js';
-import {handleGlobalEnterQuickSubmit} from './comp/QuickSubmit.js';
+import {initAreYouSure} from '../vendor/jquery.are-you-sure.ts';
+import {handleGlobalEnterQuickSubmit} from './comp/QuickSubmit.ts';
export function initGlobalFormDirtyLeaveConfirm() {
initAreYouSure(window.jQuery);
diff --git a/web_src/js/features/common-issue-list.test.js b/web_src/js/features/common-issue-list.test.ts
index da7ea64b7c..a4c49a297e 100644
--- a/web_src/js/features/common-issue-list.test.js
+++ b/web_src/js/features/common-issue-list.test.ts
@@ -1,4 +1,4 @@
-import {parseIssueListQuickGotoLink} from './common-issue-list.js';
+import {parseIssueListQuickGotoLink} from './common-issue-list.ts';
test('parseIssueListQuickGotoLink', () => {
expect(parseIssueListQuickGotoLink('/link', '')).toEqual('');
diff --git a/web_src/js/features/common-issue-list.js b/web_src/js/features/common-issue-list.ts
index 707776487b..e8a47eabad 100644
--- a/web_src/js/features/common-issue-list.js
+++ b/web_src/js/features/common-issue-list.ts
@@ -1,5 +1,5 @@
-import {isElemHidden, onInputDebounce, submitEventSubmitter, toggleElem} from '../utils/dom.js';
-import {GET} from '../modules/fetch.js';
+import {isElemHidden, onInputDebounce, submitEventSubmitter, toggleElem} from '../utils/dom.ts';
+import {GET} from '../modules/fetch.ts';
const {appSubUrl} = window.config;
const reIssueIndex = /^(\d+)$/; // eg: "123"
diff --git a/web_src/js/features/common-organization.js b/web_src/js/features/common-organization.ts
index 442714a3d6..085be5fe71 100644
--- a/web_src/js/features/common-organization.js
+++ b/web_src/js/features/common-organization.ts
@@ -1,5 +1,5 @@
-import {initCompLabelEdit} from './comp/LabelEdit.js';
-import {toggleElem} from '../utils/dom.js';
+import {initCompLabelEdit} from './comp/LabelEdit.ts';
+import {toggleElem} from '../utils/dom.ts';
export function initCommonOrganization() {
if (!document.querySelectorAll('.organization').length) {
diff --git a/web_src/js/features/common-page.js b/web_src/js/features/common-page.ts
index 7e89807df4..1a4decd752 100644
--- a/web_src/js/features/common-page.js
+++ b/web_src/js/features/common-page.ts
@@ -1,6 +1,6 @@
import $ from 'jquery';
-import {GET} from '../modules/fetch.js';
-import {showGlobalErrorMessage} from '../bootstrap.js';
+import {GET} from '../modules/fetch.ts';
+import {showGlobalErrorMessage} from '../bootstrap.ts';
const {appUrl} = window.config;
diff --git a/web_src/js/features/comp/ComboMarkdownEditor.js b/web_src/js/features/comp/ComboMarkdownEditor.ts
index f511adab1a..69fe34269b 100644
--- a/web_src/js/features/comp/ComboMarkdownEditor.js
+++ b/web_src/js/features/comp/ComboMarkdownEditor.ts
@@ -1,17 +1,17 @@
import '@github/markdown-toolbar-element';
import '@github/text-expander-element';
import $ from 'jquery';
-import {attachTribute} from '../tribute.js';
-import {hideElem, showElem, autosize, isElemVisible} from '../../utils/dom.js';
-import {initEasyMDEPaste, initTextareaUpload} from './EditorUpload.js';
-import {handleGlobalEnterQuickSubmit} from './QuickSubmit.js';
-import {renderPreviewPanelContent} from '../repo-editor.js';
-import {easyMDEToolbarActions} from './EasyMDEToolbarActions.js';
-import {initTextExpander} from './TextExpander.js';
-import {showErrorToast} from '../../modules/toast.js';
-import {POST} from '../../modules/fetch.js';
-import {initTextareaMarkdown} from './EditorMarkdown.js';
-import {DropzoneCustomEventReloadFiles, initDropzone} from '../dropzone.js';
+import {attachTribute} from '../tribute.ts';
+import {hideElem, showElem, autosize, isElemVisible} from '../../utils/dom.ts';
+import {initEasyMDEPaste, initTextareaUpload} from './EditorUpload.ts';
+import {handleGlobalEnterQuickSubmit} from './QuickSubmit.ts';
+import {renderPreviewPanelContent} from '../repo-editor.ts';
+import {easyMDEToolbarActions} from './EasyMDEToolbarActions.ts';
+import {initTextExpander} from './TextExpander.ts';
+import {showErrorToast} from '../../modules/toast.ts';
+import {POST} from '../../modules/fetch.ts';
+import {initTextareaMarkdown} from './EditorMarkdown.ts';
+import {DropzoneCustomEventReloadFiles, initDropzone} from '../dropzone.ts';
let elementIdCounter = 0;
diff --git a/web_src/js/features/comp/ConfirmModal.js b/web_src/js/features/comp/ConfirmModal.ts
index f9ad5c39cc..9541226a7d 100644
--- a/web_src/js/features/comp/ConfirmModal.js
+++ b/web_src/js/features/comp/ConfirmModal.ts
@@ -1,7 +1,7 @@
import $ from 'jquery';
-import {svg} from '../../svg.js';
+import {svg} from '../../svg.ts';
import {htmlEscape} from 'escape-goat';
-import {createElementFromHTML} from '../../utils/dom.js';
+import {createElementFromHTML} from '../../utils/dom.ts';
const {i18n} = window.config;
diff --git a/web_src/js/features/comp/EasyMDEToolbarActions.js b/web_src/js/features/comp/EasyMDEToolbarActions.ts
index c97d683704..d91dd23d11 100644
--- a/web_src/js/features/comp/EasyMDEToolbarActions.js
+++ b/web_src/js/features/comp/EasyMDEToolbarActions.ts
@@ -1,4 +1,4 @@
-import {svg} from '../../svg.js';
+import {svg} from '../../svg.ts';
export function easyMDEToolbarActions(EasyMDE, editor) {
const actions = {
diff --git a/web_src/js/features/comp/EditorMarkdown.js b/web_src/js/features/comp/EditorMarkdown.ts
index 9ec71aba74..9ec71aba74 100644
--- a/web_src/js/features/comp/EditorMarkdown.js
+++ b/web_src/js/features/comp/EditorMarkdown.ts
diff --git a/web_src/js/features/comp/EditorUpload.test.js b/web_src/js/features/comp/EditorUpload.test.ts
index caecfb91ea..55f3f74389 100644
--- a/web_src/js/features/comp/EditorUpload.test.js
+++ b/web_src/js/features/comp/EditorUpload.test.ts
@@ -1,4 +1,4 @@
-import {removeAttachmentLinksFromMarkdown} from './EditorUpload.js';
+import {removeAttachmentLinksFromMarkdown} from './EditorUpload.ts';
test('removeAttachmentLinksFromMarkdown', () => {
expect(removeAttachmentLinksFromMarkdown('a foo b', 'foo')).toBe('a foo b');
diff --git a/web_src/js/features/comp/EditorUpload.js b/web_src/js/features/comp/EditorUpload.ts
index 8861abfe03..e572692cbf 100644
--- a/web_src/js/features/comp/EditorUpload.js
+++ b/web_src/js/features/comp/EditorUpload.ts
@@ -1,12 +1,12 @@
-import {imageInfo} from '../../utils/image.js';
-import {replaceTextareaSelection} from '../../utils/dom.js';
-import {isUrl} from '../../utils/url.js';
-import {triggerEditorContentChanged} from './EditorMarkdown.js';
+import {imageInfo} from '../../utils/image.ts';
+import {replaceTextareaSelection} from '../../utils/dom.ts';
+import {isUrl} from '../../utils/url.ts';
+import {triggerEditorContentChanged} from './EditorMarkdown.ts';
import {
DropzoneCustomEventRemovedFile,
DropzoneCustomEventUploadDone,
generateMarkdownLinkForAttachment,
-} from '../dropzone.js';
+} from '../dropzone.ts';
let uploadIdCounter = 0;
diff --git a/web_src/js/features/comp/LabelEdit.js b/web_src/js/features/comp/LabelEdit.ts
index 2cc75cc6b0..2cc75cc6b0 100644
--- a/web_src/js/features/comp/LabelEdit.js
+++ b/web_src/js/features/comp/LabelEdit.ts
diff --git a/web_src/js/features/comp/QuickSubmit.js b/web_src/js/features/comp/QuickSubmit.ts
index 3ff29f4fac..3ff29f4fac 100644
--- a/web_src/js/features/comp/QuickSubmit.js
+++ b/web_src/js/features/comp/QuickSubmit.ts
diff --git a/web_src/js/features/comp/ReactionSelector.js b/web_src/js/features/comp/ReactionSelector.ts
index e507b89632..e1dd84bb14 100644
--- a/web_src/js/features/comp/ReactionSelector.js
+++ b/web_src/js/features/comp/ReactionSelector.ts
@@ -1,5 +1,5 @@
import $ from 'jquery';
-import {POST} from '../../modules/fetch.js';
+import {POST} from '../../modules/fetch.ts';
export function initCompReactionSelector() {
for (const container of document.querySelectorAll('.issue-content, .diff-file-body')) {
diff --git a/web_src/js/features/comp/SearchUserBox.js b/web_src/js/features/comp/SearchUserBox.ts
index 7ef23fe4b0..7ef23fe4b0 100644
--- a/web_src/js/features/comp/SearchUserBox.js
+++ b/web_src/js/features/comp/SearchUserBox.ts
diff --git a/web_src/js/features/comp/TextExpander.js b/web_src/js/features/comp/TextExpander.ts
index 128a2ddff0..5afe025d38 100644
--- a/web_src/js/features/comp/TextExpander.js
+++ b/web_src/js/features/comp/TextExpander.ts
@@ -1,5 +1,5 @@
-import {matchEmoji, matchMention} from '../../utils/match.js';
-import {emojiString} from '../emoji.js';
+import {matchEmoji, matchMention} from '../../utils/match.ts';
+import {emojiString} from '../emoji.ts';
export function initTextExpander(expander) {
expander?.addEventListener('text-expander-change', ({detail: {key, provide, text}}) => {
diff --git a/web_src/js/features/comp/WebHookEditor.js b/web_src/js/features/comp/WebHookEditor.ts
index 38ff75e5a3..b13a2ffca3 100644
--- a/web_src/js/features/comp/WebHookEditor.js
+++ b/web_src/js/features/comp/WebHookEditor.ts
@@ -1,5 +1,5 @@
-import {POST} from '../../modules/fetch.js';
-import {hideElem, showElem, toggleElem} from '../../utils/dom.js';
+import {POST} from '../../modules/fetch.ts';
+import {hideElem, showElem, toggleElem} from '../../utils/dom.ts';
export function initCompWebHookEditor() {
if (!document.querySelectorAll('.new.webhook').length) {
diff --git a/web_src/js/features/contextpopup.js b/web_src/js/features/contextpopup.ts
index 6a9325ed1c..5af7d176b6 100644
--- a/web_src/js/features/contextpopup.js
+++ b/web_src/js/features/contextpopup.ts
@@ -1,7 +1,7 @@
import {createApp} from 'vue';
import ContextPopup from '../components/ContextPopup.vue';
-import {parseIssueHref} from '../utils.js';
-import {createTippy} from '../modules/tippy.js';
+import {parseIssueHref} from '../utils.ts';
+import {createTippy} from '../modules/tippy.ts';
export function initContextPopups() {
const refIssues = document.querySelectorAll('.ref-issue');
diff --git a/web_src/js/features/contributors.js b/web_src/js/features/contributors.ts
index 475c66e900..475c66e900 100644
--- a/web_src/js/features/contributors.js
+++ b/web_src/js/features/contributors.ts
diff --git a/web_src/js/features/copycontent.js b/web_src/js/features/copycontent.ts
index ea1e5cf7d0..af867463b2 100644
--- a/web_src/js/features/copycontent.js
+++ b/web_src/js/features/copycontent.ts
@@ -1,7 +1,7 @@
import {clippie} from 'clippie';
-import {showTemporaryTooltip} from '../modules/tippy.js';
-import {convertImage} from '../utils.js';
-import {GET} from '../modules/fetch.js';
+import {showTemporaryTooltip} from '../modules/tippy.ts';
+import {convertImage} from '../utils.ts';
+import {GET} from '../modules/fetch.ts';
const {i18n} = window.config;
diff --git a/web_src/js/features/dropzone.js b/web_src/js/features/dropzone.ts
index f25a613718..392bc1db66 100644
--- a/web_src/js/features/dropzone.js
+++ b/web_src/js/features/dropzone.ts
@@ -1,11 +1,11 @@
-import {svg} from '../svg.js';
+import {svg} from '../svg.ts';
import {htmlEscape} from 'escape-goat';
import {clippie} from 'clippie';
-import {showTemporaryTooltip} from '../modules/tippy.js';
-import {GET, POST} from '../modules/fetch.js';
-import {showErrorToast} from '../modules/toast.js';
-import {createElementFromHTML, createElementFromAttrs} from '../utils/dom.js';
-import {isImageFile, isVideoFile} from '../utils.js';
+import {showTemporaryTooltip} from '../modules/tippy.ts';
+import {GET, POST} from '../modules/fetch.ts';
+import {showErrorToast} from '../modules/toast.ts';
+import {createElementFromHTML, createElementFromAttrs} from '../utils/dom.ts';
+import {isImageFile, isVideoFile} from '../utils.ts';
const {csrfToken, i18n} = window.config;
diff --git a/web_src/js/features/emoji.js b/web_src/js/features/emoji.ts
index 032a3efe8a..032a3efe8a 100644
--- a/web_src/js/features/emoji.js
+++ b/web_src/js/features/emoji.ts
diff --git a/web_src/js/features/eventsource.sharedworker.js b/web_src/js/features/eventsource.sharedworker.ts
index 62581cf687..62581cf687 100644
--- a/web_src/js/features/eventsource.sharedworker.js
+++ b/web_src/js/features/eventsource.sharedworker.ts
diff --git a/web_src/js/features/file-fold.js b/web_src/js/features/file-fold.ts
index 3efefaf339..6fe068341a 100644
--- a/web_src/js/features/file-fold.js
+++ b/web_src/js/features/file-fold.ts
@@ -1,4 +1,4 @@
-import {svg} from '../svg.js';
+import {svg} from '../svg.ts';
// Hides the file if newFold is true, and shows it otherwise. The actual hiding is performed using CSS.
//
diff --git a/web_src/js/features/heatmap.js b/web_src/js/features/heatmap.ts
index 9155e844a2..69cd069a94 100644
--- a/web_src/js/features/heatmap.js
+++ b/web_src/js/features/heatmap.ts
@@ -1,6 +1,6 @@
import {createApp} from 'vue';
import ActivityHeatmap from '../components/ActivityHeatmap.vue';
-import {translateMonth, translateDay} from '../utils.js';
+import {translateMonth, translateDay} from '../utils.ts';
export function initHeatmap() {
const el = document.querySelector('#user-heatmap');
diff --git a/web_src/js/features/imagediff.js b/web_src/js/features/imagediff.ts
index 5934a4b9f4..a6b1f48fb3 100644
--- a/web_src/js/features/imagediff.js
+++ b/web_src/js/features/imagediff.ts
@@ -1,7 +1,7 @@
import $ from 'jquery';
-import {GET} from '../modules/fetch.js';
-import {hideElem, loadElem, queryElemChildren, queryElems} from '../utils/dom.js';
-import {parseDom} from '../utils.js';
+import {GET} from '../modules/fetch.ts';
+import {hideElem, loadElem, queryElemChildren, queryElems} from '../utils/dom.ts';
+import {parseDom} from '../utils.ts';
function getDefaultSvgBoundsIfUndefined(text, src) {
const defaultSize = 300;
diff --git a/web_src/js/features/install.js b/web_src/js/features/install.ts
index 6354db6cdc..3defb7904a 100644
--- a/web_src/js/features/install.js
+++ b/web_src/js/features/install.ts
@@ -1,5 +1,5 @@
-import {hideElem, showElem} from '../utils/dom.js';
-import {GET} from '../modules/fetch.js';
+import {hideElem, showElem} from '../utils/dom.ts';
+import {GET} from '../modules/fetch.ts';
export function initInstall() {
const page = document.querySelector('.page-content.install');
diff --git a/web_src/js/features/notification.js b/web_src/js/features/notification.ts
index c22fc17306..539f779056 100644
--- a/web_src/js/features/notification.js
+++ b/web_src/js/features/notification.ts
@@ -1,7 +1,7 @@
import $ from 'jquery';
-import {GET} from '../modules/fetch.js';
-import {toggleElem} from '../utils/dom.js';
-import {logoutFromWorker} from '../modules/worker.js';
+import {GET} from '../modules/fetch.ts';
+import {toggleElem} from '../utils/dom.ts';
+import {logoutFromWorker} from '../modules/worker.ts';
const {appSubUrl, notificationSettings, assetVersionEncoded} = window.config;
let notificationSequenceNumber = 0;
diff --git a/web_src/js/features/org-team.js b/web_src/js/features/org-team.ts
index c216fdf6a2..e4e98fd990 100644
--- a/web_src/js/features/org-team.js
+++ b/web_src/js/features/org-team.ts
@@ -1,5 +1,5 @@
import $ from 'jquery';
-import {hideElem, showElem} from '../utils/dom.js';
+import {hideElem, showElem} from '../utils/dom.ts';
const {appSubUrl} = window.config;
diff --git a/web_src/js/features/pull-view-file.js b/web_src/js/features/pull-view-file.ts
index 84c5eddb45..9a052207d5 100644
--- a/web_src/js/features/pull-view-file.js
+++ b/web_src/js/features/pull-view-file.ts
@@ -1,6 +1,6 @@
-import {diffTreeStore} from '../modules/stores.js';
-import {setFileFolding} from './file-fold.js';
-import {POST} from '../modules/fetch.js';
+import {diffTreeStore} from '../modules/stores.ts';
+import {setFileFolding} from './file-fold.ts';
+import {POST} from '../modules/fetch.ts';
const {pageData} = window.config;
const prReview = pageData.prReview || {};
diff --git a/web_src/js/features/recent-commits.js b/web_src/js/features/recent-commits.ts
index b7f7c49987..b7f7c49987 100644
--- a/web_src/js/features/recent-commits.js
+++ b/web_src/js/features/recent-commits.ts
diff --git a/web_src/js/features/repo-branch.js b/web_src/js/features/repo-branch.ts
index b9ffc6127f..3261bfe37e 100644
--- a/web_src/js/features/repo-branch.js
+++ b/web_src/js/features/repo-branch.ts
@@ -1,5 +1,5 @@
import $ from 'jquery';
-import {toggleElem} from '../utils/dom.js';
+import {toggleElem} from '../utils/dom.ts';
export function initRepoBranchButton() {
initRepoCreateBranchButton();
diff --git a/web_src/js/features/repo-code.test.js b/web_src/js/features/repo-code.test.ts
index 0e0062a787..27554aa847 100644
--- a/web_src/js/features/repo-code.test.js
+++ b/web_src/js/features/repo-code.test.ts
@@ -1,4 +1,4 @@
-import {singleAnchorRegex, rangeAnchorRegex} from './repo-code.js';
+import {singleAnchorRegex, rangeAnchorRegex} from './repo-code.ts';
test('singleAnchorRegex', () => {
expect(singleAnchorRegex.test('#L0')).toEqual(false);
diff --git a/web_src/js/features/repo-code.js b/web_src/js/features/repo-code.ts
index 658fa7e11c..0068d6c0b5 100644
--- a/web_src/js/features/repo-code.js
+++ b/web_src/js/features/repo-code.ts
@@ -1,9 +1,9 @@
import $ from 'jquery';
-import {svg} from '../svg.js';
-import {invertFileFolding} from './file-fold.js';
-import {createTippy} from '../modules/tippy.js';
+import {svg} from '../svg.ts';
+import {invertFileFolding} from './file-fold.ts';
+import {createTippy} from '../modules/tippy.ts';
import {clippie} from 'clippie';
-import {toAbsoluteUrl} from '../utils.js';
+import {toAbsoluteUrl} from '../utils.ts';
export const singleAnchorRegex = /^#(L|n)([1-9][0-9]*)$/;
export const rangeAnchorRegex = /^#(L[1-9][0-9]*)-(L[1-9][0-9]*)$/;
diff --git a/web_src/js/features/repo-commit.js b/web_src/js/features/repo-commit.ts
index f61ea08a42..56493443d9 100644
--- a/web_src/js/features/repo-commit.js
+++ b/web_src/js/features/repo-commit.ts
@@ -1,5 +1,5 @@
-import {createTippy} from '../modules/tippy.js';
-import {toggleElem} from '../utils/dom.js';
+import {createTippy} from '../modules/tippy.ts';
+import {toggleElem} from '../utils/dom.ts';
export function initRepoEllipsisButton() {
for (const button of document.querySelectorAll('.js-toggle-commit-body')) {
diff --git a/web_src/js/features/repo-common.js b/web_src/js/features/repo-common.ts
index 88aa93d850..ac63ef2145 100644
--- a/web_src/js/features/repo-common.js
+++ b/web_src/js/features/repo-common.ts
@@ -1,8 +1,8 @@
import $ from 'jquery';
-import {hideElem, queryElems, showElem} from '../utils/dom.js';
-import {POST} from '../modules/fetch.js';
-import {showErrorToast} from '../modules/toast.js';
-import {sleep} from '../utils.js';
+import {hideElem, queryElems, showElem} from '../utils/dom.ts';
+import {POST} from '../modules/fetch.ts';
+import {showErrorToast} from '../modules/toast.ts';
+import {sleep} from '../utils.ts';
async function onDownloadArchive(e) {
e.preventDefault();
diff --git a/web_src/js/features/repo-diff-commit.js b/web_src/js/features/repo-diff-commit.ts
index aa7fc38360..c115e6300a 100644
--- a/web_src/js/features/repo-diff-commit.js
+++ b/web_src/js/features/repo-diff-commit.ts
@@ -1,5 +1,5 @@
-import {hideElem, showElem, toggleElem} from '../utils/dom.js';
-import {GET} from '../modules/fetch.js';
+import {hideElem, showElem, toggleElem} from '../utils/dom.ts';
+import {GET} from '../modules/fetch.ts';
async function loadBranchesAndTags(area, loadingButton) {
loadingButton.classList.add('disabled');
diff --git a/web_src/js/features/repo-diff-commitselect.js b/web_src/js/features/repo-diff-commitselect.ts
index 2d0d63946c..2d0d63946c 100644
--- a/web_src/js/features/repo-diff-commitselect.js
+++ b/web_src/js/features/repo-diff-commitselect.ts
diff --git a/web_src/js/features/repo-diff-filetree.js b/web_src/js/features/repo-diff-filetree.ts
index 6d9533d066..6d9533d066 100644
--- a/web_src/js/features/repo-diff-filetree.js
+++ b/web_src/js/features/repo-diff-filetree.ts
diff --git a/web_src/js/features/repo-diff.js b/web_src/js/features/repo-diff.ts
index 279f6da757..5d6388a43e 100644
--- a/web_src/js/features/repo-diff.js
+++ b/web_src/js/features/repo-diff.ts
@@ -1,14 +1,14 @@
import $ from 'jquery';
-import {initCompReactionSelector} from './comp/ReactionSelector.js';
-import {initRepoIssueContentHistory} from './repo-issue-content.js';
-import {initDiffFileTree} from './repo-diff-filetree.js';
-import {initDiffCommitSelect} from './repo-diff-commitselect.js';
-import {validateTextareaNonEmpty} from './comp/ComboMarkdownEditor.js';
-import {initViewedCheckboxListenerFor, countAndUpdateViewedFiles, initExpandAndCollapseFilesButton} from './pull-view-file.js';
-import {initImageDiff} from './imagediff.js';
-import {showErrorToast} from '../modules/toast.js';
-import {submitEventSubmitter, queryElemSiblings, hideElem, showElem, animateOnce} from '../utils/dom.js';
-import {POST, GET} from '../modules/fetch.js';
+import {initCompReactionSelector} from './comp/ReactionSelector.ts';
+import {initRepoIssueContentHistory} from './repo-issue-content.ts';
+import {initDiffFileTree} from './repo-diff-filetree.ts';
+import {initDiffCommitSelect} from './repo-diff-commitselect.ts';
+import {validateTextareaNonEmpty} from './comp/ComboMarkdownEditor.ts';
+import {initViewedCheckboxListenerFor, countAndUpdateViewedFiles, initExpandAndCollapseFilesButton} from './pull-view-file.ts';
+import {initImageDiff} from './imagediff.ts';
+import {showErrorToast} from '../modules/toast.ts';
+import {submitEventSubmitter, queryElemSiblings, hideElem, showElem, animateOnce} from '../utils/dom.ts';
+import {POST, GET} from '../modules/fetch.ts';
const {pageData, i18n} = window.config;
diff --git a/web_src/js/features/repo-editor.js b/web_src/js/features/repo-editor.ts
index f25da911df..8bf23fc60e 100644
--- a/web_src/js/features/repo-editor.js
+++ b/web_src/js/features/repo-editor.ts
@@ -1,11 +1,11 @@
import $ from 'jquery';
import {htmlEscape} from 'escape-goat';
-import {createCodeEditor} from './codeeditor.js';
-import {hideElem, queryElems, showElem} from '../utils/dom.js';
-import {initMarkupContent} from '../markup/content.js';
-import {attachRefIssueContextPopup} from './contextpopup.js';
-import {POST} from '../modules/fetch.js';
-import {initDropzone} from './dropzone.js';
+import {createCodeEditor} from './codeeditor.ts';
+import {hideElem, queryElems, showElem} from '../utils/dom.ts';
+import {initMarkupContent} from '../markup/content.ts';
+import {attachRefIssueContextPopup} from './contextpopup.ts';
+import {POST} from '../modules/fetch.ts';
+import {initDropzone} from './dropzone.ts';
function initEditPreviewTab($form) {
const $tabMenu = $form.find('.repo-editor-menu');
diff --git a/web_src/js/features/repo-findfile.test.js b/web_src/js/features/repo-findfile.test.ts
index 2d96ed4463..3ff1a796e2 100644
--- a/web_src/js/features/repo-findfile.test.js
+++ b/web_src/js/features/repo-findfile.test.ts
@@ -1,4 +1,4 @@
-import {strSubMatch, calcMatchedWeight, filterRepoFilesWeighted} from './repo-findfile.js';
+import {strSubMatch, calcMatchedWeight, filterRepoFilesWeighted} from './repo-findfile.ts';
describe('Repo Find Files', () => {
test('strSubMatch', () => {
diff --git a/web_src/js/features/repo-findfile.js b/web_src/js/features/repo-findfile.ts
index 828acfa65c..1f151d7056 100644
--- a/web_src/js/features/repo-findfile.js
+++ b/web_src/js/features/repo-findfile.ts
@@ -1,7 +1,7 @@
-import {svg} from '../svg.js';
-import {toggleElem} from '../utils/dom.js';
-import {pathEscapeSegments} from '../utils/url.js';
-import {GET} from '../modules/fetch.js';
+import {svg} from '../svg.ts';
+import {toggleElem} from '../utils/dom.ts';
+import {pathEscapeSegments} from '../utils/url.ts';
+import {GET} from '../modules/fetch.ts';
const threshold = 50;
let files = [];
diff --git a/web_src/js/features/repo-graph.js b/web_src/js/features/repo-graph.ts
index 7084e40977..ff64d0854b 100644
--- a/web_src/js/features/repo-graph.js
+++ b/web_src/js/features/repo-graph.ts
@@ -1,6 +1,6 @@
import $ from 'jquery';
-import {hideElem, showElem} from '../utils/dom.js';
-import {GET} from '../modules/fetch.js';
+import {hideElem, showElem} from '../utils/dom.ts';
+import {GET} from '../modules/fetch.ts';
export function initRepoGraphGit() {
const graphContainer = document.querySelector('#git-graph-container');
diff --git a/web_src/js/features/repo-home.js b/web_src/js/features/repo-home.ts
index 3a8e41bde1..f3e39ddb3c 100644
--- a/web_src/js/features/repo-home.js
+++ b/web_src/js/features/repo-home.ts
@@ -1,8 +1,8 @@
import $ from 'jquery';
-import {stripTags} from '../utils.js';
-import {hideElem, queryElemChildren, showElem} from '../utils/dom.js';
-import {POST} from '../modules/fetch.js';
-import {showErrorToast} from '../modules/toast.js';
+import {stripTags} from '../utils.ts';
+import {hideElem, queryElemChildren, showElem} from '../utils/dom.ts';
+import {POST} from '../modules/fetch.ts';
+import {showErrorToast} from '../modules/toast.ts';
const {appSubUrl} = window.config;
diff --git a/web_src/js/features/repo-issue-content.js b/web_src/js/features/repo-issue-content.ts
index cef2f49008..7aaf9765ee 100644
--- a/web_src/js/features/repo-issue-content.js
+++ b/web_src/js/features/repo-issue-content.ts
@@ -1,8 +1,8 @@
import $ from 'jquery';
-import {svg} from '../svg.js';
-import {showErrorToast} from '../modules/toast.js';
-import {GET, POST} from '../modules/fetch.js';
-import {showElem} from '../utils/dom.js';
+import {svg} from '../svg.ts';
+import {showErrorToast} from '../modules/toast.ts';
+import {GET, POST} from '../modules/fetch.ts';
+import {showElem} from '../utils/dom.ts';
const {appSubUrl} = window.config;
let i18nTextEdited;
diff --git a/web_src/js/features/repo-issue-edit.js b/web_src/js/features/repo-issue-edit.ts
index 8bc0c02bcb..33a7a10923 100644
--- a/web_src/js/features/repo-issue-edit.js
+++ b/web_src/js/features/repo-issue-edit.ts
@@ -1,11 +1,11 @@
import $ from 'jquery';
-import {handleReply} from './repo-issue.js';
-import {getComboMarkdownEditor, initComboMarkdownEditor} from './comp/ComboMarkdownEditor.js';
-import {POST} from '../modules/fetch.js';
-import {showErrorToast} from '../modules/toast.js';
-import {hideElem, showElem} from '../utils/dom.js';
-import {attachRefIssueContextPopup} from './contextpopup.js';
-import {initCommentContent, initMarkupContent} from '../markup/content.js';
+import {handleReply} from './repo-issue.ts';
+import {getComboMarkdownEditor, initComboMarkdownEditor} from './comp/ComboMarkdownEditor.ts';
+import {POST} from '../modules/fetch.ts';
+import {showErrorToast} from '../modules/toast.ts';
+import {hideElem, showElem} from '../utils/dom.ts';
+import {attachRefIssueContextPopup} from './contextpopup.ts';
+import {initCommentContent, initMarkupContent} from '../markup/content.ts';
async function onEditContent(event) {
event.preventDefault();
diff --git a/web_src/js/features/repo-issue-list.js b/web_src/js/features/repo-issue-list.ts
index c8ae91d453..1e4a880f2e 100644
--- a/web_src/js/features/repo-issue-list.js
+++ b/web_src/js/features/repo-issue-list.ts
@@ -1,12 +1,12 @@
import $ from 'jquery';
-import {updateIssuesMeta} from './repo-issue.js';
-import {toggleElem, hideElem, isElemHidden} from '../utils/dom.js';
+import {updateIssuesMeta} from './repo-issue.ts';
+import {toggleElem, hideElem, isElemHidden} from '../utils/dom.ts';
import {htmlEscape} from 'escape-goat';
-import {confirmModal} from './comp/ConfirmModal.js';
-import {showErrorToast} from '../modules/toast.js';
-import {createSortable} from '../modules/sortable.js';
-import {DELETE, POST} from '../modules/fetch.js';
-import {parseDom} from '../utils.js';
+import {confirmModal} from './comp/ConfirmModal.ts';
+import {showErrorToast} from '../modules/toast.ts';
+import {createSortable} from '../modules/sortable.ts';
+import {DELETE, POST} from '../modules/fetch.ts';
+import {parseDom} from '../utils.ts';
function initRepoIssueListCheckboxes() {
const issueSelectAll = document.querySelector('.issue-checkbox-all');
diff --git a/web_src/js/features/repo-issue-pr-form.js b/web_src/js/features/repo-issue-pr-form.ts
index 94a2857340..94a2857340 100644
--- a/web_src/js/features/repo-issue-pr-form.js
+++ b/web_src/js/features/repo-issue-pr-form.ts
diff --git a/web_src/js/features/repo-issue-pr-status.js b/web_src/js/features/repo-issue-pr-status.ts
index 7890b9c48d..7890b9c48d 100644
--- a/web_src/js/features/repo-issue-pr-status.js
+++ b/web_src/js/features/repo-issue-pr-status.ts
diff --git a/web_src/js/features/repo-issue.js b/web_src/js/features/repo-issue.ts
index 57c4f19163..4377292a64 100644
--- a/web_src/js/features/repo-issue.js
+++ b/web_src/js/features/repo-issue.ts
@@ -1,12 +1,12 @@
import $ from 'jquery';
import {htmlEscape} from 'escape-goat';
-import {createTippy, showTemporaryTooltip} from '../modules/tippy.js';
-import {hideElem, showElem, toggleElem} from '../utils/dom.js';
-import {setFileFolding} from './file-fold.js';
-import {getComboMarkdownEditor, initComboMarkdownEditor} from './comp/ComboMarkdownEditor.js';
-import {toAbsoluteUrl} from '../utils.js';
-import {GET, POST} from '../modules/fetch.js';
-import {showErrorToast} from '../modules/toast.js';
+import {createTippy, showTemporaryTooltip} from '../modules/tippy.ts';
+import {hideElem, showElem, toggleElem} from '../utils/dom.ts';
+import {setFileFolding} from './file-fold.ts';
+import {getComboMarkdownEditor, initComboMarkdownEditor} from './comp/ComboMarkdownEditor.ts';
+import {toAbsoluteUrl} from '../utils.ts';
+import {GET, POST} from '../modules/fetch.ts';
+import {showErrorToast} from '../modules/toast.ts';
const {appSubUrl} = window.config;
@@ -19,7 +19,7 @@ export function initRepoIssueTimeTracking() {
},
}).modal('show');
$('.issue-start-time-modal input').on('keydown', (e) => {
- if ((e.keyCode || e.key) === 13) {
+ if (e.key === 'Enter') {
$('#add_time_manual_form').trigger('submit');
}
});
@@ -146,7 +146,7 @@ export function initRepoIssueSidebarList() {
});
$('.menu .ui.dropdown.label-filter').on('keydown', (e) => {
- if (e.altKey && e.keyCode === 13) {
+ if (e.altKey && e.key === 'Enter') {
const selectedItem = document.querySelector('.menu .ui.dropdown.label-filter .menu .item.selected');
if (selectedItem) {
excludeLabel(selectedItem);
diff --git a/web_src/js/features/repo-legacy.js b/web_src/js/features/repo-legacy.ts
index de4f611b5d..b26803c76d 100644
--- a/web_src/js/features/repo-legacy.js
+++ b/web_src/js/features/repo-legacy.ts
@@ -4,24 +4,24 @@ import {
initRepoIssueComments, initRepoIssueDependencyDelete, initRepoIssueReferenceIssue,
initRepoIssueTitleEdit, initRepoIssueWipToggle,
initRepoPullRequestUpdate, updateIssuesMeta, initIssueTemplateCommentEditors, initSingleCommentEditor,
-} from './repo-issue.js';
-import {initUnicodeEscapeButton} from './repo-unicode-escape.js';
-import {svg} from '../svg.js';
+} from './repo-issue.ts';
+import {initUnicodeEscapeButton} from './repo-unicode-escape.ts';
+import {svg} from '../svg.ts';
import {htmlEscape} from 'escape-goat';
import {initRepoBranchTagSelector} from '../components/RepoBranchTagSelector.vue';
import {
initRepoCloneLink, initRepoCommonBranchOrTagDropdown, initRepoCommonFilterSearchDropdown,
-} from './repo-common.js';
-import {initCitationFileCopyContent} from './citation.js';
-import {initCompLabelEdit} from './comp/LabelEdit.js';
-import {initRepoDiffConversationNav} from './repo-diff.js';
-import {initCompReactionSelector} from './comp/ReactionSelector.js';
-import {initRepoSettingBranches} from './repo-settings.js';
-import {initRepoPullRequestMergeForm} from './repo-issue-pr-form.js';
-import {initRepoPullRequestCommitStatus} from './repo-issue-pr-status.js';
-import {hideElem, queryElemChildren, showElem} from '../utils/dom.js';
-import {POST} from '../modules/fetch.js';
-import {initRepoIssueCommentEdit} from './repo-issue-edit.js';
+} from './repo-common.ts';
+import {initCitationFileCopyContent} from './citation.ts';
+import {initCompLabelEdit} from './comp/LabelEdit.ts';
+import {initRepoDiffConversationNav} from './repo-diff.ts';
+import {initCompReactionSelector} from './comp/ReactionSelector.ts';
+import {initRepoSettingBranches} from './repo-settings.ts';
+import {initRepoPullRequestMergeForm} from './repo-issue-pr-form.ts';
+import {initRepoPullRequestCommitStatus} from './repo-issue-pr-status.ts';
+import {hideElem, queryElemChildren, showElem} from '../utils/dom.ts';
+import {POST} from '../modules/fetch.ts';
+import {initRepoIssueCommentEdit} from './repo-issue-edit.ts';
// if there are draft comments, confirm before reloading, to avoid losing comments
function reloadConfirmDraftComment() {
diff --git a/web_src/js/features/repo-migrate.js b/web_src/js/features/repo-migrate.ts
index b8157e2dad..dc36177940 100644
--- a/web_src/js/features/repo-migrate.js
+++ b/web_src/js/features/repo-migrate.ts
@@ -1,5 +1,5 @@
-import {hideElem, showElem} from '../utils/dom.js';
-import {GET, POST} from '../modules/fetch.js';
+import {hideElem, showElem} from '../utils/dom.ts';
+import {GET, POST} from '../modules/fetch.ts';
const {appSubUrl} = window.config;
diff --git a/web_src/js/features/repo-migration.js b/web_src/js/features/repo-migration.ts
index 7f7aa237ee..8f79ee1423 100644
--- a/web_src/js/features/repo-migration.js
+++ b/web_src/js/features/repo-migration.ts
@@ -1,4 +1,4 @@
-import {hideElem, showElem, toggleElem} from '../utils/dom.js';
+import {hideElem, showElem, toggleElem} from '../utils/dom.ts';
const service = document.querySelector('#service_type');
const user = document.querySelector('#auth_username');
diff --git a/web_src/js/features/repo-projects.js b/web_src/js/features/repo-projects.ts
index 706942363d..950d78fec7 100644
--- a/web_src/js/features/repo-projects.js
+++ b/web_src/js/features/repo-projects.ts
@@ -1,7 +1,7 @@
import $ from 'jquery';
-import {contrastColor} from '../utils/color.js';
-import {createSortable} from '../modules/sortable.js';
-import {POST, DELETE, PUT} from '../modules/fetch.js';
+import {contrastColor} from '../utils/color.ts';
+import {createSortable} from '../modules/sortable.ts';
+import {POST, DELETE, PUT} from '../modules/fetch.ts';
function updateIssueCount(cards) {
const parent = cards.parentElement;
diff --git a/web_src/js/features/repo-release.js b/web_src/js/features/repo-release.ts
index 2be1ec58c6..2928376c7f 100644
--- a/web_src/js/features/repo-release.js
+++ b/web_src/js/features/repo-release.ts
@@ -1,5 +1,5 @@
-import {hideElem, showElem} from '../utils/dom.js';
-import {initComboMarkdownEditor} from './comp/ComboMarkdownEditor.js';
+import {hideElem, showElem} from '../utils/dom.ts';
+import {initComboMarkdownEditor} from './comp/ComboMarkdownEditor.ts';
export function initRepoRelease() {
document.addEventListener('click', (e) => {
diff --git a/web_src/js/features/repo-search.js b/web_src/js/features/repo-search.ts
index 185f6119d9..185f6119d9 100644
--- a/web_src/js/features/repo-search.js
+++ b/web_src/js/features/repo-search.ts
diff --git a/web_src/js/features/repo-settings.js b/web_src/js/features/repo-settings.ts
index 6590c2b56c..97211d035e 100644
--- a/web_src/js/features/repo-settings.js
+++ b/web_src/js/features/repo-settings.ts
@@ -1,8 +1,8 @@
import $ from 'jquery';
import {minimatch} from 'minimatch';
-import {createMonaco} from './codeeditor.js';
-import {onInputDebounce, queryElems, toggleElem} from '../utils/dom.js';
-import {POST} from '../modules/fetch.js';
+import {createMonaco} from './codeeditor.ts';
+import {onInputDebounce, queryElems, toggleElem} from '../utils/dom.ts';
+import {POST} from '../modules/fetch.ts';
const {appSubUrl, csrfToken} = window.config;
diff --git a/web_src/js/features/repo-template.js b/web_src/js/features/repo-template.ts
index 5f63e8b3ba..fbd7b656ed 100644
--- a/web_src/js/features/repo-template.js
+++ b/web_src/js/features/repo-template.ts
@@ -1,6 +1,6 @@
import $ from 'jquery';
import {htmlEscape} from 'escape-goat';
-import {hideElem, showElem} from '../utils/dom.js';
+import {hideElem, showElem} from '../utils/dom.ts';
const {appSubUrl} = window.config;
diff --git a/web_src/js/features/repo-unicode-escape.js b/web_src/js/features/repo-unicode-escape.ts
index d878532001..7a9bca7a37 100644
--- a/web_src/js/features/repo-unicode-escape.js
+++ b/web_src/js/features/repo-unicode-escape.ts
@@ -1,4 +1,4 @@
-import {hideElem, queryElemSiblings, showElem, toggleElem} from '../utils/dom.js';
+import {hideElem, queryElemSiblings, showElem, toggleElem} from '../utils/dom.ts';
export function initUnicodeEscapeButton() {
document.addEventListener('click', (e) => {
diff --git a/web_src/js/features/repo-wiki.js b/web_src/js/features/repo-wiki.ts
index 03a2c68c5a..2c7fb1b1b8 100644
--- a/web_src/js/features/repo-wiki.js
+++ b/web_src/js/features/repo-wiki.ts
@@ -1,7 +1,7 @@
-import {initMarkupContent} from '../markup/content.js';
-import {validateTextareaNonEmpty, initComboMarkdownEditor} from './comp/ComboMarkdownEditor.js';
-import {fomanticMobileScreen} from '../modules/fomantic.js';
-import {POST} from '../modules/fetch.js';
+import {initMarkupContent} from '../markup/content.ts';
+import {validateTextareaNonEmpty, initComboMarkdownEditor} from './comp/ComboMarkdownEditor.ts';
+import {fomanticMobileScreen} from '../modules/fomantic.ts';
+import {POST} from '../modules/fetch.ts';
async function initRepoWikiFormEditor() {
const editArea = document.querySelector('.repository.wiki .combo-markdown-editor textarea');
diff --git a/web_src/js/features/sshkey-helper.js b/web_src/js/features/sshkey-helper.ts
index 5531c18451..5531c18451 100644
--- a/web_src/js/features/sshkey-helper.js
+++ b/web_src/js/features/sshkey-helper.ts
diff --git a/web_src/js/features/stopwatch.js b/web_src/js/features/stopwatch.ts
index 79d9892b74..d89aa4bfac 100644
--- a/web_src/js/features/stopwatch.js
+++ b/web_src/js/features/stopwatch.ts
@@ -1,7 +1,7 @@
-import {createTippy} from '../modules/tippy.js';
-import {GET} from '../modules/fetch.js';
-import {hideElem, showElem} from '../utils/dom.js';
-import {logoutFromWorker} from '../modules/worker.js';
+import {createTippy} from '../modules/tippy.ts';
+import {GET} from '../modules/fetch.ts';
+import {hideElem, showElem} from '../utils/dom.ts';
+import {logoutFromWorker} from '../modules/worker.ts';
const {appSubUrl, notificationSettings, enableTimeTracking, assetVersionEncoded} = window.config;
diff --git a/web_src/js/features/tablesort.js b/web_src/js/features/tablesort.ts
index 436fe0a594..436fe0a594 100644
--- a/web_src/js/features/tablesort.js
+++ b/web_src/js/features/tablesort.ts
diff --git a/web_src/js/features/tribute.js b/web_src/js/features/tribute.ts
index 30e957f2e6..193c65076f 100644
--- a/web_src/js/features/tribute.js
+++ b/web_src/js/features/tribute.ts
@@ -1,4 +1,4 @@
-import {emojiKeys, emojiHTML, emojiString} from './emoji.js';
+import {emojiKeys, emojiHTML, emojiString} from './emoji.ts';
import {htmlEscape} from 'escape-goat';
function makeCollections({mentions, emoji}) {
diff --git a/web_src/js/features/user-auth-webauthn.js b/web_src/js/features/user-auth-webauthn.ts
index a317fee7e2..7b7508c4f1 100644
--- a/web_src/js/features/user-auth-webauthn.js
+++ b/web_src/js/features/user-auth-webauthn.ts
@@ -1,6 +1,6 @@
-import {encodeURLEncodedBase64, decodeURLEncodedBase64} from '../utils.js';
-import {showElem} from '../utils/dom.js';
-import {GET, POST} from '../modules/fetch.js';
+import {encodeURLEncodedBase64, decodeURLEncodedBase64} from '../utils.ts';
+import {showElem} from '../utils/dom.ts';
+import {GET, POST} from '../modules/fetch.ts';
const {appSubUrl} = window.config;
diff --git a/web_src/js/features/user-auth.js b/web_src/js/features/user-auth.ts
index 355843ccf2..f1f34bc806 100644
--- a/web_src/js/features/user-auth.js
+++ b/web_src/js/features/user-auth.ts
@@ -1,4 +1,4 @@
-import {checkAppUrl} from './common-page.js';
+import {checkAppUrl} from './common-page.ts';
export function initUserAuthOauth2() {
const outer = document.querySelector('#oauth2-login-navigator');
diff --git a/web_src/js/features/user-settings.js b/web_src/js/features/user-settings.ts
index 8cb1f0582f..41939c0f52 100644
--- a/web_src/js/features/user-settings.js
+++ b/web_src/js/features/user-settings.ts
@@ -1,4 +1,4 @@
-import {hideElem, showElem} from '../utils/dom.js';
+import {hideElem, showElem} from '../utils/dom.ts';
export function initUserSettings() {
if (!document.querySelectorAll('.user.settings.profile').length) return;