-
-
Notifications
You must be signed in to change notification settings - Fork 5.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Show messages for users if the ROOT_URL is wrong, show JavaScript errors #18971
Merged
Merged
Changes from 8 commits
Commits
Show all changes
15 commits
Select commit
Hold shift + click to select a range
3d369bb
Show messages for users if the ROOT_URL is wrong
wxiaoguang 8b2b973
Merge branch 'main' into detect-wrong-url
wxiaoguang 94e6862
add global error handler
wxiaoguang 8d72750
Merge branch 'main' into detect-wrong-url
wxiaoguang 223900e
add comments
wxiaoguang 7228a3a
use specialized CSS class "js-global-error", end users still have a c…
wxiaoguang 8f42b72
make sure error handler can always be executed
wxiaoguang dd95b55
Some people like to modify the `head.tmpl`, so we separate the script…
wxiaoguang 1dfbe4d
fix lint
wxiaoguang 48eaaee
Add ==== DO NOT EDIT ==== warning to head_script.tmpl
wxiaoguang e1236a9
fix comment
wxiaoguang 93446c6
add appUrl to window.config again
wxiaoguang ce5a9b7
No necessary to support html msg, so just use pre-line to render new …
wxiaoguang f655cf6
Merge branch 'main' into detect-wrong-url
wxiaoguang a880d80
Merge branch 'main' into detect-wrong-url
6543 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
<script> | ||
<!-- /* eslint-disable */ --> | ||
window.addEventListener('error', function(e) {window._globalHandlerErrors=window._globalHandlerErrors||[]; window._globalHandlerErrors.push(e);}); | ||
window.config = { | ||
appVer: '{{AppVer}}', | ||
appUrl: '{{AppUrl}}', | ||
appSubUrl: '{{AppSubUrl}}', | ||
assetUrlPrefix: '{{AssetUrlPrefix}}', | ||
runModeIsProd: {{.RunModeIsProd}}, | ||
customEmojis: {{CustomEmojis}}, | ||
useServiceWorker: {{UseServiceWorker}}, | ||
csrfToken: '{{.CsrfToken}}', | ||
pageData: {{.PageData}}, | ||
requireTribute: {{.RequireTribute}}, | ||
notificationSettings: {{NotificationSettings}}, {{/*a map provided by NewFuncMap in helper.go*/}} | ||
enableTimeTracking: {{EnableTimetracking}}, | ||
{{if .RequireTribute}} | ||
tributeValues: Array.from(new Map([ | ||
{{ range .Participants }} | ||
['{{.Name}}', {key: '{{.Name}} {{.FullName}}', value: '{{.Name}}', | ||
name: '{{.Name}}', fullname: '{{.FullName}}', avatar: '{{.AvatarLink}}'}], | ||
{{ end }} | ||
{{ range .Assignees }} | ||
['{{.Name}}', {key: '{{.Name}} {{.FullName}}', value: '{{.Name}}', | ||
name: '{{.Name}}', fullname: '{{.FullName}}', avatar: '{{.AvatarLink}}'}], | ||
{{ end }} | ||
{{ range .MentionableTeams }} | ||
['{{$.MentionableTeamsOrg}}/{{.Name}}', {key: '{{$.MentionableTeamsOrg}}/{{.Name}}', value: '{{$.MentionableTeamsOrg}}/{{.Name}}', | ||
name: '{{$.MentionableTeamsOrg}}/{{.Name}}', avatar: '{{$.MentionableTeamsOrgAvatar}}'}], | ||
{{ end }} | ||
]).values()), | ||
{{end}} | ||
mermaidMaxSourceCharacters: {{MermaidMaxSourceCharacters}}, | ||
{{/* this global i18n object should only contain general texts. for specialized texts, it should be provided inside the related modules by: (1) API response (2) HTML data-attribute (3) PageData */}} | ||
i18n: { | ||
copy_success: '{{.i18n.Tr "copy_success"}}', | ||
copy_error: '{{.i18n.Tr "copy_error"}}', | ||
error_occurred: '{{.i18n.Tr "error.occurred"}}', | ||
network_error: '{{.i18n.Tr "error.network_error"}}', | ||
}, | ||
}; | ||
{{/* in case some pages don't render the pageData, we make sure it is an object to prevent null access */}} | ||
window.config.pageData = window.config.pageData || {}; | ||
</script> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
import {joinPaths} from './utils.js'; | ||
|
||
// DO NOT IMPORT window.config HERE! | ||
// to make sure the error handler always works, we should never import `window.config`, because some user's custom template breaks it. | ||
|
||
// This sets up the URL prefix used in webpack's chunk loading. | ||
// This file must be imported before any lazy-loading is being attempted. | ||
__webpack_public_path__ = joinPaths(window?.config?.assetUrlPrefix ?? '/', '/'); | ||
|
||
export function showGlobalErrorMessageHtml(msgHtml) { | ||
const pageContent = document.querySelector('.page-content'); | ||
if (!pageContent) return; | ||
const el = document.createElement('div'); | ||
el.innerHTML = `<div class="ui container negative message center aligned js-global-error">${msgHtml}</div>`; | ||
pageContent.prepend(el.childNodes[0]); | ||
} | ||
|
||
/** | ||
* @param {ErrorEvent} e | ||
*/ | ||
function processWindowErrorEvent(e) { | ||
showGlobalErrorMessageHtml(`JavaScript error: ${e.message} (${e.filename} @ ${e.lineno}:${e.colno}). Open browser console to see more details.`); | ||
} | ||
|
||
function initGlobalErrorHandler() { | ||
if (!window.config) { | ||
showGlobalErrorMessageHtml(`Gitea JavaScript code couldn't run correctly, please check your custom templates`); | ||
} | ||
|
||
// we added an event handler for window error at the very beginning of head.tmpl | ||
// the handler calls `_globalHandlerErrors.push` (array method) to record all errors occur before this init | ||
// then in this init, we can collect all error events and show them | ||
for (const e of window._globalHandlerErrors || []) { | ||
processWindowErrorEvent(e); | ||
} | ||
// then, change _globalHandlerErrors to an object with push method, to process further error events directly | ||
window._globalHandlerErrors = {'push': (e) => processWindowErrorEvent(e)}; | ||
} | ||
|
||
initGlobalErrorHandler(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should probably create a separate webpack chunk that loads before
index.js
for this instead of inlining it. That way, you also shouldn't need this global variable.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
However,
index.js
is very late, the layout is:So the
window.addEventListener
must be the first one in script tag.