From e7c2d8258cc337e53d5239968b31b9373ef12002 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Tue, 2 Aug 2022 11:52:49 +0200 Subject: [PATCH 01/11] add new cols in package --- models/migrations/migrations.go | 2 ++ models/migrations/v224.go | 18 ++++++++++++++++++ models/packages/package.go | 2 ++ 3 files changed, 22 insertions(+) create mode 100644 models/migrations/v224.go diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index 2719f45efbbbc..c2a57cc6a2275 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -406,6 +406,8 @@ var migrations = []Migration{ NewMigration("Drop old CredentialID column", dropOldCredentialIDColumn), // v223 -> v224 NewMigration("Rename CredentialIDBytes column to CredentialID", renameCredentialIDBytes), + // v224 -> v225 + NewMigration("Add container repository property", addDescriptionAndReadmeColsForPackage), } // GetCurrentDBVersion returns the current db version diff --git a/models/migrations/v224.go b/models/migrations/v224.go new file mode 100644 index 0000000000000..3b71aa9c5ed32 --- /dev/null +++ b/models/migrations/v224.go @@ -0,0 +1,18 @@ +// Copyright 2022 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package migrations + +import ( + "xorm.io/xorm" +) + +func addDescriptionAndReadmeColsForPackage(x *xorm.Engine) error { + type Package struct { + Description string `xorm:"TEXT"` + Readme string `xorm:"LONGBLOB"` + } + + return x.Sync2(new(Package)) +} diff --git a/models/packages/package.go b/models/packages/package.go index 97cfbc6cad20e..3cbb1ed7b41f4 100644 --- a/models/packages/package.go +++ b/models/packages/package.go @@ -106,6 +106,8 @@ type Package struct { Name string `xorm:"NOT NULL"` LowerName string `xorm:"UNIQUE(s) INDEX NOT NULL"` SemverCompatible bool `xorm:"NOT NULL DEFAULT false"` + Description string `xorm:"TEXT"` + Readme string `xorm:"LONGBLOB"` } // TryInsertPackage inserts a package. If a package exists already, ErrDuplicatePackage is returned From adb7da0cec4cbad82c3dd146977dbc5546552f64 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Tue, 2 Aug 2022 13:58:08 +0200 Subject: [PATCH 02/11] replace TEXT to VARCHAR (Description) --- models/packages/package.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/models/packages/package.go b/models/packages/package.go index 3cbb1ed7b41f4..5e94eeea67945 100644 --- a/models/packages/package.go +++ b/models/packages/package.go @@ -106,7 +106,7 @@ type Package struct { Name string `xorm:"NOT NULL"` LowerName string `xorm:"UNIQUE(s) INDEX NOT NULL"` SemverCompatible bool `xorm:"NOT NULL DEFAULT false"` - Description string `xorm:"TEXT"` + Description string `xorm:"VARCHAR(255)"` Readme string `xorm:"LONGBLOB"` } @@ -145,6 +145,15 @@ func SetRepositoryLink(ctx context.Context, packageID, repoID int64) error { return err } +// SetDescriptions sets descriptions +func SetDescriptions(ctx context.Context, packageID int64, description string, readme string) error { + _, err := db.GetEngine(ctx).ID(packageID).Update(&Package{ + Description: description, + Readme: readme, + }) + return err +} + // UnlinkRepositoryFromAllPackages unlinks every package from the repository func UnlinkRepositoryFromAllPackages(ctx context.Context, repoID int64) error { _, err := db.GetEngine(ctx).Where("repo_id = ?", repoID).Cols("repo_id").Update(&Package{}) From 86d371eb6f58bec954ac203d781d7051880435aa Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Tue, 2 Aug 2022 13:59:31 +0200 Subject: [PATCH 03/11] add form handler --- routers/web/user/package.go | 21 +++++++++++++++++++++ services/forms/user_form.go | 6 ++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/routers/web/user/package.go b/routers/web/user/package.go index 59aaf07ff2a81..5c553d75430bd 100644 --- a/routers/web/user/package.go +++ b/routers/web/user/package.go @@ -355,6 +355,27 @@ func PackageSettingsPost(ctx *context.Context) { ctx.Flash.Error(ctx.Tr("packages.settings.link.error")) } + ctx.Redirect(ctx.Link) + return + case "update": + success := func() bool { + description := form.Description + readme := form.Readme + + if err := packages_model.SetDescriptions(ctx, pd.Package.ID, description, readme); err != nil { + log.Error("Error updating package: %v", err) + return false + } + + return true + }() + + if success { + ctx.Flash.Success(ctx.Tr("packages.settings.descriptions.success")) + } else { + ctx.Flash.Error(ctx.Tr("packages.settings.descriptions.error")) + } + ctx.Redirect(ctx.Link) return case "delete": diff --git a/services/forms/user_form.go b/services/forms/user_form.go index c8f2b02d8c809..ea19152aaff95 100644 --- a/services/forms/user_form.go +++ b/services/forms/user_form.go @@ -434,8 +434,10 @@ func (f *WebauthnDeleteForm) Validate(req *http.Request, errs binding.Errors) bi // PackageSettingForm form for package settings type PackageSettingForm struct { - Action string - RepoID int64 `form:"repo_id"` + Action string + RepoID int64 `form:"repo_id"` + Description string `form:"description"` + Readme string `form:"readme"` } // Validate validates the fields From 413a27d562bf77121d494c6ce51045e9f5fadfe1 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Tue, 2 Aug 2022 14:00:13 +0200 Subject: [PATCH 04/11] add form ui --- routers/web/web.go | 1 + templates/package/readme_tab.tmpl | 14 ++++++++++++ templates/package/settings.tmpl | 24 ++++++++++++++++++++- web_src/js/features/package-editor.js | 31 +++++++++++++++++++++++++++ web_src/js/index.js | 3 +++ 5 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 templates/package/readme_tab.tmpl create mode 100644 web_src/js/features/package-editor.js diff --git a/routers/web/web.go b/routers/web/web.go index a9f43fb2c4feb..a3f2bead35717 100644 --- a/routers/web/web.go +++ b/routers/web/web.go @@ -728,6 +728,7 @@ func RegisterRoutes(m *web.Route) { m.Group("/{type}/{name}", func() { m.Get("", user.RedirectToLastVersion) m.Get("/versions", user.ListPackageVersions) + m.Post("/markdown", bindIgnErr(structs.MarkdownOption{}), misc.Markdown) m.Group("/{version}", func() { m.Get("", user.ViewPackageVersion) m.Get("/files/{fileid}", user.DownloadPackageFile) diff --git a/templates/package/readme_tab.tmpl b/templates/package/readme_tab.tmpl new file mode 100644 index 0000000000000..95ce5d17a6e71 --- /dev/null +++ b/templates/package/readme_tab.tmpl @@ -0,0 +1,14 @@ + +
+
+ +
+
+ {{.locale.Tr "loading"}} +
+
diff --git a/templates/package/settings.tmpl b/templates/package/settings.tmpl index 5f045e98b0870..b140c165e6384 100644 --- a/templates/package/settings.tmpl +++ b/templates/package/settings.tmpl @@ -1,5 +1,5 @@ {{template "base/head" .}} -
+
{{template "user/overview/header" .}}
{{template "base/alert" .}} @@ -34,6 +34,28 @@
+

+ {{.locale.Tr "packages.settings.descriptions"}} +

+
+
+ {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} + + +
+ + +
+ + + {{template "package/readme_tab" .}} + +
+ +
+
+

{{.locale.Tr "repo.settings.danger_zone"}}

diff --git a/web_src/js/features/package-editor.js b/web_src/js/features/package-editor.js new file mode 100644 index 0000000000000..5101d957b04da --- /dev/null +++ b/web_src/js/features/package-editor.js @@ -0,0 +1,31 @@ +import $ from 'jquery'; + +const {csrfToken} = window.config; + +function initEditPreviewTab($form) { + const $tabMenu = $form.find('.tabular.menu'); + $tabMenu.find('.item').tab(); + $tabMenu.find(`.item[data-tab="${$tabMenu.data('preview')}"]`).on('click', function () { + const $this = $(this); + const context = `/${$this.data('context')}`; + const mode = $this.data('markdown-mode') || 'comment'; + + $.post($this.data('url'), { + _csrf: csrfToken, + mode, + context, + text: $form.find(`.tab[data-tab="${$tabMenu.data('write')}"] textarea`).val(), + }, (data) => { + const $diffPreviewPanel = $form.find(`.tab[data-tab="${$tabMenu.data('preview')}"]`); + $diffPreviewPanel.html(data); + }); + }); +} + +export function initPackageEditor() { + if ($('.package.settings .descriptions').length === 0) { + return; + } + + initEditPreviewTab($('.package.settings .descriptions')); +} diff --git a/web_src/js/index.js b/web_src/js/index.js index 6f872b5353378..858fb5a624cbc 100644 --- a/web_src/js/index.js +++ b/web_src/js/index.js @@ -77,6 +77,7 @@ import {initOrgTeamSearchRepoBox, initOrgTeamSettings} from './features/org-team import {initUserAuthWebAuthn, initUserAuthWebAuthnRegister} from './features/user-auth-webauthn.js'; import {initRepoRelease, initRepoReleaseEditor} from './features/repo-release.js'; import {initRepoEditor} from './features/repo-editor.js'; +import {initPackageEditor} from './features/package-editor.js'; import {initCompSearchUserBox} from './features/comp/SearchUserBox.js'; import {initInstall} from './features/install.js'; import {initCompWebHookEditor} from './features/comp/WebHookEditor.js'; @@ -181,6 +182,8 @@ $(document).ready(() => { initRepoWikiForm(); initRepository(); + initPackageEditor(); + initCommitStatuses(); initUserAuthLinkAccountView(); From 3dceba98f88d4353c5d42133dc5eba8faa6f751a Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Tue, 2 Aug 2022 14:00:41 +0200 Subject: [PATCH 05/11] add package description in packages list --- templates/package/shared/list.tmpl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/templates/package/shared/list.tmpl b/templates/package/shared/list.tmpl index 189b75b59ebdb..4663c61c3e520 100644 --- a/templates/package/shared/list.tmpl +++ b/templates/package/shared/list.tmpl @@ -29,6 +29,10 @@ {{svg .Package.Type.SVGName 16}} {{.Package.Type.Name}}
+ {{if .Package.Description}} +

{{- .Package.Description -}}

+ {{end}} + {{$timeStr := TimeSinceUnix .Version.CreatedUnix $.locale}} {{$hasRepositoryAccess := false}} {{if .Repository}} From 28f3f4ecc7652c4d5495881903c87b213f6a3447 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Tue, 2 Aug 2022 14:27:55 +0200 Subject: [PATCH 06/11] show description and readme in package view --- templates/package/content/composer.tmpl | 2 ++ templates/package/content/conan.tmpl | 2 ++ templates/package/content/container.tmpl | 3 +++ templates/package/content/generic.tmpl | 2 ++ templates/package/content/helm.tmpl | 2 ++ templates/package/content/maven.tmpl | 2 ++ templates/package/content/npm.tmpl | 2 ++ templates/package/content/nuget.tmpl | 2 ++ templates/package/content/readme.tmpl | 6 ++++++ templates/package/content/rubygems.tmpl | 3 +++ templates/package/view.tmpl | 7 +++++++ 11 files changed, 33 insertions(+) create mode 100644 templates/package/content/readme.tmpl diff --git a/templates/package/content/composer.tmpl b/templates/package/content/composer.tmpl index 8cc18f8ba8fb7..3900885493a80 100644 --- a/templates/package/content/composer.tmpl +++ b/templates/package/content/composer.tmpl @@ -22,6 +22,8 @@
+ {{template "package/content/readme" .}} + {{if .PackageDescriptor.Metadata.Description}}

{{.locale.Tr "packages.about"}}

diff --git a/templates/package/content/conan.tmpl b/templates/package/content/conan.tmpl index c496cee55cf62..c838a02eabac5 100644 --- a/templates/package/content/conan.tmpl +++ b/templates/package/content/conan.tmpl @@ -16,6 +16,8 @@
+ {{template "package/content/readme" .}} + {{if .PackageDescriptor.Metadata.Description}}

{{.locale.Tr "packages.about"}}

diff --git a/templates/package/content/container.tmpl b/templates/package/content/container.tmpl index 44a64d13eed3e..b55c26e11b8cd 100644 --- a/templates/package/content/container.tmpl +++ b/templates/package/content/container.tmpl @@ -19,6 +19,9 @@
+ + {{template "package/content/readme" .}} + {{if .PackageDescriptor.Metadata.MultiArch}}

{{.locale.Tr "packages.container.multi_arch"}}

diff --git a/templates/package/content/generic.tmpl b/templates/package/content/generic.tmpl index 045ff7d08ab15..e01de4e806590 100644 --- a/templates/package/content/generic.tmpl +++ b/templates/package/content/generic.tmpl @@ -11,4 +11,6 @@
+ + {{template "package/content/readme" .}} {{end}} diff --git a/templates/package/content/helm.tmpl b/templates/package/content/helm.tmpl index 59cdc157b4087..90224cabec207 100644 --- a/templates/package/content/helm.tmpl +++ b/templates/package/content/helm.tmpl @@ -17,6 +17,8 @@ helm repo update + {{template "package/content/readme" .}} + {{if .PackageDescriptor.Metadata.Description}}

{{.locale.Tr "packages.about"}}

diff --git a/templates/package/content/maven.tmpl b/templates/package/content/maven.tmpl index 0b5612151c577..4bc5828dc10a3 100644 --- a/templates/package/content/maven.tmpl +++ b/templates/package/content/maven.tmpl @@ -45,6 +45,8 @@
+ {{template "package/content/readme" .}} + {{if .PackageDescriptor.Metadata.Description}}

{{.locale.Tr "packages.about"}}

diff --git a/templates/package/content/npm.tmpl b/templates/package/content/npm.tmpl index 33d51d4dfd87d..21cfd3437a96f 100644 --- a/templates/package/content/npm.tmpl +++ b/templates/package/content/npm.tmpl @@ -20,6 +20,8 @@
+ {{template "package/content/readme" .}} + {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.Readme}}

{{.locale.Tr "packages.about"}}

diff --git a/templates/package/content/nuget.tmpl b/templates/package/content/nuget.tmpl index 4ea41fa826a28..c02243f3099d6 100644 --- a/templates/package/content/nuget.tmpl +++ b/templates/package/content/nuget.tmpl @@ -16,6 +16,8 @@
+ {{template "package/content/readme" .}} + {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.ReleaseNotes}}

{{.locale.Tr "packages.about"}}

diff --git a/templates/package/content/readme.tmpl b/templates/package/content/readme.tmpl new file mode 100644 index 0000000000000..8a3f427b3c2b8 --- /dev/null +++ b/templates/package/content/readme.tmpl @@ -0,0 +1,6 @@ +{{if .PackageDescriptor.Package.Readme}} +

{{.locale.Tr "packages.readme"}}

+
+ {{RenderMarkdownToHtml .PackageDescriptor.Package.Readme}} +
+{{end}} diff --git a/templates/package/content/rubygems.tmpl b/templates/package/content/rubygems.tmpl index 0cb7b670b1dea..2927b3ac34686 100644 --- a/templates/package/content/rubygems.tmpl +++ b/templates/package/content/rubygems.tmpl @@ -17,6 +17,9 @@ end
+ + {{template "package/content/readme" .}} + {{if .PackageDescriptor.Metadata.Description}}

{{.locale.Tr "packages.about"}}

{{.PackageDescriptor.Metadata.Description}}
diff --git a/templates/package/view.tmpl b/templates/package/view.tmpl index ba309b6a779df..16eca46e8ee5c 100644 --- a/templates/package/view.tmpl +++ b/templates/package/view.tmpl @@ -7,6 +7,12 @@

{{.PackageDescriptor.Package.Name}} ({{.PackageDescriptor.Version.Version}})

+ +

+ {{if .PackageDescriptor.Package.Description}} + {{- .PackageDescriptor.Package.Description -}} + {{end}} +

{{$timeStr := TimeSinceUnix .PackageDescriptor.Version.CreatedUnix $.locale}} @@ -18,6 +24,7 @@
+
{{template "package/content/composer" .}} {{template "package/content/conan" .}} From 39a95496fa7c9df3f5ba53545a88a8e05f2f725c Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Tue, 2 Aug 2022 14:49:39 +0200 Subject: [PATCH 07/11] add translations (en) --- options/locale/locale_en-US.ini | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index a774bf92fff42..ba1eed343ad3b 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -3129,3 +3129,10 @@ settings.delete.description = Deleting a package is permanent and cannot be undo settings.delete.notice = You are about to delete %s (%s). This operation is irreversible, are you sure? settings.delete.success = The package has been deleted. settings.delete.error = Failed to delete the package. +settings.descriptions.success = Descriptions were successfully updated +settings.descriptions.error = Failed to update descriptions +settings.descriptions = Descriptions +settings.description.description = Description +settings.readme.description = Readme +settings.descriptions.button = Update descriptions +readme = Readme From 7d309b6967312773f3560c3431be09bd745218d1 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Tue, 2 Aug 2022 14:52:16 +0200 Subject: [PATCH 08/11] add translations (fr) --- options/locale/locale_fr-FR.ini | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/options/locale/locale_fr-FR.ini b/options/locale/locale_fr-FR.ini index acd17f88c595c..b262ee80d245a 100644 --- a/options/locale/locale_fr-FR.ini +++ b/options/locale/locale_fr-FR.ini @@ -2705,4 +2705,10 @@ error.unit_not_allowed=Vous n'êtes pas autorisé à accéder à cette section d [packages] empty.repo=Avez-vous téléchargé un paquet, mais il n'est pas affiché ici? Allez dans les paramètres du paquet et liez le à ce dépôt. - +settings.descriptions.success = Les descriptifs ont été mises à jour +settings.descriptions.error = Échec de la mise à jour des descriptifs +settings.descriptions = Descriptifs +settings.description.description = Description +settings.readme.description = Readme +settings.descriptions.button = Mettre à jour les descriptifs +readme = Readme From 0e9657283a5a107513c4169700d554c568168436 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Tue, 2 Aug 2022 15:40:58 +0200 Subject: [PATCH 09/11] fix lint --- models/packages/package.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/packages/package.go b/models/packages/package.go index 5e94eeea67945..1ab5087c99396 100644 --- a/models/packages/package.go +++ b/models/packages/package.go @@ -146,7 +146,7 @@ func SetRepositoryLink(ctx context.Context, packageID, repoID int64) error { } // SetDescriptions sets descriptions -func SetDescriptions(ctx context.Context, packageID int64, description string, readme string) error { +func SetDescriptions(ctx context.Context, packageID int64, description, readme string) error { _, err := db.GetEngine(ctx).ID(packageID).Update(&Package{ Description: description, Readme: readme, From ae6f2f515d1b40cebd2fc424734ce98d08765158 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Mon, 22 May 2023 12:41:42 +0200 Subject: [PATCH 10/11] Update routers/web/user/package.go Co-authored-by: delvh --- routers/web/user/package.go | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/routers/web/user/package.go b/routers/web/user/package.go index 1994210829391..13bf9225071d0 100644 --- a/routers/web/user/package.go +++ b/routers/web/user/package.go @@ -366,22 +366,14 @@ func PackageSettingsPost(ctx *context.Context) { ctx.Redirect(ctx.Link) return case "update": - success := func() bool { - description := form.Description - readme := form.Readme + description := form.Description + readme := form.Readme - if err := packages_model.SetDescriptions(ctx, pd.Package.ID, description, readme); err != nil { - log.Error("Error updating package: %v", err) - return false - } - - return true - }() - - if success { - ctx.Flash.Success(ctx.Tr("packages.settings.descriptions.success")) - } else { + if err := packages_model.SetDescriptions(ctx, pd.Package.ID, description, readme); err != nil { + log.Error("Error updating package: %v", err) ctx.Flash.Error(ctx.Tr("packages.settings.descriptions.error")) + } else { + ctx.Flash.Success(ctx.Tr("packages.settings.descriptions.success")) } ctx.Redirect(ctx.Link) From 3cb0f9960b70e58b8584dc029799b10d334bb9e3 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Mon, 22 May 2023 12:43:22 +0200 Subject: [PATCH 11/11] Update models/migrations/v224.go Co-authored-by: delvh --- models/migrations/v224.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/migrations/v224.go b/models/migrations/v224.go index 3b71aa9c5ed32..9e5a653f16b8f 100644 --- a/models/migrations/v224.go +++ b/models/migrations/v224.go @@ -14,5 +14,5 @@ func addDescriptionAndReadmeColsForPackage(x *xorm.Engine) error { Readme string `xorm:"LONGBLOB"` } - return x.Sync2(new(Package)) + return x.Sync(new(Package)) }