diff --git a/appview/pages/repoinfo/repoinfo.go b/appview/pages/repoinfo/repoinfo.go index f5b505bb..20121d65 100644 --- a/appview/pages/repoinfo/repoinfo.go +++ b/appview/pages/repoinfo/repoinfo.go @@ -1,6 +1,7 @@ package repoinfo import ( + "encoding/json" "fmt" "path" "slices" @@ -117,3 +118,48 @@ func (r RolesInRepo) IsCollaborator() bool { func (r RolesInRepo) IsPushAllowed() bool { return slices.Contains(r.Roles, "repo:push") } + +// PrimaryLanguage returns the first (most used) language from a list, or empty string if none +func PrimaryLanguage(languages []interface{}) string { + if len(languages) == 0 { + return "" + } + + // Languages are already sorted by percentage in descending order + // Just get the first one + if firstLang, ok := languages[0].(map[string]interface{}); ok { + if name, ok := firstLang["Name"].(string); ok { + return name + } + } + + return "" +} + +// StructuredData generates Schema.org JSON-LD structured data for the repository +func (r RepoInfo) StructuredData(primaryLanguage string) string { + data := map[string]interface{}{ + "@context": "https://schema.org", + "@type": "SoftwareSourceCode", + "name": r.Name, + "description": r.Description, + "codeRepository": "https://tangled.org/" + r.FullName(), + "url": "https://tangled.org/" + r.FullName(), + "author": map[string]interface{}{ + "@type": "Person", + "name": r.owner(), + "url": "https://tangled.org/" + r.owner(), + }, + } + + // Add programming language if available + if primaryLanguage != "" { + data["programmingLanguage"] = primaryLanguage + } + + jsonBytes, err := json.Marshal(data) + if err != nil { + return "{}" + } + return string(jsonBytes) +} diff --git a/appview/pages/templates/fragments/breadcrumb.html b/appview/pages/templates/fragments/breadcrumb.html new file mode 100644 index 00000000..68297379 --- /dev/null +++ b/appview/pages/templates/fragments/breadcrumb.html @@ -0,0 +1,22 @@ +{{ define "fragments/breadcrumb" }} + {{ $items := . }} + {{ if gt (len $items) 0 }} + + {{ end }} +{{ end }} \ No newline at end of file diff --git a/appview/pages/templates/goodfirstissues/index.html b/appview/pages/templates/goodfirstissues/index.html index b4fa8dd1..255b6b84 100644 --- a/appview/pages/templates/goodfirstissues/index.html +++ b/appview/pages/templates/goodfirstissues/index.html @@ -1,12 +1,37 @@ {{ define "title" }}good first issues{{ end }} {{ define "extrameta" }} + + + - + - + + + + + + + + {{ end }} +{{ define "canonical" }}https://tangled.org/goodfirstissues{{ end }} + {{ define "content" }}