From faa28b5a44912f1c63afddab9396bae9e6fe061c Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Wed, 19 Jul 2023 00:06:43 +0800 Subject: [PATCH] Move public asset files to the proper directory (#25907) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move `public/*` to `public/assets/*` Some old PRs (like #15219) introduced inconsistent directory system. For example: why the local directory "public" is accessed by `http://site/assets`? How to serve the ".well-known" files properly in the public directory? For convention rules, the "public" directory is widely used for the website's root directory. It shouldn't be an exception for Gitea. So, this PR makes the things consistent: * `http://site/assets/foo` means `{CustomPath}/public/assets/foo`. * `{CustomPath}/public/.well-known` and `{CustomPath}/public/robots.txt` can be used in the future. This PR is also a prerequisite for a clear solution for: * #21942 * #25892 * discourse.gitea.io: [.well-known path serving custom files behind proxy?](https://discourse.gitea.io/t/well-known-path-serving-custom-files-behind-proxy/5445/1) This PR is breaking for users who have custom "public" files (CSS/JS). After getting approvals, I will update the documents. ---- ## ⚠️ BREAKING ⚠️ If you have files in your "custom/public/" folder, please move them to "custom/public/assets/". --------- Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: Giteabot --- .dockerignore | 8 +- .gitattributes | 2 +- .gitignore | 8 +- Makefile | 6 +- README.md | 2 +- README_ZH.md | 2 +- build/generate-images.js | 14 +- build/generate-svg.js | 6 +- custom/conf/app.example.ini | 4 +- .../doc/administration/cmd-embedded.en-us.md | 6 +- .../config-cheat-sheet.en-us.md | 4 +- .../administration/customizing-gitea.en-us.md | 28 ++-- .../external-renderers.en-us.md | 2 +- .../doc/development/hacking-on-gitea.en-us.md | 2 +- docs/content/doc/help/faq.en-us.md | 2 +- modules/public/public.go | 2 +- modules/svg/svg.go | 4 +- public/{ => assets}/img/404.png | Bin public/{ => assets}/img/500.png | Bin public/{ => assets}/img/apple-touch-icon.png | Bin public/{ => assets}/img/avatar_default.png | Bin public/{ => assets}/img/checkmark.png | Bin public/{ => assets}/img/dingtalk.ico | Bin public/{ => assets}/img/discord.png | Bin public/{ => assets}/img/emoji/codeberg.png | Bin public/{ => assets}/img/emoji/git.png | Bin public/{ => assets}/img/emoji/gitea.png | Bin public/{ => assets}/img/emoji/github.png | Bin public/{ => assets}/img/emoji/gitlab.png | Bin public/{ => assets}/img/emoji/gogs.png | Bin public/{ => assets}/img/failed.png | Bin public/{ => assets}/img/favicon.png | Bin public/{ => assets}/img/favicon.svg | 0 public/{ => assets}/img/feishu.png | Bin public/{ => assets}/img/gitea.svg | 0 public/{ => assets}/img/gogs.ico | Bin public/{ => assets}/img/loading.png | Bin public/{ => assets}/img/logo.png | Bin public/{ => assets}/img/logo.svg | 0 public/{ => assets}/img/msteams.png | Bin public/{ => assets}/img/openid-16x16.png | Bin public/{ => assets}/img/packagist.png | Bin public/{ => assets}/img/repo_default.png | Bin public/{ => assets}/img/slack.png | Bin .../img/svg/fontawesome-openid.svg | 0 .../{ => assets}/img/svg/fontawesome-save.svg | 0 .../{ => assets}/img/svg/fontawesome-send.svg | 0 .../img/svg/fontawesome-windows.svg | 0 public/{ => assets}/img/svg/gitea-alpine.svg | 0 public/{ => assets}/img/svg/gitea-azuread.svg | 0 .../{ => assets}/img/svg/gitea-azureadv2.svg | 0 .../{ => assets}/img/svg/gitea-bitbucket.svg | 0 public/{ => assets}/img/svg/gitea-cargo.svg | 0 public/{ => assets}/img/svg/gitea-chef.svg | 0 .../{ => assets}/img/svg/gitea-codebase.svg | 0 .../{ => assets}/img/svg/gitea-composer.svg | 0 public/{ => assets}/img/svg/gitea-conan.svg | 0 public/{ => assets}/img/svg/gitea-conda.svg | 0 public/{ => assets}/img/svg/gitea-cran.svg | 0 public/{ => assets}/img/svg/gitea-debian.svg | 0 public/{ => assets}/img/svg/gitea-discord.svg | 0 .../img/svg/gitea-double-chevron-left.svg | 0 .../img/svg/gitea-double-chevron-right.svg | 0 public/{ => assets}/img/svg/gitea-dropbox.svg | 0 .../img/svg/gitea-empty-checkbox.svg | 0 .../img/svg/gitea-exclamation.svg | 0 .../{ => assets}/img/svg/gitea-facebook.svg | 0 public/{ => assets}/img/svg/gitea-git.svg | 0 .../{ => assets}/img/svg/gitea-gitbucket.svg | 0 public/{ => assets}/img/svg/gitea-gitea.svg | 0 public/{ => assets}/img/svg/gitea-gitlab.svg | 0 public/{ => assets}/img/svg/gitea-go.svg | 0 public/{ => assets}/img/svg/gitea-gogs.svg | 0 public/{ => assets}/img/svg/gitea-google.svg | 0 public/{ => assets}/img/svg/gitea-helm.svg | 0 public/{ => assets}/img/svg/gitea-join.svg | 0 .../{ => assets}/img/svg/gitea-lock-cog.svg | 0 public/{ => assets}/img/svg/gitea-lock.svg | 0 .../{ => assets}/img/svg/gitea-mastodon.svg | 0 public/{ => assets}/img/svg/gitea-matrix.svg | 0 public/{ => assets}/img/svg/gitea-maven.svg | 0 .../img/svg/gitea-microsoftonline.svg | 0 .../{ => assets}/img/svg/gitea-nextcloud.svg | 0 public/{ => assets}/img/svg/gitea-npm.svg | 0 public/{ => assets}/img/svg/gitea-nuget.svg | 0 public/{ => assets}/img/svg/gitea-onedev.svg | 0 public/{ => assets}/img/svg/gitea-openid.svg | 0 public/{ => assets}/img/svg/gitea-pub.svg | 0 public/{ => assets}/img/svg/gitea-python.svg | 0 public/{ => assets}/img/svg/gitea-rpm.svg | 0 .../{ => assets}/img/svg/gitea-rubygems.svg | 0 public/{ => assets}/img/svg/gitea-split.svg | 0 public/{ => assets}/img/svg/gitea-swift.svg | 0 public/{ => assets}/img/svg/gitea-twitter.svg | 0 public/{ => assets}/img/svg/gitea-unlock.svg | 0 public/{ => assets}/img/svg/gitea-vagrant.svg | 0 public/{ => assets}/img/svg/gitea-vscode.svg | 0 .../{ => assets}/img/svg/gitea-whitespace.svg | 0 public/{ => assets}/img/svg/gitea-yandex.svg | 0 .../img/svg/material-invert-colors.svg | 0 .../{ => assets}/img/svg/material-palette.svg | 0 .../img/svg/octicon-accessibility-inset.svg | 0 .../img/svg/octicon-accessibility.svg | 0 .../img/svg/octicon-alert-fill.svg | 0 public/{ => assets}/img/svg/octicon-alert.svg | 0 public/{ => assets}/img/svg/octicon-apps.svg | 0 .../{ => assets}/img/svg/octicon-archive.svg | 0 .../img/svg/octicon-arrow-both.svg | 0 .../img/svg/octicon-arrow-down-left.svg | 0 .../img/svg/octicon-arrow-down-right.svg | 0 .../img/svg/octicon-arrow-down.svg | 0 .../img/svg/octicon-arrow-left.svg | 0 .../img/svg/octicon-arrow-right.svg | 0 .../img/svg/octicon-arrow-switch.svg | 0 .../img/svg/octicon-arrow-up-left.svg | 0 .../img/svg/octicon-arrow-up-right.svg | 0 .../{ => assets}/img/svg/octicon-arrow-up.svg | 0 .../{ => assets}/img/svg/octicon-beaker.svg | 0 .../img/svg/octicon-bell-fill.svg | 0 .../img/svg/octicon-bell-slash.svg | 0 public/{ => assets}/img/svg/octicon-bell.svg | 0 .../{ => assets}/img/svg/octicon-blocked.svg | 0 public/{ => assets}/img/svg/octicon-bold.svg | 0 public/{ => assets}/img/svg/octicon-book.svg | 0 .../img/svg/octicon-bookmark-slash.svg | 0 .../{ => assets}/img/svg/octicon-bookmark.svg | 0 .../img/svg/octicon-briefcase.svg | 0 .../img/svg/octicon-broadcast.svg | 0 .../{ => assets}/img/svg/octicon-browser.svg | 0 public/{ => assets}/img/svg/octicon-bug.svg | 0 public/{ => assets}/img/svg/octicon-cache.svg | 0 .../{ => assets}/img/svg/octicon-calendar.svg | 0 .../img/svg/octicon-check-circle-fill.svg | 0 .../img/svg/octicon-check-circle.svg | 0 public/{ => assets}/img/svg/octicon-check.svg | 0 .../{ => assets}/img/svg/octicon-checkbox.svg | 0 .../img/svg/octicon-checklist.svg | 0 .../img/svg/octicon-chevron-down.svg | 0 .../img/svg/octicon-chevron-left.svg | 0 .../img/svg/octicon-chevron-right.svg | 0 .../img/svg/octicon-chevron-up.svg | 0 .../img/svg/octicon-circle-slash.svg | 0 .../{ => assets}/img/svg/octicon-circle.svg | 0 .../img/svg/octicon-clock-fill.svg | 0 public/{ => assets}/img/svg/octicon-clock.svg | 0 .../img/svg/octicon-cloud-offline.svg | 0 public/{ => assets}/img/svg/octicon-cloud.svg | 0 .../img/svg/octicon-code-of-conduct.svg | 0 .../img/svg/octicon-code-review.svg | 0 .../img/svg/octicon-code-square.svg | 0 public/{ => assets}/img/svg/octicon-code.svg | 0 .../img/svg/octicon-codescan-checkmark.svg | 0 .../{ => assets}/img/svg/octicon-codescan.svg | 0 .../img/svg/octicon-codespaces.svg | 0 .../{ => assets}/img/svg/octicon-columns.svg | 0 .../img/svg/octicon-command-palette.svg | 0 .../img/svg/octicon-comment-discussion.svg | 0 .../{ => assets}/img/svg/octicon-comment.svg | 0 .../img/svg/octicon-container.svg | 0 .../img/svg/octicon-copilot-error.svg | 0 .../img/svg/octicon-copilot-warning.svg | 0 .../{ => assets}/img/svg/octicon-copilot.svg | 0 public/{ => assets}/img/svg/octicon-copy.svg | 0 public/{ => assets}/img/svg/octicon-cpu.svg | 0 .../img/svg/octicon-credit-card.svg | 0 .../img/svg/octicon-cross-reference.svg | 0 public/{ => assets}/img/svg/octicon-dash.svg | 0 .../{ => assets}/img/svg/octicon-database.svg | 0 .../img/svg/octicon-dependabot.svg | 0 .../img/svg/octicon-desktop-download.svg | 0 .../img/svg/octicon-device-camera-video.svg | 0 .../img/svg/octicon-device-camera.svg | 0 .../img/svg/octicon-device-desktop.svg | 0 .../img/svg/octicon-device-mobile.svg | 0 .../{ => assets}/img/svg/octicon-devices.svg | 0 .../{ => assets}/img/svg/octicon-diamond.svg | 0 .../img/svg/octicon-diff-added.svg | 0 .../img/svg/octicon-diff-ignored.svg | 0 .../img/svg/octicon-diff-modified.svg | 0 .../img/svg/octicon-diff-removed.svg | 0 .../img/svg/octicon-diff-renamed.svg | 0 public/{ => assets}/img/svg/octicon-diff.svg | 0 .../img/svg/octicon-discussion-closed.svg | 0 .../img/svg/octicon-discussion-duplicate.svg | 0 .../img/svg/octicon-discussion-outdated.svg | 0 .../{ => assets}/img/svg/octicon-dot-fill.svg | 0 public/{ => assets}/img/svg/octicon-dot.svg | 0 .../{ => assets}/img/svg/octicon-download.svg | 0 .../img/svg/octicon-duplicate.svg | 0 .../{ => assets}/img/svg/octicon-ellipsis.svg | 0 .../img/svg/octicon-eye-closed.svg | 0 public/{ => assets}/img/svg/octicon-eye.svg | 0 .../img/svg/octicon-feed-discussion.svg | 0 .../img/svg/octicon-feed-forked.svg | 0 .../img/svg/octicon-feed-heart.svg | 0 .../img/svg/octicon-feed-merged.svg | 0 .../img/svg/octicon-feed-person.svg | 0 .../img/svg/octicon-feed-repo.svg | 0 .../img/svg/octicon-feed-rocket.svg | 0 .../img/svg/octicon-feed-star.svg | 0 .../{ => assets}/img/svg/octicon-feed-tag.svg | 0 .../img/svg/octicon-feed-trophy.svg | 0 .../img/svg/octicon-file-added.svg | 0 .../img/svg/octicon-file-badge.svg | 0 .../img/svg/octicon-file-binary.svg | 0 .../img/svg/octicon-file-code.svg | 0 .../img/svg/octicon-file-diff.svg | 0 .../img/svg/octicon-file-directory-fill.svg | 0 .../svg/octicon-file-directory-open-fill.svg | 0 .../svg/octicon-file-directory-symlink.svg | 0 .../img/svg/octicon-file-directory.svg | 0 .../img/svg/octicon-file-moved.svg | 0 .../img/svg/octicon-file-removed.svg | 0 .../img/svg/octicon-file-submodule.svg | 0 .../img/svg/octicon-file-symlink-file.svg | 0 .../{ => assets}/img/svg/octicon-file-zip.svg | 0 public/{ => assets}/img/svg/octicon-file.svg | 0 .../{ => assets}/img/svg/octicon-filter.svg | 0 .../img/svg/octicon-fiscal-host.svg | 0 public/{ => assets}/img/svg/octicon-flame.svg | 0 .../img/svg/octicon-fold-down.svg | 0 .../{ => assets}/img/svg/octicon-fold-up.svg | 0 public/{ => assets}/img/svg/octicon-fold.svg | 0 public/{ => assets}/img/svg/octicon-gear.svg | 0 public/{ => assets}/img/svg/octicon-gift.svg | 0 .../img/svg/octicon-git-branch.svg | 0 .../img/svg/octicon-git-commit.svg | 0 .../img/svg/octicon-git-compare.svg | 0 .../img/svg/octicon-git-merge-queue.svg | 0 .../img/svg/octicon-git-merge.svg | 0 .../svg/octicon-git-pull-request-closed.svg | 0 .../svg/octicon-git-pull-request-draft.svg | 0 .../img/svg/octicon-git-pull-request.svg | 0 public/{ => assets}/img/svg/octicon-globe.svg | 0 public/{ => assets}/img/svg/octicon-goal.svg | 0 .../{ => assets}/img/svg/octicon-grabber.svg | 0 public/{ => assets}/img/svg/octicon-graph.svg | 0 public/{ => assets}/img/svg/octicon-hash.svg | 0 .../{ => assets}/img/svg/octicon-heading.svg | 0 .../img/svg/octicon-heart-fill.svg | 0 public/{ => assets}/img/svg/octicon-heart.svg | 0 .../{ => assets}/img/svg/octicon-history.svg | 0 public/{ => assets}/img/svg/octicon-home.svg | 0 .../img/svg/octicon-horizontal-rule.svg | 0 .../img/svg/octicon-hourglass.svg | 0 public/{ => assets}/img/svg/octicon-hubot.svg | 0 .../{ => assets}/img/svg/octicon-id-badge.svg | 0 public/{ => assets}/img/svg/octicon-image.svg | 0 public/{ => assets}/img/svg/octicon-inbox.svg | 0 .../{ => assets}/img/svg/octicon-infinity.svg | 0 public/{ => assets}/img/svg/octicon-info.svg | 0 .../img/svg/octicon-issue-closed.svg | 0 .../img/svg/octicon-issue-draft.svg | 0 .../img/svg/octicon-issue-opened.svg | 0 .../img/svg/octicon-issue-reopened.svg | 0 .../img/svg/octicon-issue-tracked-by.svg | 0 .../img/svg/octicon-issue-tracks.svg | 0 .../{ => assets}/img/svg/octicon-italic.svg | 0 .../img/svg/octicon-iterations.svg | 0 .../img/svg/octicon-kebab-horizontal.svg | 0 .../img/svg/octicon-key-asterisk.svg | 0 public/{ => assets}/img/svg/octicon-key.svg | 0 public/{ => assets}/img/svg/octicon-law.svg | 0 .../img/svg/octicon-light-bulb.svg | 0 .../img/svg/octicon-link-external.svg | 0 public/{ => assets}/img/svg/octicon-link.svg | 0 .../img/svg/octicon-list-ordered.svg | 0 .../img/svg/octicon-list-unordered.svg | 0 .../{ => assets}/img/svg/octicon-location.svg | 0 public/{ => assets}/img/svg/octicon-lock.svg | 0 public/{ => assets}/img/svg/octicon-log.svg | 0 .../img/svg/octicon-logo-gist.svg | 0 .../img/svg/octicon-logo-github.svg | 0 public/{ => assets}/img/svg/octicon-mail.svg | 0 .../img/svg/octicon-mark-github.svg | 0 .../{ => assets}/img/svg/octicon-markdown.svg | 0 .../img/svg/octicon-megaphone.svg | 0 .../{ => assets}/img/svg/octicon-mention.svg | 0 public/{ => assets}/img/svg/octicon-meter.svg | 0 .../img/svg/octicon-milestone.svg | 0 .../{ => assets}/img/svg/octicon-mirror.svg | 0 public/{ => assets}/img/svg/octicon-moon.svg | 0 .../img/svg/octicon-mortar-board.svg | 0 .../img/svg/octicon-move-to-bottom.svg | 0 .../img/svg/octicon-move-to-end.svg | 0 .../img/svg/octicon-move-to-start.svg | 0 .../img/svg/octicon-move-to-top.svg | 0 .../img/svg/octicon-multi-select.svg | 0 public/{ => assets}/img/svg/octicon-mute.svg | 0 .../{ => assets}/img/svg/octicon-no-entry.svg | 0 .../img/svg/octicon-north-star.svg | 0 public/{ => assets}/img/svg/octicon-note.svg | 0 .../{ => assets}/img/svg/octicon-number.svg | 0 .../img/svg/octicon-organization.svg | 0 .../img/svg/octicon-package-dependencies.svg | 0 .../img/svg/octicon-package-dependents.svg | 0 .../{ => assets}/img/svg/octicon-package.svg | 0 .../img/svg/octicon-paintbrush.svg | 0 .../img/svg/octicon-paper-airplane.svg | 0 .../img/svg/octicon-paperclip.svg | 0 .../img/svg/octicon-passkey-fill.svg | 0 public/{ => assets}/img/svg/octicon-paste.svg | 0 .../{ => assets}/img/svg/octicon-pencil.svg | 0 .../{ => assets}/img/svg/octicon-people.svg | 0 .../img/svg/octicon-person-add.svg | 0 .../img/svg/octicon-person-fill.svg | 0 .../{ => assets}/img/svg/octicon-person.svg | 0 .../img/svg/octicon-pin-slash.svg | 0 public/{ => assets}/img/svg/octicon-pin.svg | 0 .../img/svg/octicon-pivot-column.svg | 0 public/{ => assets}/img/svg/octicon-play.svg | 0 public/{ => assets}/img/svg/octicon-plug.svg | 0 .../img/svg/octicon-plus-circle.svg | 0 public/{ => assets}/img/svg/octicon-plus.svg | 0 .../img/svg/octicon-project-roadmap.svg | 0 .../img/svg/octicon-project-symlink.svg | 0 .../img/svg/octicon-project-template.svg | 0 .../{ => assets}/img/svg/octicon-project.svg | 0 public/{ => assets}/img/svg/octicon-pulse.svg | 0 .../{ => assets}/img/svg/octicon-question.svg | 0 public/{ => assets}/img/svg/octicon-quote.svg | 0 public/{ => assets}/img/svg/octicon-read.svg | 0 public/{ => assets}/img/svg/octicon-redo.svg | 0 .../img/svg/octicon-rel-file-path.svg | 0 public/{ => assets}/img/svg/octicon-reply.svg | 0 .../img/svg/octicon-repo-clone.svg | 0 .../img/svg/octicon-repo-deleted.svg | 0 .../img/svg/octicon-repo-forked.svg | 0 .../img/svg/octicon-repo-locked.svg | 0 .../img/svg/octicon-repo-pull.svg | 0 .../img/svg/octicon-repo-push.svg | 0 .../img/svg/octicon-repo-template.svg | 0 public/{ => assets}/img/svg/octicon-repo.svg | 0 .../{ => assets}/img/svg/octicon-report.svg | 0 .../{ => assets}/img/svg/octicon-rocket.svg | 0 public/{ => assets}/img/svg/octicon-rows.svg | 0 public/{ => assets}/img/svg/octicon-rss.svg | 0 public/{ => assets}/img/svg/octicon-ruby.svg | 0 .../img/svg/octicon-screen-full.svg | 0 .../img/svg/octicon-screen-normal.svg | 0 .../{ => assets}/img/svg/octicon-search.svg | 0 .../{ => assets}/img/svg/octicon-server.svg | 0 .../img/svg/octicon-share-android.svg | 0 public/{ => assets}/img/svg/octicon-share.svg | 0 .../img/svg/octicon-shield-check.svg | 0 .../img/svg/octicon-shield-lock.svg | 0 .../img/svg/octicon-shield-slash.svg | 0 .../{ => assets}/img/svg/octicon-shield-x.svg | 0 .../{ => assets}/img/svg/octicon-shield.svg | 0 .../img/svg/octicon-sidebar-collapse.svg | 0 .../img/svg/octicon-sidebar-expand.svg | 0 .../{ => assets}/img/svg/octicon-sign-in.svg | 0 .../{ => assets}/img/svg/octicon-sign-out.svg | 0 .../img/svg/octicon-single-select.svg | 0 .../img/svg/octicon-skip-fill.svg | 0 public/{ => assets}/img/svg/octicon-skip.svg | 0 .../{ => assets}/img/svg/octicon-sliders.svg | 0 .../{ => assets}/img/svg/octicon-smiley.svg | 0 .../{ => assets}/img/svg/octicon-sort-asc.svg | 0 .../img/svg/octicon-sort-desc.svg | 0 .../img/svg/octicon-sparkle-fill.svg | 0 .../img/svg/octicon-sponsor-tiers.svg | 0 .../img/svg/octicon-square-fill.svg | 0 .../{ => assets}/img/svg/octicon-square.svg | 0 .../{ => assets}/img/svg/octicon-squirrel.svg | 0 public/{ => assets}/img/svg/octicon-stack.svg | 0 .../img/svg/octicon-star-fill.svg | 0 public/{ => assets}/img/svg/octicon-star.svg | 0 public/{ => assets}/img/svg/octicon-stop.svg | 0 .../img/svg/octicon-stopwatch.svg | 0 .../img/svg/octicon-strikethrough.svg | 0 public/{ => assets}/img/svg/octicon-sun.svg | 0 public/{ => assets}/img/svg/octicon-sync.svg | 0 .../img/svg/octicon-tab-external.svg | 0 public/{ => assets}/img/svg/octicon-table.svg | 0 public/{ => assets}/img/svg/octicon-tag.svg | 0 .../{ => assets}/img/svg/octicon-tasklist.svg | 0 .../img/svg/octicon-telescope-fill.svg | 0 .../img/svg/octicon-telescope.svg | 0 .../{ => assets}/img/svg/octicon-terminal.svg | 0 .../img/svg/octicon-three-bars.svg | 0 .../img/svg/octicon-thumbsdown.svg | 0 .../{ => assets}/img/svg/octicon-thumbsup.svg | 0 public/{ => assets}/img/svg/octicon-tools.svg | 0 .../octicon-tracked-by-closed-completed.svg | 0 .../octicon-tracked-by-closed-not-planned.svg | 0 public/{ => assets}/img/svg/octicon-trash.svg | 0 .../img/svg/octicon-triangle-down.svg | 0 .../img/svg/octicon-triangle-left.svg | 0 .../img/svg/octicon-triangle-right.svg | 0 .../img/svg/octicon-triangle-up.svg | 0 .../{ => assets}/img/svg/octicon-trophy.svg | 0 .../img/svg/octicon-typography.svg | 0 public/{ => assets}/img/svg/octicon-undo.svg | 0 .../{ => assets}/img/svg/octicon-unfold.svg | 0 .../{ => assets}/img/svg/octicon-unlink.svg | 0 .../{ => assets}/img/svg/octicon-unlock.svg | 0 .../{ => assets}/img/svg/octicon-unmute.svg | 0 .../{ => assets}/img/svg/octicon-unread.svg | 0 .../img/svg/octicon-unverified.svg | 0 .../{ => assets}/img/svg/octicon-upload.svg | 0 .../{ => assets}/img/svg/octicon-verified.svg | 0 .../{ => assets}/img/svg/octicon-versions.svg | 0 public/{ => assets}/img/svg/octicon-video.svg | 0 .../{ => assets}/img/svg/octicon-webhook.svg | 0 .../{ => assets}/img/svg/octicon-workflow.svg | 0 .../img/svg/octicon-x-circle-fill.svg | 0 .../{ => assets}/img/svg/octicon-x-circle.svg | 0 public/{ => assets}/img/svg/octicon-x.svg | 0 public/{ => assets}/img/svg/octicon-zap.svg | 0 .../{ => assets}/img/svg/octicon-zoom-in.svg | 0 .../{ => assets}/img/svg/octicon-zoom-out.svg | 0 public/{ => assets}/img/telegram.png | Bin public/{ => assets}/img/wechatwork.png | Bin snap/snapcraft.yaml | 6 +- web_src/js/svg.js | 136 +++++++++--------- webpack.config.js | 4 +- 417 files changed, 125 insertions(+), 123 deletions(-) rename public/{ => assets}/img/404.png (100%) rename public/{ => assets}/img/500.png (100%) rename public/{ => assets}/img/apple-touch-icon.png (100%) rename public/{ => assets}/img/avatar_default.png (100%) rename public/{ => assets}/img/checkmark.png (100%) rename public/{ => assets}/img/dingtalk.ico (100%) rename public/{ => assets}/img/discord.png (100%) rename public/{ => assets}/img/emoji/codeberg.png (100%) rename public/{ => assets}/img/emoji/git.png (100%) rename public/{ => assets}/img/emoji/gitea.png (100%) rename public/{ => assets}/img/emoji/github.png (100%) rename public/{ => assets}/img/emoji/gitlab.png (100%) rename public/{ => assets}/img/emoji/gogs.png (100%) rename public/{ => assets}/img/failed.png (100%) rename public/{ => assets}/img/favicon.png (100%) rename public/{ => assets}/img/favicon.svg (100%) rename public/{ => assets}/img/feishu.png (100%) rename public/{ => assets}/img/gitea.svg (100%) rename public/{ => assets}/img/gogs.ico (100%) rename public/{ => assets}/img/loading.png (100%) rename public/{ => assets}/img/logo.png (100%) rename public/{ => assets}/img/logo.svg (100%) rename public/{ => assets}/img/msteams.png (100%) rename public/{ => assets}/img/openid-16x16.png (100%) rename public/{ => assets}/img/packagist.png (100%) rename public/{ => assets}/img/repo_default.png (100%) rename public/{ => assets}/img/slack.png (100%) rename public/{ => assets}/img/svg/fontawesome-openid.svg (100%) rename public/{ => assets}/img/svg/fontawesome-save.svg (100%) rename public/{ => assets}/img/svg/fontawesome-send.svg (100%) rename public/{ => assets}/img/svg/fontawesome-windows.svg (100%) rename public/{ => assets}/img/svg/gitea-alpine.svg (100%) rename public/{ => assets}/img/svg/gitea-azuread.svg (100%) rename public/{ => assets}/img/svg/gitea-azureadv2.svg (100%) rename public/{ => assets}/img/svg/gitea-bitbucket.svg (100%) rename public/{ => assets}/img/svg/gitea-cargo.svg (100%) rename public/{ => assets}/img/svg/gitea-chef.svg (100%) rename public/{ => assets}/img/svg/gitea-codebase.svg (100%) rename public/{ => assets}/img/svg/gitea-composer.svg (100%) rename public/{ => assets}/img/svg/gitea-conan.svg (100%) rename public/{ => assets}/img/svg/gitea-conda.svg (100%) rename public/{ => assets}/img/svg/gitea-cran.svg (100%) rename public/{ => assets}/img/svg/gitea-debian.svg (100%) rename public/{ => assets}/img/svg/gitea-discord.svg (100%) rename public/{ => assets}/img/svg/gitea-double-chevron-left.svg (100%) rename public/{ => assets}/img/svg/gitea-double-chevron-right.svg (100%) rename public/{ => assets}/img/svg/gitea-dropbox.svg (100%) rename public/{ => assets}/img/svg/gitea-empty-checkbox.svg (100%) rename public/{ => assets}/img/svg/gitea-exclamation.svg (100%) rename public/{ => assets}/img/svg/gitea-facebook.svg (100%) rename public/{ => assets}/img/svg/gitea-git.svg (100%) rename public/{ => assets}/img/svg/gitea-gitbucket.svg (100%) rename public/{ => assets}/img/svg/gitea-gitea.svg (100%) rename public/{ => assets}/img/svg/gitea-gitlab.svg (100%) rename public/{ => assets}/img/svg/gitea-go.svg (100%) rename public/{ => assets}/img/svg/gitea-gogs.svg (100%) rename public/{ => assets}/img/svg/gitea-google.svg (100%) rename public/{ => assets}/img/svg/gitea-helm.svg (100%) rename public/{ => assets}/img/svg/gitea-join.svg (100%) rename public/{ => assets}/img/svg/gitea-lock-cog.svg (100%) rename public/{ => assets}/img/svg/gitea-lock.svg (100%) rename public/{ => assets}/img/svg/gitea-mastodon.svg (100%) rename public/{ => assets}/img/svg/gitea-matrix.svg (100%) rename public/{ => assets}/img/svg/gitea-maven.svg (100%) rename public/{ => assets}/img/svg/gitea-microsoftonline.svg (100%) rename public/{ => assets}/img/svg/gitea-nextcloud.svg (100%) rename public/{ => assets}/img/svg/gitea-npm.svg (100%) rename public/{ => assets}/img/svg/gitea-nuget.svg (100%) rename public/{ => assets}/img/svg/gitea-onedev.svg (100%) rename public/{ => assets}/img/svg/gitea-openid.svg (100%) rename public/{ => assets}/img/svg/gitea-pub.svg (100%) rename public/{ => assets}/img/svg/gitea-python.svg (100%) rename public/{ => assets}/img/svg/gitea-rpm.svg (100%) rename public/{ => assets}/img/svg/gitea-rubygems.svg (100%) rename public/{ => assets}/img/svg/gitea-split.svg (100%) rename public/{ => assets}/img/svg/gitea-swift.svg (100%) rename public/{ => assets}/img/svg/gitea-twitter.svg (100%) rename public/{ => assets}/img/svg/gitea-unlock.svg (100%) rename public/{ => assets}/img/svg/gitea-vagrant.svg (100%) rename public/{ => assets}/img/svg/gitea-vscode.svg (100%) rename public/{ => assets}/img/svg/gitea-whitespace.svg (100%) rename public/{ => assets}/img/svg/gitea-yandex.svg (100%) rename public/{ => assets}/img/svg/material-invert-colors.svg (100%) rename public/{ => assets}/img/svg/material-palette.svg (100%) rename public/{ => assets}/img/svg/octicon-accessibility-inset.svg (100%) rename public/{ => assets}/img/svg/octicon-accessibility.svg (100%) rename public/{ => assets}/img/svg/octicon-alert-fill.svg (100%) rename public/{ => assets}/img/svg/octicon-alert.svg (100%) rename public/{ => assets}/img/svg/octicon-apps.svg (100%) rename public/{ => assets}/img/svg/octicon-archive.svg (100%) rename public/{ => assets}/img/svg/octicon-arrow-both.svg (100%) rename public/{ => assets}/img/svg/octicon-arrow-down-left.svg (100%) rename public/{ => assets}/img/svg/octicon-arrow-down-right.svg (100%) rename public/{ => assets}/img/svg/octicon-arrow-down.svg (100%) rename public/{ => assets}/img/svg/octicon-arrow-left.svg (100%) rename public/{ => assets}/img/svg/octicon-arrow-right.svg (100%) rename public/{ => assets}/img/svg/octicon-arrow-switch.svg (100%) rename public/{ => assets}/img/svg/octicon-arrow-up-left.svg (100%) rename public/{ => assets}/img/svg/octicon-arrow-up-right.svg (100%) rename public/{ => assets}/img/svg/octicon-arrow-up.svg (100%) rename public/{ => assets}/img/svg/octicon-beaker.svg (100%) rename public/{ => assets}/img/svg/octicon-bell-fill.svg (100%) rename public/{ => assets}/img/svg/octicon-bell-slash.svg (100%) rename public/{ => assets}/img/svg/octicon-bell.svg (100%) rename public/{ => assets}/img/svg/octicon-blocked.svg (100%) rename public/{ => assets}/img/svg/octicon-bold.svg (100%) rename public/{ => assets}/img/svg/octicon-book.svg (100%) rename public/{ => assets}/img/svg/octicon-bookmark-slash.svg (100%) rename public/{ => assets}/img/svg/octicon-bookmark.svg (100%) rename public/{ => assets}/img/svg/octicon-briefcase.svg (100%) rename public/{ => assets}/img/svg/octicon-broadcast.svg (100%) rename public/{ => assets}/img/svg/octicon-browser.svg (100%) rename public/{ => assets}/img/svg/octicon-bug.svg (100%) rename public/{ => assets}/img/svg/octicon-cache.svg (100%) rename public/{ => assets}/img/svg/octicon-calendar.svg (100%) rename public/{ => assets}/img/svg/octicon-check-circle-fill.svg (100%) rename public/{ => assets}/img/svg/octicon-check-circle.svg (100%) rename public/{ => assets}/img/svg/octicon-check.svg (100%) rename public/{ => assets}/img/svg/octicon-checkbox.svg (100%) rename public/{ => assets}/img/svg/octicon-checklist.svg (100%) rename public/{ => assets}/img/svg/octicon-chevron-down.svg (100%) rename public/{ => assets}/img/svg/octicon-chevron-left.svg (100%) rename public/{ => assets}/img/svg/octicon-chevron-right.svg (100%) rename public/{ => assets}/img/svg/octicon-chevron-up.svg (100%) rename public/{ => assets}/img/svg/octicon-circle-slash.svg (100%) rename public/{ => assets}/img/svg/octicon-circle.svg (100%) rename public/{ => assets}/img/svg/octicon-clock-fill.svg (100%) rename public/{ => assets}/img/svg/octicon-clock.svg (100%) rename public/{ => assets}/img/svg/octicon-cloud-offline.svg (100%) rename public/{ => assets}/img/svg/octicon-cloud.svg (100%) rename public/{ => assets}/img/svg/octicon-code-of-conduct.svg (100%) rename public/{ => assets}/img/svg/octicon-code-review.svg (100%) rename public/{ => assets}/img/svg/octicon-code-square.svg (100%) rename public/{ => assets}/img/svg/octicon-code.svg (100%) rename public/{ => assets}/img/svg/octicon-codescan-checkmark.svg (100%) rename public/{ => assets}/img/svg/octicon-codescan.svg (100%) rename public/{ => assets}/img/svg/octicon-codespaces.svg (100%) rename public/{ => assets}/img/svg/octicon-columns.svg (100%) rename public/{ => assets}/img/svg/octicon-command-palette.svg (100%) rename public/{ => assets}/img/svg/octicon-comment-discussion.svg (100%) rename public/{ => assets}/img/svg/octicon-comment.svg (100%) rename public/{ => assets}/img/svg/octicon-container.svg (100%) rename public/{ => assets}/img/svg/octicon-copilot-error.svg (100%) rename public/{ => assets}/img/svg/octicon-copilot-warning.svg (100%) rename public/{ => assets}/img/svg/octicon-copilot.svg (100%) rename public/{ => assets}/img/svg/octicon-copy.svg (100%) rename public/{ => assets}/img/svg/octicon-cpu.svg (100%) rename public/{ => assets}/img/svg/octicon-credit-card.svg (100%) rename public/{ => assets}/img/svg/octicon-cross-reference.svg (100%) rename public/{ => assets}/img/svg/octicon-dash.svg (100%) rename public/{ => assets}/img/svg/octicon-database.svg (100%) rename public/{ => assets}/img/svg/octicon-dependabot.svg (100%) rename public/{ => assets}/img/svg/octicon-desktop-download.svg (100%) rename public/{ => assets}/img/svg/octicon-device-camera-video.svg (100%) rename public/{ => assets}/img/svg/octicon-device-camera.svg (100%) rename public/{ => assets}/img/svg/octicon-device-desktop.svg (100%) rename public/{ => assets}/img/svg/octicon-device-mobile.svg (100%) rename public/{ => assets}/img/svg/octicon-devices.svg (100%) rename public/{ => assets}/img/svg/octicon-diamond.svg (100%) rename public/{ => assets}/img/svg/octicon-diff-added.svg (100%) rename public/{ => assets}/img/svg/octicon-diff-ignored.svg (100%) rename public/{ => assets}/img/svg/octicon-diff-modified.svg (100%) rename public/{ => assets}/img/svg/octicon-diff-removed.svg (100%) rename public/{ => assets}/img/svg/octicon-diff-renamed.svg (100%) rename public/{ => assets}/img/svg/octicon-diff.svg (100%) rename public/{ => assets}/img/svg/octicon-discussion-closed.svg (100%) rename public/{ => assets}/img/svg/octicon-discussion-duplicate.svg (100%) rename public/{ => assets}/img/svg/octicon-discussion-outdated.svg (100%) rename public/{ => assets}/img/svg/octicon-dot-fill.svg (100%) rename public/{ => assets}/img/svg/octicon-dot.svg (100%) rename public/{ => assets}/img/svg/octicon-download.svg (100%) rename public/{ => assets}/img/svg/octicon-duplicate.svg (100%) rename public/{ => assets}/img/svg/octicon-ellipsis.svg (100%) rename public/{ => assets}/img/svg/octicon-eye-closed.svg (100%) rename public/{ => assets}/img/svg/octicon-eye.svg (100%) rename public/{ => assets}/img/svg/octicon-feed-discussion.svg (100%) rename public/{ => assets}/img/svg/octicon-feed-forked.svg (100%) rename public/{ => assets}/img/svg/octicon-feed-heart.svg (100%) rename public/{ => assets}/img/svg/octicon-feed-merged.svg (100%) rename public/{ => assets}/img/svg/octicon-feed-person.svg (100%) rename public/{ => assets}/img/svg/octicon-feed-repo.svg (100%) rename public/{ => assets}/img/svg/octicon-feed-rocket.svg (100%) rename public/{ => assets}/img/svg/octicon-feed-star.svg (100%) rename public/{ => assets}/img/svg/octicon-feed-tag.svg (100%) rename public/{ => assets}/img/svg/octicon-feed-trophy.svg (100%) rename public/{ => assets}/img/svg/octicon-file-added.svg (100%) rename public/{ => assets}/img/svg/octicon-file-badge.svg (100%) rename public/{ => assets}/img/svg/octicon-file-binary.svg (100%) rename public/{ => assets}/img/svg/octicon-file-code.svg (100%) rename public/{ => assets}/img/svg/octicon-file-diff.svg (100%) rename public/{ => assets}/img/svg/octicon-file-directory-fill.svg (100%) rename public/{ => assets}/img/svg/octicon-file-directory-open-fill.svg (100%) rename public/{ => assets}/img/svg/octicon-file-directory-symlink.svg (100%) rename public/{ => assets}/img/svg/octicon-file-directory.svg (100%) rename public/{ => assets}/img/svg/octicon-file-moved.svg (100%) rename public/{ => assets}/img/svg/octicon-file-removed.svg (100%) rename public/{ => assets}/img/svg/octicon-file-submodule.svg (100%) rename public/{ => assets}/img/svg/octicon-file-symlink-file.svg (100%) rename public/{ => assets}/img/svg/octicon-file-zip.svg (100%) rename public/{ => assets}/img/svg/octicon-file.svg (100%) rename public/{ => assets}/img/svg/octicon-filter.svg (100%) rename public/{ => assets}/img/svg/octicon-fiscal-host.svg (100%) rename public/{ => assets}/img/svg/octicon-flame.svg (100%) rename public/{ => assets}/img/svg/octicon-fold-down.svg (100%) rename public/{ => assets}/img/svg/octicon-fold-up.svg (100%) rename public/{ => assets}/img/svg/octicon-fold.svg (100%) rename public/{ => assets}/img/svg/octicon-gear.svg (100%) rename public/{ => assets}/img/svg/octicon-gift.svg (100%) rename public/{ => assets}/img/svg/octicon-git-branch.svg (100%) rename public/{ => assets}/img/svg/octicon-git-commit.svg (100%) rename public/{ => assets}/img/svg/octicon-git-compare.svg (100%) rename public/{ => assets}/img/svg/octicon-git-merge-queue.svg (100%) rename public/{ => assets}/img/svg/octicon-git-merge.svg (100%) rename public/{ => assets}/img/svg/octicon-git-pull-request-closed.svg (100%) rename public/{ => assets}/img/svg/octicon-git-pull-request-draft.svg (100%) rename public/{ => assets}/img/svg/octicon-git-pull-request.svg (100%) rename public/{ => assets}/img/svg/octicon-globe.svg (100%) rename public/{ => assets}/img/svg/octicon-goal.svg (100%) rename public/{ => assets}/img/svg/octicon-grabber.svg (100%) rename public/{ => assets}/img/svg/octicon-graph.svg (100%) rename public/{ => assets}/img/svg/octicon-hash.svg (100%) rename public/{ => assets}/img/svg/octicon-heading.svg (100%) rename public/{ => assets}/img/svg/octicon-heart-fill.svg (100%) rename public/{ => assets}/img/svg/octicon-heart.svg (100%) rename public/{ => assets}/img/svg/octicon-history.svg (100%) rename public/{ => assets}/img/svg/octicon-home.svg (100%) rename public/{ => assets}/img/svg/octicon-horizontal-rule.svg (100%) rename public/{ => assets}/img/svg/octicon-hourglass.svg (100%) rename public/{ => assets}/img/svg/octicon-hubot.svg (100%) rename public/{ => assets}/img/svg/octicon-id-badge.svg (100%) rename public/{ => assets}/img/svg/octicon-image.svg (100%) rename public/{ => assets}/img/svg/octicon-inbox.svg (100%) rename public/{ => assets}/img/svg/octicon-infinity.svg (100%) rename public/{ => assets}/img/svg/octicon-info.svg (100%) rename public/{ => assets}/img/svg/octicon-issue-closed.svg (100%) rename public/{ => assets}/img/svg/octicon-issue-draft.svg (100%) rename public/{ => assets}/img/svg/octicon-issue-opened.svg (100%) rename public/{ => assets}/img/svg/octicon-issue-reopened.svg (100%) rename public/{ => assets}/img/svg/octicon-issue-tracked-by.svg (100%) rename public/{ => assets}/img/svg/octicon-issue-tracks.svg (100%) rename public/{ => assets}/img/svg/octicon-italic.svg (100%) rename public/{ => assets}/img/svg/octicon-iterations.svg (100%) rename public/{ => assets}/img/svg/octicon-kebab-horizontal.svg (100%) rename public/{ => assets}/img/svg/octicon-key-asterisk.svg (100%) rename public/{ => assets}/img/svg/octicon-key.svg (100%) rename public/{ => assets}/img/svg/octicon-law.svg (100%) rename public/{ => assets}/img/svg/octicon-light-bulb.svg (100%) rename public/{ => assets}/img/svg/octicon-link-external.svg (100%) rename public/{ => assets}/img/svg/octicon-link.svg (100%) rename public/{ => assets}/img/svg/octicon-list-ordered.svg (100%) rename public/{ => assets}/img/svg/octicon-list-unordered.svg (100%) rename public/{ => assets}/img/svg/octicon-location.svg (100%) rename public/{ => assets}/img/svg/octicon-lock.svg (100%) rename public/{ => assets}/img/svg/octicon-log.svg (100%) rename public/{ => assets}/img/svg/octicon-logo-gist.svg (100%) rename public/{ => assets}/img/svg/octicon-logo-github.svg (100%) rename public/{ => assets}/img/svg/octicon-mail.svg (100%) rename public/{ => assets}/img/svg/octicon-mark-github.svg (100%) rename public/{ => assets}/img/svg/octicon-markdown.svg (100%) rename public/{ => assets}/img/svg/octicon-megaphone.svg (100%) rename public/{ => assets}/img/svg/octicon-mention.svg (100%) rename public/{ => assets}/img/svg/octicon-meter.svg (100%) rename public/{ => assets}/img/svg/octicon-milestone.svg (100%) rename public/{ => assets}/img/svg/octicon-mirror.svg (100%) rename public/{ => assets}/img/svg/octicon-moon.svg (100%) rename public/{ => assets}/img/svg/octicon-mortar-board.svg (100%) rename public/{ => assets}/img/svg/octicon-move-to-bottom.svg (100%) rename public/{ => assets}/img/svg/octicon-move-to-end.svg (100%) rename public/{ => assets}/img/svg/octicon-move-to-start.svg (100%) rename public/{ => assets}/img/svg/octicon-move-to-top.svg (100%) rename public/{ => assets}/img/svg/octicon-multi-select.svg (100%) rename public/{ => assets}/img/svg/octicon-mute.svg (100%) rename public/{ => assets}/img/svg/octicon-no-entry.svg (100%) rename public/{ => assets}/img/svg/octicon-north-star.svg (100%) rename public/{ => assets}/img/svg/octicon-note.svg (100%) rename public/{ => assets}/img/svg/octicon-number.svg (100%) rename public/{ => assets}/img/svg/octicon-organization.svg (100%) rename public/{ => assets}/img/svg/octicon-package-dependencies.svg (100%) rename public/{ => assets}/img/svg/octicon-package-dependents.svg (100%) rename public/{ => assets}/img/svg/octicon-package.svg (100%) rename public/{ => assets}/img/svg/octicon-paintbrush.svg (100%) rename public/{ => assets}/img/svg/octicon-paper-airplane.svg (100%) rename public/{ => assets}/img/svg/octicon-paperclip.svg (100%) rename public/{ => assets}/img/svg/octicon-passkey-fill.svg (100%) rename public/{ => assets}/img/svg/octicon-paste.svg (100%) rename public/{ => assets}/img/svg/octicon-pencil.svg (100%) rename public/{ => assets}/img/svg/octicon-people.svg (100%) rename public/{ => assets}/img/svg/octicon-person-add.svg (100%) rename public/{ => assets}/img/svg/octicon-person-fill.svg (100%) rename public/{ => assets}/img/svg/octicon-person.svg (100%) rename public/{ => assets}/img/svg/octicon-pin-slash.svg (100%) rename public/{ => assets}/img/svg/octicon-pin.svg (100%) rename public/{ => assets}/img/svg/octicon-pivot-column.svg (100%) rename public/{ => assets}/img/svg/octicon-play.svg (100%) rename public/{ => assets}/img/svg/octicon-plug.svg (100%) rename public/{ => assets}/img/svg/octicon-plus-circle.svg (100%) rename public/{ => assets}/img/svg/octicon-plus.svg (100%) rename public/{ => assets}/img/svg/octicon-project-roadmap.svg (100%) rename public/{ => assets}/img/svg/octicon-project-symlink.svg (100%) rename public/{ => assets}/img/svg/octicon-project-template.svg (100%) rename public/{ => assets}/img/svg/octicon-project.svg (100%) rename public/{ => assets}/img/svg/octicon-pulse.svg (100%) rename public/{ => assets}/img/svg/octicon-question.svg (100%) rename public/{ => assets}/img/svg/octicon-quote.svg (100%) rename public/{ => assets}/img/svg/octicon-read.svg (100%) rename public/{ => assets}/img/svg/octicon-redo.svg (100%) rename public/{ => assets}/img/svg/octicon-rel-file-path.svg (100%) rename public/{ => assets}/img/svg/octicon-reply.svg (100%) rename public/{ => assets}/img/svg/octicon-repo-clone.svg (100%) rename public/{ => assets}/img/svg/octicon-repo-deleted.svg (100%) rename public/{ => assets}/img/svg/octicon-repo-forked.svg (100%) rename public/{ => assets}/img/svg/octicon-repo-locked.svg (100%) rename public/{ => assets}/img/svg/octicon-repo-pull.svg (100%) rename public/{ => assets}/img/svg/octicon-repo-push.svg (100%) rename public/{ => assets}/img/svg/octicon-repo-template.svg (100%) rename public/{ => assets}/img/svg/octicon-repo.svg (100%) rename public/{ => assets}/img/svg/octicon-report.svg (100%) rename public/{ => assets}/img/svg/octicon-rocket.svg (100%) rename public/{ => assets}/img/svg/octicon-rows.svg (100%) rename public/{ => assets}/img/svg/octicon-rss.svg (100%) rename public/{ => assets}/img/svg/octicon-ruby.svg (100%) rename public/{ => assets}/img/svg/octicon-screen-full.svg (100%) rename public/{ => assets}/img/svg/octicon-screen-normal.svg (100%) rename public/{ => assets}/img/svg/octicon-search.svg (100%) rename public/{ => assets}/img/svg/octicon-server.svg (100%) rename public/{ => assets}/img/svg/octicon-share-android.svg (100%) rename public/{ => assets}/img/svg/octicon-share.svg (100%) rename public/{ => assets}/img/svg/octicon-shield-check.svg (100%) rename public/{ => assets}/img/svg/octicon-shield-lock.svg (100%) rename public/{ => assets}/img/svg/octicon-shield-slash.svg (100%) rename public/{ => assets}/img/svg/octicon-shield-x.svg (100%) rename public/{ => assets}/img/svg/octicon-shield.svg (100%) rename public/{ => assets}/img/svg/octicon-sidebar-collapse.svg (100%) rename public/{ => assets}/img/svg/octicon-sidebar-expand.svg (100%) rename public/{ => assets}/img/svg/octicon-sign-in.svg (100%) rename public/{ => assets}/img/svg/octicon-sign-out.svg (100%) rename public/{ => assets}/img/svg/octicon-single-select.svg (100%) rename public/{ => assets}/img/svg/octicon-skip-fill.svg (100%) rename public/{ => assets}/img/svg/octicon-skip.svg (100%) rename public/{ => assets}/img/svg/octicon-sliders.svg (100%) rename public/{ => assets}/img/svg/octicon-smiley.svg (100%) rename public/{ => assets}/img/svg/octicon-sort-asc.svg (100%) rename public/{ => assets}/img/svg/octicon-sort-desc.svg (100%) rename public/{ => assets}/img/svg/octicon-sparkle-fill.svg (100%) rename public/{ => assets}/img/svg/octicon-sponsor-tiers.svg (100%) rename public/{ => assets}/img/svg/octicon-square-fill.svg (100%) rename public/{ => assets}/img/svg/octicon-square.svg (100%) rename public/{ => assets}/img/svg/octicon-squirrel.svg (100%) rename public/{ => assets}/img/svg/octicon-stack.svg (100%) rename public/{ => assets}/img/svg/octicon-star-fill.svg (100%) rename public/{ => assets}/img/svg/octicon-star.svg (100%) rename public/{ => assets}/img/svg/octicon-stop.svg (100%) rename public/{ => assets}/img/svg/octicon-stopwatch.svg (100%) rename public/{ => assets}/img/svg/octicon-strikethrough.svg (100%) rename public/{ => assets}/img/svg/octicon-sun.svg (100%) rename public/{ => assets}/img/svg/octicon-sync.svg (100%) rename public/{ => assets}/img/svg/octicon-tab-external.svg (100%) rename public/{ => assets}/img/svg/octicon-table.svg (100%) rename public/{ => assets}/img/svg/octicon-tag.svg (100%) rename public/{ => assets}/img/svg/octicon-tasklist.svg (100%) rename public/{ => assets}/img/svg/octicon-telescope-fill.svg (100%) rename public/{ => assets}/img/svg/octicon-telescope.svg (100%) rename public/{ => assets}/img/svg/octicon-terminal.svg (100%) rename public/{ => assets}/img/svg/octicon-three-bars.svg (100%) rename public/{ => assets}/img/svg/octicon-thumbsdown.svg (100%) rename public/{ => assets}/img/svg/octicon-thumbsup.svg (100%) rename public/{ => assets}/img/svg/octicon-tools.svg (100%) rename public/{ => assets}/img/svg/octicon-tracked-by-closed-completed.svg (100%) rename public/{ => assets}/img/svg/octicon-tracked-by-closed-not-planned.svg (100%) rename public/{ => assets}/img/svg/octicon-trash.svg (100%) rename public/{ => assets}/img/svg/octicon-triangle-down.svg (100%) rename public/{ => assets}/img/svg/octicon-triangle-left.svg (100%) rename public/{ => assets}/img/svg/octicon-triangle-right.svg (100%) rename public/{ => assets}/img/svg/octicon-triangle-up.svg (100%) rename public/{ => assets}/img/svg/octicon-trophy.svg (100%) rename public/{ => assets}/img/svg/octicon-typography.svg (100%) rename public/{ => assets}/img/svg/octicon-undo.svg (100%) rename public/{ => assets}/img/svg/octicon-unfold.svg (100%) rename public/{ => assets}/img/svg/octicon-unlink.svg (100%) rename public/{ => assets}/img/svg/octicon-unlock.svg (100%) rename public/{ => assets}/img/svg/octicon-unmute.svg (100%) rename public/{ => assets}/img/svg/octicon-unread.svg (100%) rename public/{ => assets}/img/svg/octicon-unverified.svg (100%) rename public/{ => assets}/img/svg/octicon-upload.svg (100%) rename public/{ => assets}/img/svg/octicon-verified.svg (100%) rename public/{ => assets}/img/svg/octicon-versions.svg (100%) rename public/{ => assets}/img/svg/octicon-video.svg (100%) rename public/{ => assets}/img/svg/octicon-webhook.svg (100%) rename public/{ => assets}/img/svg/octicon-workflow.svg (100%) rename public/{ => assets}/img/svg/octicon-x-circle-fill.svg (100%) rename public/{ => assets}/img/svg/octicon-x-circle.svg (100%) rename public/{ => assets}/img/svg/octicon-x.svg (100%) rename public/{ => assets}/img/svg/octicon-zap.svg (100%) rename public/{ => assets}/img/svg/octicon-zoom-in.svg (100%) rename public/{ => assets}/img/svg/octicon-zoom-out.svg (100%) rename public/{ => assets}/img/telegram.png (100%) rename public/{ => assets}/img/wechatwork.png (100%) diff --git a/.dockerignore b/.dockerignore index 2a414208890..80cbeb040cf 100644 --- a/.dockerignore +++ b/.dockerignore @@ -75,10 +75,10 @@ cpu.out /yarn.lock /yarn-error.log /npm-debug.log* -/public/js -/public/css -/public/fonts -/public/img/webpack +/public/assets/js +/public/assets/css +/public/assets/fonts +/public/assets/img/webpack /vendor /web_src/fomantic/node_modules /web_src/fomantic/build/* diff --git a/.gitattributes b/.gitattributes index 7e7a139c9a4..467b8a47b5d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,7 +1,7 @@ * text=auto eol=lf *.tmpl linguist-language=Handlebars /assets/*.json linguist-generated -/public/img/svg/*.svg linguist-generated +/public/assets/img/svg/*.svg linguist-generated /templates/swagger/v1_json.tmpl linguist-generated /vendor/** -text -eol linguist-vendored /web_src/fomantic/build/** linguist-generated diff --git a/.gitignore b/.gitignore index 6851be742c6..6b699e08700 100644 --- a/.gitignore +++ b/.gitignore @@ -72,10 +72,10 @@ cpu.out /yarn.lock /yarn-error.log /npm-debug.log* -/public/js -/public/css -/public/fonts -/public/img/webpack +/public/assets/js +/public/assets/css +/public/assets/fonts +/public/assets/img/webpack /vendor /web_src/fomantic/node_modules /web_src/fomantic/build/* diff --git a/Makefile b/Makefile index 7de96f09fdd..e24b35c3fce 100644 --- a/Makefile +++ b/Makefile @@ -116,15 +116,15 @@ FOMANTIC_WORK_DIR := web_src/fomantic WEBPACK_SOURCES := $(shell find web_src/js web_src/css -type f) WEBPACK_CONFIGS := webpack.config.js -WEBPACK_DEST := public/js/index.js public/css/index.css -WEBPACK_DEST_ENTRIES := public/js public/css public/fonts public/img/webpack +WEBPACK_DEST := public/assets/js/index.js public/assets/css/index.css +WEBPACK_DEST_ENTRIES := public/assets/js public/assets/css public/assets/fonts public/assets/img/webpack BINDATA_DEST := modules/public/bindata.go modules/options/bindata.go modules/templates/bindata.go BINDATA_HASH := $(addsuffix .hash,$(BINDATA_DEST)) GENERATED_GO_DEST := modules/charset/invisible_gen.go modules/charset/ambiguous_gen.go -SVG_DEST_DIR := public/img/svg +SVG_DEST_DIR := public/assets/img/svg AIR_TMP_DIR := .air diff --git a/README.md b/README.md index 70a4a300509..ef743780acf 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- Gitea + Gitea

Gitea - Git with a cup of tea

diff --git a/README_ZH.md b/README_ZH.md index 48eee9214d2..28da7af535d 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -1,6 +1,6 @@

- Gitea + Gitea

Gitea - Git with a cup of tea

diff --git a/build/generate-images.js b/build/generate-images.js index e5744526db6..a3a0f8d8f39 100755 --- a/build/generate-images.js +++ b/build/generate-images.js @@ -69,13 +69,13 @@ async function main() { const faviconSvg = await readFile(new URL('../assets/favicon.svg', import.meta.url), 'utf8'); await Promise.all([ - generate(logoSvg, '../public/img/logo.svg', {size: 32}), - generate(logoSvg, '../public/img/logo.png', {size: 512}), - generate(faviconSvg, '../public/img/favicon.svg', {size: 32}), - generate(faviconSvg, '../public/img/favicon.png', {size: 180}), - generate(logoSvg, '../public/img/avatar_default.png', {size: 200}), - generate(logoSvg, '../public/img/apple-touch-icon.png', {size: 180, bg: true}), - gitea && generate(logoSvg, '../public/img/gitea.svg', {size: 32}), + generate(logoSvg, '../public/assets/img/logo.svg', {size: 32}), + generate(logoSvg, '../public/assets/img/logo.png', {size: 512}), + generate(faviconSvg, '../public/assets/img/favicon.svg', {size: 32}), + generate(faviconSvg, '../public/assets/img/favicon.png', {size: 180}), + generate(logoSvg, '../public/assets/img/avatar_default.png', {size: 200}), + generate(logoSvg, '../public/assets/img/apple-touch-icon.png', {size: 180, bg: true}), + gitea && generate(logoSvg, '../public/assets/img/gitea.svg', {size: 32}), ]); } diff --git a/build/generate-svg.js b/build/generate-svg.js index dc82ed465a2..b845da9367c 100755 --- a/build/generate-svg.js +++ b/build/generate-svg.js @@ -44,7 +44,7 @@ async function processFile(file, {prefix, fullName} = {}) { ], }); - await writeFile(fileURLToPath(new URL(`../public/img/svg/${name}.svg`, import.meta.url)), data); + await writeFile(fileURLToPath(new URL(`../public/assets/img/svg/${name}.svg`, import.meta.url)), data); } function processFiles(pattern, opts) { @@ -53,13 +53,13 @@ function processFiles(pattern, opts) { async function main() { try { - await mkdir(fileURLToPath(new URL('../public/img/svg', import.meta.url)), {recursive: true}); + await mkdir(fileURLToPath(new URL('../public/assets/img/svg', import.meta.url)), {recursive: true}); } catch {} await Promise.all([ ...processFiles('node_modules/@primer/octicons/build/svg/*-16.svg', {prefix: 'octicon'}), ...processFiles('web_src/svg/*.svg'), - ...processFiles('public/img/gitea.svg', {fullName: 'gitea-gitea'}), + ...processFiles('public/assets/img/gitea.svg', {fullName: 'gitea-gitea'}), ]); } diff --git a/custom/conf/app.example.ini b/custom/conf/app.example.ini index 83c713cb05e..029a482fcde 100644 --- a/custom/conf/app.example.ini +++ b/custom/conf/app.example.ini @@ -1200,11 +1200,11 @@ LEVEL = Info ;; ;; All available reactions users can choose on issues/prs and comments. ;; Values can be emoji alias (:smile:) or a unicode emoji. -;; For custom reactions, add a tightly cropped square image to public/img/emoji/reaction_name.png +;; For custom reactions, add a tightly cropped square image to public/assets/img/emoji/reaction_name.png ;REACTIONS = +1, -1, laugh, hooray, confused, heart, rocket, eyes ;; ;; Additional Emojis not defined in the utf8 standard -;; By default we support gitea (:gitea:), to add more copy them to public/img/emoji/emoji_name.png and add it to this config. +;; By default we support gitea (:gitea:), to add more copy them to public/assets/img/emoji/emoji_name.png and add it to this config. ;; Dont mistake it for Reactions. ;CUSTOM_EMOJIS = gitea, codeberg, gitlab, git, github, gogs ;; diff --git a/docs/content/doc/administration/cmd-embedded.en-us.md b/docs/content/doc/administration/cmd-embedded.en-us.md index 36cf00082b0..a58cbbf7fc7 100644 --- a/docs/content/doc/administration/cmd-embedded.en-us.md +++ b/docs/content/doc/administration/cmd-embedded.en-us.md @@ -47,7 +47,7 @@ for its glob syntax. Here are some examples: - List all template files, in any virtual directory: `**.tmpl` - List all mail template files: `templates/mail/**.tmpl` -- List all files inside `public/img`: `public/img/**` +- List all files inside `public/assets/img`: `public/assets/img/**` Don't forget to use quotes for the patterns, as spaces, `*` and other characters might have a special meaning for your command shell. @@ -60,8 +60,8 @@ Listing all embedded files with `openid` in their path: ```sh $ gitea embedded list '**openid**' -public/img/auth/openid_connect.svg -public/img/openid-16x16.png +public/assets/img/auth/openid_connect.svg +public/assets/img/openid-16x16.png templates/user/auth/finalize_openid.tmpl templates/user/auth/signin_openid.tmpl templates/user/auth/signup_openid_connect.tmpl diff --git a/docs/content/doc/administration/config-cheat-sheet.en-us.md b/docs/content/doc/administration/config-cheat-sheet.en-us.md index 9c307cbc48c..05377d6bae6 100644 --- a/docs/content/doc/administration/config-cheat-sheet.en-us.md +++ b/docs/content/doc/administration/config-cheat-sheet.en-us.md @@ -224,9 +224,9 @@ The following configuration set `Content-Type: application/vnd.android.package-a - `MAX_DISPLAY_FILE_SIZE`: **8388608**: Max size of files to be displayed (default is 8MiB) - `REACTIONS`: All available reactions users can choose on issues/prs and comments Values can be emoji alias (:smile:) or a unicode emoji. - For custom reactions, add a tightly cropped square image to public/img/emoji/reaction_name.png + For custom reactions, add a tightly cropped square image to public/assets/img/emoji/reaction_name.png - `CUSTOM_EMOJIS`: **gitea, codeberg, gitlab, git, github, gogs**: Additional Emojis not defined in the utf8 standard. - By default, we support Gitea (:gitea:), to add more copy them to public/img/emoji/emoji_name.png and + By default, we support Gitea (:gitea:), to add more copy them to public/assets/img/emoji/emoji_name.png and add it to this config. - `DEFAULT_SHOW_FULL_NAME`: **false**: Whether the full name of the users should be shown where possible. If the full name isn't set, the username will be used. - `SEARCH_REPO_DESCRIPTION`: **true**: Whether to search within description at repository search on explore page. diff --git a/docs/content/doc/administration/customizing-gitea.en-us.md b/docs/content/doc/administration/customizing-gitea.en-us.md index 4c8b1c90d71..fc4ded899bb 100644 --- a/docs/content/doc/administration/customizing-gitea.en-us.md +++ b/docs/content/doc/administration/customizing-gitea.en-us.md @@ -56,21 +56,22 @@ is set under the "Configuration" tab on the site administration page. To make Gitea serve custom public files (like pages and images), use the folder `$GITEA_CUSTOM/public/` as the webroot. Symbolic links will be followed. +At the moment, only files in the `public/assets/` folder are served. -For example, a file `image.png` stored in `$GITEA_CUSTOM/public/`, can be accessed with +For example, a file `image.png` stored in `$GITEA_CUSTOM/public/assets/`, can be accessed with the url `http://gitea.domain.tld/assets/image.png`. ## Changing the logo To build a custom logo and/or favicon clone the Gitea source repository, replace `assets/logo.svg` and/or `assets/favicon.svg` and run -`make generate-images`. `assets/favicon.svg` is used for the favicon only. This will update below output files which you can then place in `$GITEA_CUSTOM/public/img` on your server: +`make generate-images`. `assets/favicon.svg` is used for the favicon only. This will update below output files which you can then place in `$GITEA_CUSTOM/public/assets/img` on your server: -- `public/img/logo.svg` - Used for site icon, app icon -- `public/img/logo.png` - Used for Open Graph -- `public/img/avatar_default.png` - Used as the default avatar image -- `public/img/apple-touch-icon.png` - Used on iOS devices for bookmarks -- `public/img/favicon.svg` - Used for favicon -- `public/img/favicon.png` - Used as fallback for browsers that don't support SVG favicons +- `public/assets/img/logo.svg` - Used for site icon, app icon +- `public/assets/img/logo.png` - Used for Open Graph +- `public/assets/img/avatar_default.png` - Used as the default avatar image +- `public/assets/img/apple-touch-icon.png` - Used on iOS devices for bookmarks +- `public/assets/img/favicon.svg` - Used for favicon +- `public/assets/img/favicon.png` - Used as fallback for browsers that don't support SVG favicons In case the source image is not in vector format, you can attempt to convert a raster image using tools like [this](https://www.aconvert.com/image/png-to-svg/). @@ -102,7 +103,7 @@ Dont forget to restart your Gitea to apply the changes. If all you want is to add extra links to the top navigation bar or footer, or extra tabs to the repository view, you can put them in `extra_links.tmpl` (links added to the navbar), `extra_links_footer.tmpl` (links added to the left side of footer), and `extra_tabs.tmpl` inside your `$GITEA_CUSTOM/templates/custom/` directory. For instance, let's say you are in Germany and must add the famously legally-required "Impressum"/about page, listing who is responsible for the site's content: -just place it under your "$GITEA_CUSTOM/public/" directory (for instance `$GITEA_CUSTOM/public/impressum.html`) and put a link to it in either `$GITEA_CUSTOM/templates/custom/extra_links.tmpl` or `$GITEA_CUSTOM/templates/custom/extra_links_footer.tmpl`. +just place it under your "$GITEA_CUSTOM/public/assets/" directory (for instance `$GITEA_CUSTOM/public/assets/impressum.html`) and put a link to it in either `$GITEA_CUSTOM/templates/custom/extra_links.tmpl` or `$GITEA_CUSTOM/templates/custom/extra_links_footer.tmpl`. To match the current style, the link should have the class name "item", and you can use `{{AppSubUrl}}` to get the base URL: `Impressum` @@ -132,7 +133,7 @@ The data is encoded and sent to the PlantUML server which generates the picture. demo server at http://www.plantuml.com/plantuml, but if you (or your users) have sensitive data you can set up your own [PlantUML server](https://plantuml.com/server) instead. To set up PlantUML rendering, copy JavaScript files from https://gitea.com/davidsvantesson/plantuml-code-highlight and put them in your -`$GITEA_CUSTOM/public` folder. Then add the following to `custom/footer.tmpl`: +`$GITEA_CUSTOM/public/assets/` folder. Then add the following to `custom/footer.tmpl`: ```html