From 24b49bcf6615a05cecb77568a1c22ff982141918 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Tue, 18 Jul 2023 00:43:46 +0000 Subject: [PATCH 1/9] [skip ci] Updated translations via Crowdin --- options/locale/locale_lv-LV.ini | 58 ++++++++++++++++----------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/options/locale/locale_lv-LV.ini b/options/locale/locale_lv-LV.ini index 1fb359b5226d..7bd65a83febc 100644 --- a/options/locale/locale_lv-LV.ini +++ b/options/locale/locale_lv-LV.ini @@ -7,7 +7,7 @@ sign_in=Pierakstīties sign_in_with=Pierakstīties izmantojot sign_out=Izrakstīties sign_up=Reģistrēties -link_account=Saistītie konti +link_account=Sasaistīt kontu register=Reģistrēties version=Versija powered_by=Darbina %s @@ -30,14 +30,14 @@ password=Parole access_token=Piekļuves talons re_type=Atkārtoti ievadiet paroli captcha=Cilvēktests -twofa=Divu faktoru autentifikācija -twofa_scratch=Divu faktoru vienreizējais kods +twofa=Divfaktoru autentifikācija +twofa_scratch=Divfaktoru vienreizējais kods passcode=Kods webauthn_insert_key=Ievietojiet Jūsu drošības atslēgu webauthn_sign_in=Nospiediet pogu uz drošības atslēgas. Ja tai nav pogas, izņemiet un ievietojiet to atkārtoti. webauthn_press_button=Nospiediet drošības atslēgas pogu… -webauthn_use_twofa=Izmantot divu faktoru kodu no tālruņa +webauthn_use_twofa=Izmantot divfaktoru kodu no tālruņa webauthn_error=Nevar nolasīt drošības atslēgu. webauthn_unsupported_browser=Jūsu pārlūkprogramma neatbalsta WebAuthn standartu. webauthn_error_unknown=Notikusi nezināma kļūda. Atkārtojiet darbību vēlreiz. @@ -377,7 +377,7 @@ non_local_account=Ārējie konti nevar mainīt paroli, izmantojot, Gitea saskarn verify=Pārbaudīt scratch_code=Vienreizējais kods use_scratch_code=Izmantot vienreizējo kodu -twofa_scratch_used=Jūs esat izmantojis vienreizējo kodu. Jūs tikāt pārsūtīts uz divu faktoru iestatījumu lapu, lai varētu piesaistīto ierīci vai lai uzģenerētu jaunu vienreizējo kodu. +twofa_scratch_used=Vienreizējais kods tika izmantots. Notika pārvirzīšana uz divfaktoru iestatījumu lapu, lai varētu pārsaistīt jaunu ierīci vai uzģenerēt jaunu vienreizējo kodu. twofa_passcode_incorrect=Jūsu kods nav pareizs. Ja esat pazaudējis ierīci, izmantojiet vienreizējo kodu, lai autorizētos. twofa_scratch_token_incorrect=Ievadīts nepareizs vienreizējais kods. login_userpass=Pierakstīties @@ -387,7 +387,7 @@ oauth_signup_title=Pabeigt konta veidošanu oauth_signup_submit=Pabeigt reģistrāciju oauth_signin_tab=Savienot ar esošu kontu oauth_signin_title=Pierakstīties, lai autorizētu saistīto kontu -oauth_signin_submit=Saistītie konti +oauth_signin_submit=Sasaistīt kontu oauth.signin.error=Radās kļūda apstrādājot autorizācijas pieprasījumu. Ja šī kļūda atkārtojas, sazinieties ar lapas administratoru. oauth.signin.error.access_denied=Autorizācijas pieprasījums tika noraidīts. oauth.signin.error.temporarily_unavailable=Autorizācija neizdevās, jo autentifikācijas serveris ir īslaicīgi nepieejams. Mēģiniet autorizēties vēlāk. @@ -612,7 +612,7 @@ applications=Lietotnes orgs=Pārvaldīt organizācijas repos=Repozitoriji delete=Dzēst kontu -twofa=Divu faktoru autentifikācija +twofa=Divfaktoru autentifikācija account_link=Saistītie konti organization=Organizācijas uid=Lietotāja ID @@ -844,22 +844,22 @@ revoke_oauth2_grant=Atsaukt piekļuvi revoke_oauth2_grant_description=Atsaucot piekļuvi šai trešas puses lietotnei tiks liegta piekļuve Jūsu datiem. Vai turpināt? revoke_oauth2_grant_success=Piekļuve veiksmīgi atsaukta. -twofa_desc=Divu faktoru autentifikācija uzlabo Jūsu konta drošību. -twofa_is_enrolled=Kontam ir ieslēgta divu faktoru autentifikācija. -twofa_not_enrolled=Jūsu kontam nav ieslēgta divu faktoru autentifikācija. -twofa_disable=Atslēgt divu faktoru autentifikāciju +twofa_desc=Divfaktoru autentifikācija uzlabo konta drošību. +twofa_is_enrolled=Kontam ir ieslēgta divfaktoru autentifikācija. +twofa_not_enrolled=Kontam šobrīd nav ieslēgta divfaktoru autentifikācija. +twofa_disable=Atslēgt divfaktoru autentifikāciju twofa_scratch_token_regenerate=Ģenerēt jaunu vienreizējo kodu twofa_scratch_token_regenerated=Tagad Jūsu vienreizējais kods ir %s. Saglabājiet to drošā vietā. -twofa_enroll=Ieslēgt divu faktoru autentifikāciju -twofa_disable_note=Nepieciešamības gadījumā divu faktoru autentifikāciju ir iespējams atslēgt. -twofa_disable_desc=Atslēdzot divu faktoru autentifikāciju Jūsu konts vairs nebūs tik drošs. Vai turpināt? +twofa_enroll=Ieslēgt divfaktoru autentifikāciju +twofa_disable_note=Nepieciešamības gadījumā divfaktoru autentifikāciju ir iespējams atslēgt. +twofa_disable_desc=Atslēdzot divfaktoru autentifikāciju, konts vairs nebūs tik drošs. Vai turpināt? regenerate_scratch_token_desc=Ja esat aizmirsis vienreizējo kodu vai jau esat to izmantojis, lai autorizētos, atjaunojiet to šeit. -twofa_disabled=Divu faktoru autentifikācija ir atslēgta. +twofa_disabled=Divfaktoru autentifikācija tika atslēgta. scan_this_image=Noskenējiet šo attēlu ar autentifikācijas lietojumprogrammu: or_enter_secret=Vai ievadiet šo noslēpumu: %s then_enter_passcode=Ievadiet piekļuves kodu no lietojumprogrammas: passcode_invalid=Nederīgs piekļuves kods. Mēģiniet ievadīt atkārtoti. -twofa_enrolled=Kontam tagad ir ieslēgta divu faktoru autentifikācija. Saglabājiet savu vienreizējo kodu (%s), jo tas vairāk netiks parādīts! +twofa_enrolled=Kontam tika ieslēgta divfaktoru autentifikācija. Saglabājiet vienreizējo kodu (%s) drošā vietā, jo to vairāk nebūs iespējams aplūkot! twofa_failed_get_secret=Neizdevās ielādēt noslēpumu. webauthn_desc=Drošības atslēgas ir fiziskas ierīces, kas satur kriptogrāfiskas atslēgas. Tās var tikt izmantotas divu faktoru autentifikācijai. Drošības atslēgām ir jāatbalsta WebAuthn autentifikācijas standarts. @@ -871,7 +871,7 @@ webauthn_delete_key_desc=Noņemot drošības atslēgu ar to vairs nebūs iespēj manage_account_links=Pārvaldīt saistītos kontus manage_account_links_desc=Šādi ārējie konti ir piesaistīti Jūsu Gitea kontam. account_links_not_available=Pašlaik nav neviena ārējā konta piesaistīta šim kontam. -link_account=Savienot kontu +link_account=Sasaistīt kontu remove_account_link=Noņemt saistīto kontu remove_account_link_desc=Noņemot saistīto kontu, tam tiks liegta piekļuve Jūsu Gitea kontam. Vai turpināt? remove_account_link_success=Saistītais konts tika noņemts. @@ -1789,7 +1789,7 @@ signing.wont_sign.nokey=Nav pieejama atslēga ar ko parakstīt šo revīziju signing.wont_sign.never=Revīzijas nekad netiek parakstītas signing.wont_sign.always=Revīzijas vienmēr tiek parakstītas signing.wont_sign.pubkey=Revīzija netiks parakstīta, jo Jūsu kontam nav piesaistīta publiskā atslēga -signing.wont_sign.twofa=Jums jābūt ieslēgtai divu faktoru autentifikācijai, lai parakstītu revīzijas +signing.wont_sign.twofa=Jums jābūt ieslēgtai divfaktoru autentifikācijai, lai parakstītu revīzijas signing.wont_sign.parentsigned=Revīzija netiks parakstīta, jo nav parakstīta vecākā revīzija signing.wont_sign.basesigned=Sapludināšanas revīzija netiks parakstīta, jo bāzes revīzija nav parakstīta signing.wont_sign.headsigned=Sapludināšanas revīzija netiks parakstīta, jo pamata revīzija nav parakstīta @@ -1815,8 +1815,8 @@ wiki.save_page=Saglabāt lapu wiki.last_commit_info=%s laboja lapu %s wiki.edit_page_button=Labot wiki.new_page_button=Jauna lapa -wiki.file_revision=Labas revīzija -wiki.wiki_page_revisions=Vikivietnes lapas revīzijas +wiki.file_revision=Lapas rediģējums +wiki.wiki_page_revisions=Vikivietnes lapas rediģējumi wiki.back_to_wiki=Atpakaļ uz vikivietnes lapu wiki.delete_page_button=Dzēst lapu wiki.delete_page_notice_1=Šī darbība izdzēsīs vikivietnes lapu "%s". Vai turpināt? @@ -2339,7 +2339,7 @@ diff.whitespace_show_everything=Rādīt visas izmaiņas diff.whitespace_ignore_all_whitespace=Ignorēt atstarpes salīdzinot rindas diff.whitespace_ignore_amount_changes=Ignorēt atstarpju daudzuma izmaiņas diff.whitespace_ignore_at_eol=Ignorēt atstarpju izmaiņas rindu beigās -diff.stats_desc=%d mainītis faili ar %d papildinājumiem un %d dzēšanām +diff.stats_desc=%d mainīti faili ar %d papildinājumiem un %d dzēšanām diff.stats_desc_file=%d izmaiņas: %d pievienotas un %d dzēstas diff.bin=Binārs diff.bin_not_shown=Bināro failu nav iespējams attēlot. @@ -3230,7 +3230,7 @@ keywords=Atslēgvārdi details=Papildu informācija details.author=Autors details.project_site=Projekta lapa -details.repository_site=Repozitorija lapa +details.repository_site=Repozitorija vietne details.documentation_site=Dokumentācijas lapa details.license=Licence assets=Resursi @@ -3241,7 +3241,7 @@ dependency.version=Versija alpine.registry=Iestaties šo reģistru pievienojot tā URL /etc/apk/repositories failā: alpine.registry.key=Lejupielādējiet reģistra publisko RSA atslēgu direktorijā /etc/apk/keys/, lai pārbaudītu indeksa parakstu: alpine.registry.info=Izvēlieties $branch un $repository no saraksta zemāk. -alpine.install=Lai instalētu pakotni, nepieciešams izpildīt sekojošu komandu: +alpine.install=Lai uzstādītu pakotni, ir jāizpilda šī komanda: alpine.documentation=Papildus informācija par Alpine reģistru pieejama dokumentācijā. alpine.repository=Repozitorija informācija alpine.repository.branches=Atzari @@ -3250,10 +3250,10 @@ alpine.repository.architectures=Arhitektūras cargo.registry=Uzstādiet šo reģistru Cargo konfigurācijas failā, piemēram, ~/.cargo/config.toml: cargo.install=Lai instalētu Cargo pakotni, izpildiet sekojošu komandu: cargo.documentation=Papildus informācija par Cargo reģistru pieejama dokumentācijā. -cargo.details.repository_site=Repozitorija lapa +cargo.details.repository_site=Repozitorija vietne cargo.details.documentation_site=Dokumentācijas lapa chef.registry=Uzstādiet šo reģistru failā ~/.chef/config.rb: -chef.install=Lai instalētu pakotni, nepieciešams izpildīt sekojošu komandu: +chef.install=Lai uzstādītu pakotni, ir jāizpilda šī komanda: chef.documentation=Papildus informācija par Chef reģistru pieejama dokumentācijā. composer.registry=Pievienojiet šo reģistru savā ~/.composer/config.json failā: composer.install=Lai instalētu Composer pakotni, izpildiet sekojošu komandu: @@ -3267,7 +3267,7 @@ conan.documentation=Papildus informācija par Conan reģistru pieejama .condarc: conda.install=Lai instalētu Conda pakotni, izpildiet sekojošu komandu: conda.documentation=Papildus informācija par Conda reģistru pieejama dokumentācijā. -conda.details.repository_site=Repozitorija lapa +conda.details.repository_site=Repozitorija vietne conda.details.documentation_site=Dokumentācijas lapa container.details.type=Attēla formāts container.details.platform=Platforma @@ -3280,11 +3280,11 @@ container.labels=Etiķetes container.labels.key=Atslēga container.labels.value=Vērtība cran.registry=Iestaties šo reģistru savā Rprofile.site failā: -cran.install=Lai instalētu pakotni, nepieciešams izpildīt sekojošu komandu: +cran.install=Lai uzstādītu pakotni, ir jāizpilda šī komanda: cran.documentation=Papildus informācija par CRAN reģistru pieejama dokumentācijā. debian.registry=Konfigurējiet šo reģistru no komandrindas: debian.registry.info=Izvēlieties $distribution un $component no saraksta zemāk. -debian.install=Lai instalētu pakotni, nepieciešams izpildīt sekojošu komandu: +debian.install=Lai uzstādītu pakotni, ir jāizpilda šī komanda: debian.documentation=Papildus informācija par Debian reģistru pieejama dokumentācijā. debian.repository=Repozitorija informācija debian.repository.distributions=Distribūcijas @@ -3321,7 +3321,7 @@ pypi.requires=Nepieciešams Python pypi.install=Lai instalētu pip pakotni, izpildiet sekojošu komandu: pypi.documentation=Papildus informācija par PyPI reģistru pieejama dokumentācijā. rpm.registry=Konfigurējiet šo reģistru no komandrindas: -rpm.install=Lai instalētu pakotni, nepieciešams izpildīt sekojošu komandu: +rpm.install=Lai uzstādītu pakotni, ir jāizpilda šī komanda: rpm.documentation=Papildus informācija par RPM reģistru pieejama dokumentācijā. rubygems.install=Lai instalētu gem pakotni, izpildiet sekojošu komandu: rubygems.install2=vai pievienojiet Gemfile: From cc73e84fa355fa49e875b2d17319b3da70775e0d Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Tue, 18 Jul 2023 20:32:36 +0800 Subject: [PATCH 2/9] Avoid creating directories when loading config (#25944) The "creating dir/file during load config" is a longstanding and complex problem. This PR only does a quick patch, it still needs more refactorings in the future. Fix #25938 --- modules/setting/packages.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/setting/packages.go b/modules/setting/packages.go index dc8d98d29fbc..b225615a2401 100644 --- a/modules/setting/packages.go +++ b/modules/setting/packages.go @@ -74,8 +74,10 @@ func loadPackagesFrom(rootCfg ConfigProvider) (err error) { Packages.ChunkedUploadPath = filepath.ToSlash(filepath.Join(AppDataPath, Packages.ChunkedUploadPath)) } - if err := os.MkdirAll(Packages.ChunkedUploadPath, os.ModePerm); err != nil { - return fmt.Errorf("unable to create chunked upload directory: %s (%v)", Packages.ChunkedUploadPath, err) + if HasInstallLock(rootCfg) { + if err := os.MkdirAll(Packages.ChunkedUploadPath, os.ModePerm); err != nil { + return fmt.Errorf("unable to create chunked upload directory: %s (%v)", Packages.ChunkedUploadPath, err) + } } Packages.LimitTotalOwnerSize = mustBytes(sec, "LIMIT_TOTAL_OWNER_SIZE") From 8af96f585f83ff5c0000f0395dab52b02517abe3 Mon Sep 17 00:00:00 2001 From: KN4CK3R Date: Tue, 18 Jul 2023 17:18:37 +0200 Subject: [PATCH 3/9] Disallow dangerous url schemes (#25960) Regression: https://github.com/go-gitea/gitea/pull/24805 Closes: #25945 - Disallow `javascript`, `vbscript` and `data` (data uri images still work) url schemes even if all other schemes are allowed - Fixed older `cbthunderlink` tests --------- Co-authored-by: delvh --- go.mod | 2 +- go.sum | 4 ++-- modules/markup/sanitizer.go | 9 +++++++++ modules/markup/sanitizer_test.go | 9 +++++++-- 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 99b25a261943..9ba54ed18548 100644 --- a/go.mod +++ b/go.mod @@ -76,7 +76,7 @@ require ( github.com/mattn/go-sqlite3 v1.14.17 github.com/meilisearch/meilisearch-go v0.25.0 github.com/mholt/archiver/v3 v3.5.1 - github.com/microcosm-cc/bluemonday v1.0.24 + github.com/microcosm-cc/bluemonday v1.0.25 github.com/minio/minio-go/v7 v7.0.60 github.com/minio/sha256-simd v1.0.1 github.com/msteinert/pam v1.1.0 diff --git a/go.sum b/go.sum index a2568460f105..5f2704fddbde 100644 --- a/go.sum +++ b/go.sum @@ -865,8 +865,8 @@ github.com/mholt/acmez v1.2.0 h1:1hhLxSgY5FvH5HCnGUuwbKY2VQVo8IU7rxXKSnZ7F30= github.com/mholt/acmez v1.2.0/go.mod h1:VT9YwH1xgNX1kmYY89gY8xPJC84BFAisjo8Egigt4kE= github.com/mholt/archiver/v3 v3.5.1 h1:rDjOBX9JSF5BvoJGvjqK479aL70qh9DIpZCl+k7Clwo= github.com/mholt/archiver/v3 v3.5.1/go.mod h1:e3dqJ7H78uzsRSEACH1joayhuSyhnonssnDhppzS1L4= -github.com/microcosm-cc/bluemonday v1.0.24 h1:NGQoPtwGVcbGkKfvyYk1yRqknzBuoMiUrO6R7uFTPlw= -github.com/microcosm-cc/bluemonday v1.0.24/go.mod h1:ArQySAMps0790cHSkdPEJ7bGkF2VePWH773hsJNSHf8= +github.com/microcosm-cc/bluemonday v1.0.25 h1:4NEwSfiJ+Wva0VxN5B8OwMicaJvD8r9tlJWm9rtloEg= +github.com/microcosm-cc/bluemonday v1.0.25/go.mod h1:ZIOjCQp1OrzBBPIJmfX4qDYFuhU02nx4bn030ixfHLE= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.55 h1:GoQ4hpsj0nFLYe+bWiCToyrBEJXkQfOOIvFGFy0lEgo= github.com/miekg/dns v1.1.55/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY= diff --git a/modules/markup/sanitizer.go b/modules/markup/sanitizer.go index 59cde61a6816..9f97f1d5b13e 100644 --- a/modules/markup/sanitizer.go +++ b/modules/markup/sanitizer.go @@ -6,6 +6,7 @@ package markup import ( "io" + "net/url" "regexp" "sync" @@ -79,6 +80,14 @@ func createDefaultPolicy() *bluemonday.Policy { policy.AllowURLSchemes(setting.Markdown.CustomURLSchemes...) } else { policy.AllowURLSchemesMatching(allowAllRegex) + + // Even if every scheme is allowed, these three are blocked for security reasons + disallowScheme := func(*url.URL) bool { + return false + } + policy.AllowURLSchemeWithCustomPolicy("javascript", disallowScheme) + policy.AllowURLSchemeWithCustomPolicy("vbscript", disallowScheme) + policy.AllowURLSchemeWithCustomPolicy("data", disallowScheme) } // Allow classes for anchors diff --git a/modules/markup/sanitizer_test.go b/modules/markup/sanitizer_test.go index 0c22ce3ba0e7..4d85cbf9f303 100644 --- a/modules/markup/sanitizer_test.go +++ b/modules/markup/sanitizer_test.go @@ -54,8 +54,13 @@ func Test_Sanitizer(t *testing.T) { `Hello World`, `Hello World`, // URLs - `[my custom URL scheme](cbthunderlink://somebase64string)`, `[my custom URL scheme](cbthunderlink://somebase64string)`, - `[my custom URL scheme](matrix:roomid/psumPMeAfzgAeQpXMG:feneas.org?action=join)`, `[my custom URL scheme](matrix:roomid/psumPMeAfzgAeQpXMG:feneas.org?action=join)`, + `my custom URL scheme`, `my custom URL scheme`, + `my custom URL scheme`, `my custom URL scheme`, + + // Disallow dangerous url schemes + `bad`, `bad`, + `bad`, `bad`, + `bad`, `bad`, } for i := 0; i < len(testCases); i += 2 { From faa28b5a44912f1c63afddab9396bae9e6fe061c Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Wed, 19 Jul 2023 00:06:43 +0800 Subject: [PATCH 4/9] 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 2a4142088908..80cbeb040cf8 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 7e7a139c9a49..467b8a47b5d6 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 6851be742c64..6b699e08700f 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 7de96f09fdd1..e24b35c3fce1 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 70a4a300509e..ef743780acf8 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 48eee9214d2f..28da7af535d9 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 e5744526db61..a3a0f8d8f398 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 dc82ed465a20..b845da9367cf 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 83c713cb05e6..029a482fcde9 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 36cf00082b0f..a58cbbf7fc79 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 9c307cbc48c7..05377d6bae64 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 4c8b1c90d716..fc4ded899bba 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