+
+
.gitignore
@@ -148,20 +155,10 @@
-
-
+
{{ctx.Locale.Tr "repo.readme"}}
@@ -174,6 +171,7 @@
{{ctx.Locale.Tr "repo.readme_helper_desc"}}
+
diff --git a/templates/repo/dcs_metadata.tmpl b/templates/repo/dcs_metadata.tmpl
new file mode 100644
index 0000000000..dda4f0e6d8
--- /dev/null
+++ b/templates/repo/dcs_metadata.tmpl
@@ -0,0 +1,117 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+ {{template "base/alert" .}}
+
+
+
+
+
+
+ {{if .Door43Metadatas}}
+ {{range $i, $dm := .Door43Metadatas}}
+
+
+
+ {{$color := "grey"}}
+ {{$type := "Branch"}}
+ {{$icon := "octicon-git-branch"}}
+ {{$title := "branch"}}
+
+ {{if eq .RefType "tag"}}
+ {{$type = "Release"}}
+ {{$icon = "octicon-tag"}}
+ {{$title = "release"}}
+ {{end}}
+
+ {{if eq .Stage 1}}
+ {{$color = "green"}}
+ {{$title = "Production Release"}}
+ {{else if eq .Stage 2}}
+ {{$color = "orange"}}
+ {{$title = "Preprod"}}
+ {{else if eq .Stage 3}}
+ {{$color = "purple"}}
+ {{$title = "Default Branch / Metadata"}}
+ {{else if and (eq .Stage 4) (.IsRepoMetadata)}}
+ {{$color = "red"}}
+ {{$title = "Default Metadata"}}
+ {{end}}
+
+ {{if and .IsLatestForStage (ne .Stage 4)}}
+ {{$title = printf "%s - Latest" $title}}
+ {{end}}
+
{{svg $icon 16 "mr-3"}}
+
{{svg "octicon-dot-fill" 22}}
+
{{.Ref}}
+
+
+ {{TimeSince .ReleaseDateUnix.AsTime ctx.Locale}}
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.metadata.title"}}: {{.Title}}
+
+ {{ctx.Locale.Tr "repo.metadata.subject"}}: {{.Subject}}
+
+ {{ctx.Locale.Tr "repo.metadata.resource"}}: {{.Resource}}
+
+ {{ctx.Locale.Tr "repo.metadata.metadata_type"}}: {{.GetMetadataTypeTitle}} ({{.MetadataType}} {{.MetadataVersion}})
+
+ {{ctx.Locale.Tr "repo.metadata.language"}}: {{.LanguageTitle}} ({{.Language}}, {{.LanguageDirection}})
+
+ {{ctx.Locale.Tr "repo.metadata.ingredients"}}:
+
+ {{range .Ingredients}}
+ {{.Identifier}}
+ {{end}}
+
+
+ {{ctx.Locale.Tr "repo.metadata.stage"}}: {{.StageStr}}
+
+ {{if .Release}}{{ctx.Locale.Tr "repo.metadata.release_date"}}{{else}}{{ctx.Locale.Tr "repo.metadata.last_updated"}}{{end}}:
+ {{DateTime "full" .ReleaseDateUnix.AsTime}}
+
+
+
+
+
{{.GetMetadataJSONString}}
+
+
+
+ {{end}}
+ {{else}}
+
No Metadata for this Repository. Click update to scan the repo.
+ {{end}}
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/templates/repo/diff/box.tmpl b/templates/repo/diff/box.tmpl
index c037c3b365..8028e7c027 100644
--- a/templates/repo/diff/box.tmpl
+++ b/templates/repo/diff/box.tmpl
@@ -143,6 +143,11 @@
{{else if $file.Mode}}
{{ctx.Locale.Tr ($file.ModeTranslationKey $file.Mode)}}
{{end}}
+
+ {{if $file.Entry}}
+ {{template "repo/validation-badge" dict "file" $file.Entry "root" $}}
+ {{end}}
+
{{template "repo/cite/cite_modal" .}}
{{end}}
diff --git a/templates/repo/release/list.tmpl b/templates/repo/release/list.tmpl
index 16e57b257f..3860a941e5 100644
--- a/templates/repo/release/list.tmpl
+++ b/templates/repo/release/list.tmpl
@@ -9,6 +9,30 @@
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.scrub"}}
+
+
+
{{ctx.Locale.Tr "repo.settings.scrub"}}
+
{{ctx.Locale.Tr "repo.settings.scrub_desc"}}
+
{{end}}
@@ -991,6 +1005,38 @@
{{template "base/modal_actions_confirm" .}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.scrub_notices_1" | Safe}}
+
+
+
+
+
{{end}}
{{end}}
diff --git a/templates/repo/sub_menu.tmpl b/templates/repo/sub_menu.tmpl
index 8edb0c1516..bf53dfbe63 100644
--- a/templates/repo/sub_menu.tmpl
+++ b/templates/repo/sub_menu.tmpl
@@ -13,6 +13,18 @@
{{svg "octicon-tag"}}
{{ctx.Locale.PrettyNumber .NumTags}} {{ctx.Locale.TrN .NumTags "repo.tag" "repo.tags"}}
{{end}}
+
+ {{if .Repository.RepoDM}}
+ {{if .Repository.RepoDM.Language}}
+
{{.Repository.RepoDM.LanguageTitle}} ({{.Repository.RepoDM.Language}}){{if .Repository.RepoDM.LanguageIsGL}}*{{end}}
+ {{end}}
+ {{if .Repository.RepoDM.MetadataType}}
+ {{$metadataTypeTitle := (.Repository.RepoDM.GetMetadataTypeTitle)}}
+ {{$metadataTypeIcon := (.Repository.RepoDM.GetMetadataTypeIcon)}}
+
{{svg "octicon-briefcase"}} {{.Repository.RepoDM.MetadataType}}{{.Repository.RepoDM.MetadataVersion}}
+ {{end}}
+ {{end}}
+
{{$fileSizeFormatted := FileSize .Repository.Size}}{{/* the formatted string is always "{val} {unit}" */}}
{{$fileSizeFields := StringUtils.Split $fileSizeFormatted " "}}
diff --git a/templates/repo/validation-badge.tmpl b/templates/repo/validation-badge.tmpl
new file mode 100644
index 0000000000..e217f4ba25
--- /dev/null
+++ b/templates/repo/validation-badge.tmpl
@@ -0,0 +1,33 @@
+{{$errors := ""}}
+{{$showValidationBadge := false}}
+
+{{if StringHasSuffix $.file.Name ".yaml"}}
+ {{$errors = ValidateYAMLFile $.file}}
+ {{if $errors}}
+ {{$showValidationBadge = true}}
+ {{else if and (eq $errors "") (eq $.file.Name $.root.Repository.RepoDM.GetMetadataFilename) (eq $.root.Repository.RepoDM.MetadataType "rc")}}
+ {{$showValidationBadge = true}}
+ {{$errors = ValidateManifestFileAsHTML $.file}}
+ {{end}}
+{{else if StringHasSuffix $.file.Name ".json"}}
+ {{$errors = ValidateJSONFile $.file}}
+ {{if $errors}}
+ {{$showValidationBadge = true}}
+ {{else if and (eq $errors "") (eq $.file.Name $.root.Repository.RepoDM.GetMetadataFilename) (eq $.root.Repository.RepoDM.MetadataType "sb")}}
+ {{$showValidationBadge = true}}
+ {{$errors = ValidateMetadataFileAsHTML $.file}}
+ {{end}}
+{{end}}
+
+{{if $showValidationBadge}}
+
+ {{if eq $errors ""}}
+ {{$.root.locale.Tr "repo.metadata.valid"}}
+ {{else}}
+ {{$.root.locale.Tr "repo.metadata.invalid"}} {{svg "octicon-info"}}
+ {{end}}
+
+ {{if $errors}}{{$errors}}{{else}}{{$.root.locale.Tr "repo.metadata.valid_metadata_tooltip" $.file.Name}}{{end}}
+
+
+{{end}}
diff --git a/templates/repo/view_file.tmpl b/templates/repo/view_file.tmpl
index 53e889fefc..de207d397e 100644
--- a/templates/repo/view_file.tmpl
+++ b/templates/repo/view_file.tmpl
@@ -61,13 +61,16 @@
{{ctx.Locale.Tr "repo.unescape_control_characters"}}
{{ctx.Locale.Tr "repo.escape_control_characters"}}
{{end}}
+
+
+
{{if not (or .IsMarkup .IsRenderedHTML)}}
{{template "repo/unicode_escape_prompt" dict "EscapeStatus" .EscapeStatus "root" $}}
{{end}}
-
+
{{if .IsMarkup}}
{{if .FileContent}}{{.FileContent | Safe}}{{end}}
{{else if .IsPlainText}}
@@ -126,3 +129,28 @@
+
+
+
+
diff --git a/templates/repo/view_list.tmpl b/templates/repo/view_list.tmpl
index 7e60f27291..e28b9f4580 100644
--- a/templates/repo/view_list.tmpl
+++ b/templates/repo/view_list.tmpl
@@ -75,6 +75,11 @@
{{else}}
{{svg (printf "octicon-%s" (EntryIcon $entry))}}
{{$entry.Name}}
+
+ {{if or (StringHasSuffix $entry.Name ".yaml") (StringHasSuffix $entry.Name ".json")}}
+ {{template "repo/validation-badge" dict "file" $entry "root" $}}
+ {{end}}
+
{{end}}
{{end}}
diff --git a/templates/swagger/ui.tmpl b/templates/swagger/ui.tmpl
index 9935ab9c5a..2390d1ac45 100644
--- a/templates/swagger/ui.tmpl
+++ b/templates/swagger/ui.tmpl
@@ -1,7 +1,7 @@
-
Gitea API
+
DCS (Gitea) API
diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl
index 2389ec3bee..c7d5926613 100644
--- a/templates/swagger/v1_json.tmpl
+++ b/templates/swagger/v1_json.tmpl
@@ -13,8 +13,8 @@
],
"swagger": "2.0",
"info": {
- "description": "This documentation describes the Gitea API.",
- "title": "Gitea API.",
+ "description": "This documentation describes the DCS (Gitea) API.",
+ "title": "DCS (Gitea) API.",
"license": {
"name": "MIT",
"url": "http://opensource.org/licenses/MIT"
@@ -588,6 +588,55 @@
}
}
},
+ "/admin/users/spam": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "List all users considered to be spam. (have a description \u0026 website, last logged in on the day they signed up, and is older than a week)",
+ "operationId": "adminListSpamUsers",
+ "responses": {
+ "200": {
+ "$ref": "#/responses/UserList"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "Delete spam users - deletes those listed in the spam users list, but WILL NOT delete those that logged in more than 2 days from signing up, have repos, or was created in the last week.",
+ "operationId": "adminDeleteSpamUsers",
+ "parameters": [
+ {
+ "type": "boolean",
+ "description": "purge the users from the system completely",
+ "name": "purge",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
"/admin/users/{username}": {
"delete": {
"produces": [
@@ -886,45 +935,85 @@
}
}
},
- "/gitignore/templates": {
+ "/catalog/entry/{owner}/{repo}/{ref}": {
"get": {
"produces": [
"application/json"
],
"tags": [
- "miscellaneous"
+ "catalog"
+ ],
+ "summary": "Get a catalog entry",
+ "operationId": "catalogGetEntry",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the owner",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "release tag or default branch",
+ "name": "ref",
+ "in": "path",
+ "required": true
+ }
],
- "summary": "Returns a list of all gitignore templates",
- "operationId": "listGitignoresTemplates",
"responses": {
"200": {
- "$ref": "#/responses/GitignoreTemplateList"
+ "$ref": "#/responses/CatalogEntry"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
}
}
}
},
- "/gitignore/templates/{name}": {
+ "/catalog/entry/{owner}/{repo}/{ref}/metadata": {
"get": {
"produces": [
"application/json"
],
"tags": [
- "miscellaneous"
+ "catalog"
],
- "summary": "Returns information about a gitignore template",
- "operationId": "getGitignoreTemplateInfo",
+ "summary": "Get the metdata metadata (metadata.json or manifest.yaml in JSON format) of a catalog entry",
+ "operationId": "catalogGetMetadata",
"parameters": [
{
"type": "string",
- "description": "name of the template",
- "name": "name",
+ "description": "name of the owner",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "release tag or default branch",
+ "name": "ref",
"in": "path",
"required": true
}
],
"responses": {
"200": {
- "$ref": "#/responses/GitignoreTemplateInfo"
+ "$ref": "#/responses/CatalogMetadata"
},
"404": {
"$ref": "#/responses/notFound"
@@ -932,48 +1021,1797 @@
}
}
},
- "/label/templates": {
+ "/catalog/list/languages": {
"get": {
"produces": [
"application/json"
],
"tags": [
- "miscellaneous"
+ "catalog"
+ ],
+ "summary": "List languages in the catalog based on the given criteria",
+ "operationId": "catalogListLanguages",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "list only those with the given owners(s). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive) unlesss partialMatch=true",
+ "name": "owner",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only the given languages(s) if they have entries in the catalog meeting the criteria given (e.g. way to test an language has a given owner and/or subject)",
+ "name": "lang",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "list only those that are (true) or are not (false) a gatetway language",
+ "name": "is_gl",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "prod",
+ "preprod",
+ "latest"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those of the given stage or lower, with low to high being: \"prod\" - return only the production subjects (default); \"preprod\" - return pre-production and production subjects; \"latest\" - return all subjects in the catalog for all stages",
+ "name": "stage",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "Aligned Bible",
+ "Aramaic Grammar",
+ "Bible",
+ "Greek Grammar",
+ "Greek Lexicon",
+ "Greek New Testament",
+ "Hebrew Grammar",
+ "Hebrew Old Testament",
+ "Hebrew-Aramaic Lexicon",
+ "OBS Study Notes",
+ "OBS Study Questions",
+ "OBS Translation Notes",
+ "OBS Translation Questions",
+ "Open Bible Stories",
+ "Study Notes",
+ "Study Questions",
+ "Training Library",
+ "Translation Academy",
+ "Translation Notes",
+ "Translation Questions",
+ "Translation Words",
+ "TSV Study Notes",
+ "TSV Study Questions",
+ "TSV Translation Notes",
+ "TSV Translation Questions",
+ "TSV Translation Words Links",
+ "TSV OBS Study Notes",
+ "TSV OBS Study Questions",
+ "TSV OBS Translation Notes",
+ "TSV OBS Translation Questions",
+ "TSV OBS Translation Words Links"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only the those if they are in the catalog meeting the criteria given (e.g. way to test a given language has the given subject)",
+ "name": "subject",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "glt",
+ "gst",
+ "obs",
+ "obs-sn",
+ "obs-sq",
+ "obs-tn",
+ "obs-tq",
+ "obs-twl",
+ "sn",
+ "sq",
+ "ta",
+ "tn",
+ "tq",
+ "tw",
+ "twl",
+ "ugnt",
+ "uhb",
+ "ult",
+ "ust"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those with the given resource identifier. Multiple resources are ORed.",
+ "name": "resource",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "list only those with the given content format (usfm, text, markdown, etc.). Multiple formats are ORed.",
+ "name": "format",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "1",
+ "2",
+ "3"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those with the given checking level(s)",
+ "name": "checkingLevel",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those with the given book(s) (ingredient identifiers). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive)",
+ "name": "book",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "rc",
+ "sb",
+ "tc",
+ "ts"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those with the given metadata type",
+ "name": "metadataType",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those with the given metadatay version. Does not apply if metadataType is not given",
+ "name": "metadataVersion",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "SearchResults of a successful catalog owner search",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/responses/Language"
+ }
+ },
+ "ok": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/catalog/list/metadata-types": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "catalog"
+ ],
+ "summary": "List of metadata types in the catalog based on the given criteria",
+ "operationId": "catalogListMetadataTypes",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "list only subjects in the given owner(s). To match multiple, give the parameter multiple times or give a list comma delimited.",
+ "name": "owner",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only subjects in the given language(s). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive) unlesss partialMatch=true",
+ "name": "lang",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "list only those that are (true) or are not (false) a gatetway language",
+ "name": "is_gl",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "prod",
+ "preprod",
+ "latest"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those of the given stage or lower, with low to high being: \"prod\" - return only the production subjects (default); \"preprod\" - return pre-production and production subjects; \"latest\" - return all subjects in the catalog for all stages",
+ "name": "stage",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "Aligned Bible",
+ "Aramaic Grammar",
+ "Bible",
+ "Greek Grammar",
+ "Greek Lexicon",
+ "Greek New Testament",
+ "Hebrew Grammar",
+ "Hebrew Old Testament",
+ "Hebrew-Aramaic Lexicon",
+ "OBS Study Notes",
+ "OBS Study Questions",
+ "OBS Translation Notes",
+ "OBS Translation Questions",
+ "Open Bible Stories",
+ "Study Notes",
+ "Study Questions",
+ "Training Library",
+ "Translation Academy",
+ "Translation Notes",
+ "Translation Questions",
+ "Translation Words",
+ "TSV Study Notes",
+ "TSV Study Questions",
+ "TSV Translation Notes",
+ "TSV Translation Questions",
+ "TSV Translation Words Links",
+ "TSV OBS Study Notes",
+ "TSV OBS Study Questions",
+ "TSV OBS Translation Notes",
+ "TSV OBS Translation Questions",
+ "TSV OBS Translation Words Links"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only the those if they are in the catalog meeting the criteria given (e.g. way to test a given language has the given subject)",
+ "name": "subject",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "glt",
+ "gst",
+ "obs",
+ "obs-sn",
+ "obs-sq",
+ "obs-tn",
+ "obs-tq",
+ "obs-twl",
+ "sn",
+ "sq",
+ "ta",
+ "tn",
+ "tq",
+ "tw",
+ "twl",
+ "ugnt",
+ "uhb",
+ "ult",
+ "ust"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those with the given resource identifier. Multiple resources are ORed.",
+ "name": "resource",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "list only those with the given content format (usfm, text, markdown, etc.). Multiple formats are ORed.",
+ "name": "format",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "1",
+ "2",
+ "3"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those with the given checking level(s)",
+ "name": "checkingLevel",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those with the given book(s) (ingredient identifiers). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive)",
+ "name": "book",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "rc",
+ "sb",
+ "tc",
+ "ts"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those with the given metadata type",
+ "name": "metadataType",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those with the given metadatay version. Does not apply if metadataType is not given",
+ "name": "metadataVersion",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "if true, owner, subject and language search fields will use partial match (LIKE) when querying the catalog. Default is false",
+ "name": "partialMatch",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "SearchResults of a successful catalog owner search",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/responses/StringSlice"
+ }
+ },
+ "ok": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/catalog/list/owners": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "catalog"
+ ],
+ "summary": "List owners in the catalog based on the given criteria",
+ "operationId": "catalogListOwners",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "list only the given owners(s) if they have entries in the catalog meeting the criteria given (e.g. way to test an owner has a given language or subject)",
+ "name": "owner",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those with entries in the given language(s). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive) unlesss partialMatch=true",
+ "name": "lang",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "list only those that are (true) or are not (false) a gatetway language",
+ "name": "is_gl",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "prod",
+ "preprod",
+ "latest"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those of the given stage or lower, with low to high being: \"prod\" - return only the production subjects (default); \"preprod\" - return pre-production and production subjects; \"latest\" - return all subjects in the catalog for all stages",
+ "name": "stage",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "Aligned Bible",
+ "Aramaic Grammar",
+ "Bible",
+ "Greek Grammar",
+ "Greek Lexicon",
+ "Greek New Testament",
+ "Hebrew Grammar",
+ "Hebrew Old Testament",
+ "Hebrew-Aramaic Lexicon",
+ "OBS Study Notes",
+ "OBS Study Questions",
+ "OBS Translation Notes",
+ "OBS Translation Questions",
+ "Open Bible Stories",
+ "Study Notes",
+ "Study Questions",
+ "Training Library",
+ "Translation Academy",
+ "Translation Notes",
+ "Translation Questions",
+ "Translation Words",
+ "TSV Study Notes",
+ "TSV Study Questions",
+ "TSV Translation Notes",
+ "TSV Translation Questions",
+ "TSV Translation Words Links",
+ "TSV OBS Study Notes",
+ "TSV OBS Study Questions",
+ "TSV OBS Translation Notes",
+ "TSV OBS Translation Questions",
+ "TSV OBS Translation Words Links"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only the those if they are in the catalog meeting the criteria given (e.g. way to test a given language has the given subject)",
+ "name": "subject",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "glt",
+ "gst",
+ "obs",
+ "obs-sn",
+ "obs-sq",
+ "obs-tn",
+ "obs-tq",
+ "obs-twl",
+ "sn",
+ "sq",
+ "ta",
+ "tn",
+ "tq",
+ "tw",
+ "twl",
+ "ugnt",
+ "uhb",
+ "ult",
+ "ust"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those with the given resource identifier. Multiple resources are ORed.",
+ "name": "resource",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "list only those with the given content format (usfm, text, markdown, etc.). Multiple formats are ORed.",
+ "name": "format",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "1",
+ "2",
+ "3"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those with the given checking level(s)",
+ "name": "checkingLevel",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those with the given book(s) (ingredient identifiers). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive)",
+ "name": "book",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "rc",
+ "sb",
+ "tc",
+ "ts"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those with the given metadata type",
+ "name": "metadataType",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those with the given metadatay version. Does not apply if metadataType is not given",
+ "name": "metadataVersion",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "SearchResults of a successful catalog owner search",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/responses/UserList"
+ }
+ },
+ "ok": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/catalog/list/subjects": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "catalog"
+ ],
+ "summary": "List of subjects in the catalog based on the given criteria",
+ "operationId": "catalogListSubjects",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "list only subjects in the given owner(s). To match multiple, give the parameter multiple times or give a list comma delimited.",
+ "name": "owner",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only subjects in the given language(s). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive) unlesss partialMatch=true",
+ "name": "lang",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "list only those that are (true) or are not (false) a gatetway language",
+ "name": "is_gl",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "prod",
+ "preprod",
+ "latest"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those of the given stage or lower, with low to high being: \"prod\" - return only the production subjects (default); \"preprod\" - return pre-production and production subjects; \"latest\" - return all subjects in the catalog for all stages",
+ "name": "stage",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "Aligned Bible",
+ "Aramaic Grammar",
+ "Bible",
+ "Greek Grammar",
+ "Greek Lexicon",
+ "Greek New Testament",
+ "Hebrew Grammar",
+ "Hebrew Old Testament",
+ "Hebrew-Aramaic Lexicon",
+ "OBS Study Notes",
+ "OBS Study Questions",
+ "OBS Translation Notes",
+ "OBS Translation Questions",
+ "Open Bible Stories",
+ "Study Notes",
+ "Study Questions",
+ "Training Library",
+ "Translation Academy",
+ "Translation Notes",
+ "Translation Questions",
+ "Translation Words",
+ "TSV Study Notes",
+ "TSV Study Questions",
+ "TSV Translation Notes",
+ "TSV Translation Questions",
+ "TSV Translation Words Links",
+ "TSV OBS Study Notes",
+ "TSV OBS Study Questions",
+ "TSV OBS Translation Notes",
+ "TSV OBS Translation Questions",
+ "TSV OBS Translation Words Links"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only the those if they are in the catalog meeting the criteria given (e.g. way to test a given language has the given subject)",
+ "name": "subject",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "glt",
+ "gst",
+ "obs",
+ "obs-sn",
+ "obs-sq",
+ "obs-tn",
+ "obs-tq",
+ "obs-twl",
+ "sn",
+ "sq",
+ "ta",
+ "tn",
+ "tq",
+ "tw",
+ "twl",
+ "ugnt",
+ "uhb",
+ "ult",
+ "ust"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those with the given resource identifier. Multiple resources are ORed.",
+ "name": "resource",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "list only those with the given content format (usfm, text, markdown, etc.). Multiple formats are ORed.",
+ "name": "format",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "1",
+ "2",
+ "3"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those with the given checking level(s)",
+ "name": "checkingLevel",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those with the given book(s) (ingredient identifiers). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive)",
+ "name": "book",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "rc",
+ "sb",
+ "tc",
+ "ts"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those with the given metadata type",
+ "name": "metadataType",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only those with the given metadatay version. Does not apply if metadataType is not given",
+ "name": "metadataVersion",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "if true, owner, subject and language search fields will use partial match (LIKE) when querying the catalog. Default is false",
+ "name": "partialMatch",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "SearchResults of a successful catalog owner search",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/responses/StringSlice"
+ }
+ },
+ "ok": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/catalog/search": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "catalog"
+ ],
+ "summary": "Search the catalog",
+ "operationId": "catalogSearch",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "keyword(s). Can use multiple `q=\u003ckeyword\u003e`s or a comma-delimited string for more than one keyword. Is case insensitive",
+ "name": "q",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "search only for entries with the given owner name(s). Will perform an exact match (case insensitive) unlesss partialMatch=true",
+ "name": "owner",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "search only for entries with the given repo name(s). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive) unlesss partialMatch=true",
+ "name": "repo",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "search only for entries with the given release tag(s). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive)",
+ "name": "tag",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "search only for entries with the given language(s). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive) unlesss partialMatch=true",
+ "name": "lang",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "list only those that are (true) or are not (false) a gatetway language",
+ "name": "is_gl",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "prod",
+ "preprod",
+ "latest"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "specifies which release stage to be return of these stages: \"prod\" - return only the production releases (default); \"preprod\" - return the pre-production release if it exists instead of the production release; \"latest\" - return the default branch (e.g. master) if it is a valid repo",
+ "name": "stage",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "Aligned Bible",
+ "Aramaic Grammar",
+ "Bible",
+ "Greek Grammar",
+ "Greek Lexicon",
+ "Greek New Testament",
+ "Hebrew Grammar",
+ "Hebrew Old Testament",
+ "Hebrew-Aramaic Lexicon",
+ "OBS Study Notes",
+ "OBS Study Questions",
+ "OBS Translation Notes",
+ "OBS Translation Questions",
+ "Open Bible Stories",
+ "Study Notes",
+ "Study Questions",
+ "Training Library",
+ "Translation Academy",
+ "Translation Notes",
+ "Translation Questions",
+ "Translation Words",
+ "TSV Study Notes",
+ "TSV Study Questions",
+ "TSV Translation Notes",
+ "TSV Translation Questions",
+ "TSV Translation Words Links",
+ "TSV OBS Study Notes",
+ "TSV OBS Study Questions",
+ "TSV OBS Translation Notes",
+ "TSV OBS Translation Questions",
+ "TSV OBS Translation Words Links"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "search only for entries with the given subject(s). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive) unlesss partialMatch=true",
+ "name": "subject",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "glt",
+ "gst",
+ "obs",
+ "obs-sn",
+ "obs-sq",
+ "obs-tn",
+ "obs-tq",
+ "obs-twl",
+ "sn",
+ "sq",
+ "ta",
+ "tn",
+ "tq",
+ "tw",
+ "twl",
+ "ugnt",
+ "uhb",
+ "ult",
+ "ust"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "resource identifier. Multiple resources are ORed.",
+ "name": "resource",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "content format (usfm, text, markdown, etc.). Multiple formats are ORed.",
+ "name": "format",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "1",
+ "2",
+ "3"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "search only for entries with the given checking level(s)",
+ "name": "checkingLevel",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "search only for entries with the given book(s) (ingredient identifiers). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive)",
+ "name": "book",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "rc",
+ "sb",
+ "tc",
+ "ts"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "return repos only with metadata of this type",
+ "name": "metadataType",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "return repos only with the version of metadata given. Does not apply if metadataType is not given",
+ "name": "metadataVersion",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "if true, subject, owner and repo search fields will use partial match (LIKE) when querying the catalog. Default is false",
+ "name": "partialMatch",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "if true, all releases, not just the latest, are included. Default is false",
+ "name": "includeHistory",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "if true, the list of ingredients (files/projects) in the resource and their file paths will be listed for each entry. Default is true",
+ "name": "showIngredients",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "sort repos alphanumerically by attribute. Supported values are \"subject\", \"title\", \"reponame\", \"tag\", \"released\", \"lang\", \"releases\", \"stars\", \"forks\". Default is by \"language\", \"subject\" and then \"tag\"",
+ "name": "sort",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "sort order, either \"asc\" (ascending) or \"desc\" (descending). Default is \"asc\", ignored if \"sort\" is not specified.",
+ "name": "order",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results, defaults to no limit",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/CatalogSearchResults"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/catalog/search/{owner}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "catalog"
+ ],
+ "summary": "Search the catalog by owner",
+ "operationId": "catalogSearchOwner",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the returned entries",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "keyword(s). Can use multiple `q=\u003ckeyword\u003e`s or a comma-delimited string for more than one keyword. Is case insensitive",
+ "name": "q",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "search only for entries with the given repo name(s). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive) unlesss partialMatch=true",
+ "name": "repo",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "search only for entries with the given release tag(s). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive)",
+ "name": "tag",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "search only for entries with the given language(s). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive) unlesss partialMatch=true",
+ "name": "lang",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "list only those that are (true) or are not (false) a gatetway language",
+ "name": "is_gl",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "prod",
+ "preprod",
+ "latest"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "specifies which release stage to be return of these stages: \"prod\" - return only the production releases (default); \"preprod\" - return the pre-production release if it exists instead of the production release; \"latest\" -return the default branch (e.g. master) if it is a valid RC instead of the above",
+ "name": "stage",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "Aligned Bible",
+ "Aramaic Grammar",
+ "Bible",
+ "Greek Grammar",
+ "Greek Lexicon",
+ "Greek New Testament",
+ "Hebrew Grammar",
+ "Hebrew Old Testament",
+ "Hebrew-Aramaic Lexicon",
+ "OBS Study Notes",
+ "OBS Study Questions",
+ "OBS Translation Notes",
+ "OBS Translation Questions",
+ "Open Bible Stories",
+ "Study Notes",
+ "Study Questions",
+ "Training Library",
+ "Translation Academy",
+ "Translation Notes",
+ "Translation Questions",
+ "Translation Words",
+ "TSV Study Notes",
+ "TSV Study Questions",
+ "TSV Translation Notes",
+ "TSV Translation Questions",
+ "TSV Translation Words Links",
+ "TSV OBS Study Notes",
+ "TSV OBS Study Questions",
+ "TSV OBS Translation Notes",
+ "TSV OBS Translation Questions",
+ "TSV OBS Translation Words Links"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "search only for entries with the given subject(s). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive) unlesss partialMatch=true",
+ "name": "subject",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "glt",
+ "gst",
+ "obs",
+ "obs-sn",
+ "obs-sq",
+ "obs-tn",
+ "obs-tq",
+ "obs-twl",
+ "sn",
+ "sq",
+ "ta",
+ "tn",
+ "tq",
+ "tw",
+ "twl",
+ "ugnt",
+ "uhb",
+ "ult",
+ "ust"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "resource identifier. Multiple resources are ORed.",
+ "name": "resource",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "content format (usfm, text, markdown, etc.). Multiple formats are ORed.",
+ "name": "format",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "1",
+ "2",
+ "3"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "search only for entries with the given checking level(s)",
+ "name": "checkingLevel",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "search only for entries with the given book(s) (ingredient identifiers). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive)",
+ "name": "book",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "rc",
+ "sb",
+ "tc",
+ "ts"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "return repos only with metadata of this type",
+ "name": "metadataType",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "return repos only with the version of metadata given. Does not apply if metadataType is not given",
+ "name": "metadataVersion",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "if true, subject, owner and repo search fields will use partial match (LIKE) when querying the catalog. Default is false",
+ "name": "partialMatch",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "if true, all releases, not just the latest, are included. Default is false",
+ "name": "includeHistory",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "if true, the list of ingredients (files/projects) in the resource and their file paths will be listed for each entry. Default is true",
+ "name": "showIngredients",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "sort repos alphanumerically by attribute. Supported values are \"subject\", \"title\", \"reponame\", \"tag\", \"released\", \"lang\", \"releases\", \"stars\", \"forks\". Default is by \"language\", \"subject\" and then \"tag\"",
+ "name": "sort",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "sort order, either \"asc\" (ascending) or \"desc\" (descending). Default is \"asc\", ignored if \"sort\" is not specified.",
+ "name": "order",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results, defaults to no limit",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/CatalogSearchResults"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/catalog/search/{owner}/{repo}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "catalog"
+ ],
+ "summary": "Search the catalog by owner and repo",
+ "operationId": "catalogSearchRepo",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the returned entries",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo of the returned entries",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "keyword(s). Can use multiple `q=\u003ckeyword\u003e`s or a comma-delimited string for more than one keyword. Is case insensitive",
+ "name": "q",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "search only for entries with the given owner name(s). Will perform an exact match (case insensitive) unlesss partialMatch=true",
+ "name": "owner",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "search only for entries with the given repo name(s). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive) unlesss partialMatch=true",
+ "name": "repo",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "search only for entries with the given release tag(s). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive)",
+ "name": "tag",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "search only for entries with the given language(s). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive) unlesss partialMatch=true",
+ "name": "lang",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "list only those that are (true) or are not (false) a gatetway language",
+ "name": "is_gl",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "prod",
+ "preprod",
+ "latest"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "specifies which release stage to be return of these stages: \"prod\" - return only the production releases (default); \"preprod\" - return the pre-production release if it exists instead of the production release; \"latest\" - return the default branch (e.g. master) if it is a valid repo",
+ "name": "stage",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "Aligned Bible",
+ "Aramaic Grammar",
+ "Bible",
+ "Greek Grammar",
+ "Greek Lexicon",
+ "Greek New Testament",
+ "Hebrew Grammar",
+ "Hebrew Old Testament",
+ "Hebrew-Aramaic Lexicon",
+ "OBS Study Notes",
+ "OBS Study Questions",
+ "OBS Translation Notes",
+ "OBS Translation Questions",
+ "Open Bible Stories",
+ "Study Notes",
+ "Study Questions",
+ "Training Library",
+ "Translation Academy",
+ "Translation Notes",
+ "Translation Questions",
+ "Translation Words",
+ "TSV Study Notes",
+ "TSV Study Questions",
+ "TSV Translation Notes",
+ "TSV Translation Questions",
+ "TSV Translation Words Links",
+ "TSV OBS Study Notes",
+ "TSV OBS Study Questions",
+ "TSV OBS Translation Notes",
+ "TSV OBS Translation Questions",
+ "TSV OBS Translation Words Links"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "search only for entries with the given subject(s). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive) unlesss partialMatch=true",
+ "name": "subject",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "glt",
+ "gst",
+ "obs",
+ "obs-sn",
+ "obs-sq",
+ "obs-tn",
+ "obs-tq",
+ "obs-twl",
+ "sn",
+ "sq",
+ "ta",
+ "tn",
+ "tq",
+ "tw",
+ "twl",
+ "ugnt",
+ "uhb",
+ "ult",
+ "ust"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "resource identifier. Multiple resources are ORed.",
+ "name": "resource",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "content format (usfm, text, markdown, etc.). Multiple formats are ORed.",
+ "name": "format",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "1",
+ "2",
+ "3"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "search only for entries with the given checking level(s)",
+ "name": "checkingLevel",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "search only for entries with the given book(s) (ingredient identifiers). To match multiple, give the parameter multiple times or give a list comma delimited. Will perform an exact match (case insensitive)",
+ "name": "book",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "rc",
+ "sb",
+ "tc",
+ "ts"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "return repos only with metadata of this type",
+ "name": "metadataType",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "return repos only with the version of metadata given. Does not apply if metadataType is not given",
+ "name": "metadataVersion",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "if true, subject, owner and repo search fields will use partial match (LIKE) when querying the catalog. Default is false",
+ "name": "partialMatch",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "if true, all releases, not just the latest, are included. Default is false",
+ "name": "includeHistory",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "if true, the list of ingredients (files/projects) in the resource and their file paths will be listed for each entry. Default is true",
+ "name": "showIngredients",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "sort repos alphanumerically by attribute. Supported values are \"subject\", \"title\", \"reponame\", \"tag\", \"released\", \"lang\", \"releases\", \"stars\", \"forks\". Default is by \"language\", \"subject\" and then \"tag\"",
+ "name": "sort",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "sort order, either \"asc\" (ascending) or \"desc\" (descending). Default is \"asc\", ignored if \"sort\" is not specified.",
+ "name": "order",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results, defaults to no limit",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/CatalogSearchResults"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/gitignore/templates": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "miscellaneous"
+ ],
+ "summary": "Returns a list of all gitignore templates",
+ "operationId": "listGitignoresTemplates",
+ "responses": {
+ "200": {
+ "$ref": "#/responses/GitignoreTemplateList"
+ }
+ }
+ }
+ },
+ "/gitignore/templates/{name}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "miscellaneous"
+ ],
+ "summary": "Returns information about a gitignore template",
+ "operationId": "getGitignoreTemplateInfo",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the template",
+ "name": "name",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/GitignoreTemplateInfo"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/label/templates": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "miscellaneous"
+ ],
+ "summary": "Returns a list of all label templates",
+ "operationId": "listLabelTemplates",
+ "responses": {
+ "200": {
+ "$ref": "#/responses/LabelTemplateList"
+ }
+ }
+ }
+ },
+ "/label/templates/{name}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "miscellaneous"
+ ],
+ "summary": "Returns all labels in a template",
+ "operationId": "getLabelTemplateInfo",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the template",
+ "name": "name",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/LabelTemplateInfo"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/languages/langnames.json": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "languages"
+ ],
+ "summary": "Fetches the langnames.json file",
+ "operationId": "languagesLangnamesJSON",
+ "parameters": [
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only the given language codes",
+ "name": "lc",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "if true, only show gateway languages, if false, only non-gateway languages (other languages)",
+ "name": "gw",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "ltr",
+ "rtl"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "direction of the language",
+ "name": "ld",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "sort alphanumerically by attribute. Supported values are \"ang\", \"hc\", \"lc\", \"ld\", \"ln\", \"lr\". Default is \"lc\"",
+ "name": "sort",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "sort order, either \"asc\" (ascending) or \"desc\" (descending). Default is \"asc\"",
+ "name": "order",
+ "in": "query"
+ }
],
- "summary": "Returns a list of all label templates",
- "operationId": "listLabelTemplates",
"responses": {
"200": {
- "$ref": "#/responses/LabelTemplateList"
+ "$ref": "#/responses/LangnamesJSON"
}
}
}
},
- "/label/templates/{name}": {
+ "/languages/langnames_keyed.json": {
"get": {
"produces": [
"application/json"
],
"tags": [
- "miscellaneous"
+ "languages"
],
- "summary": "Returns all labels in a template",
- "operationId": "getLabelTemplateInfo",
+ "summary": "Fetches the langnames.json file and keys it by language code (lc)",
+ "operationId": "languagesLangnamesJSONKeyed",
"parameters": [
{
- "type": "string",
- "description": "name of the template",
- "name": "name",
- "in": "path",
- "required": true
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "list only the given language codes",
+ "name": "lc",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "if true, only show gateway languages, if false, only non-gateway languages (other languages)",
+ "name": "gw",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "ltr",
+ "rtl"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "direction of the language",
+ "name": "ld",
+ "in": "query"
}
],
"responses": {
"200": {
- "$ref": "#/responses/LabelTemplateInfo"
- },
- "404": {
- "$ref": "#/responses/notFound"
+ "$ref": "#/responses/LangnamesJSON"
}
}
}
@@ -1414,6 +3252,71 @@
"summary": "Get list of organizations",
"operationId": "orgGetAll",
"parameters": [
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "if the org has one or more repos with the given language(s), the org will be in the results. Multiple lang's are ORed.",
+ "name": "lang",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "if the org has one or more repos that is a gateway language, the org will be in the results",
+ "name": "is_gl",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "Aligned Bible",
+ "Aramaic Grammar",
+ "Bible",
+ "Greek Grammar",
+ "Greek Lexicon",
+ "Greek New Testament",
+ "Hebrew Grammar",
+ "Hebrew Old Testament",
+ "Hebrew-Aramaic Lexicon",
+ "OBS Study Notes",
+ "OBS Study Questions",
+ "OBS Translation Notes",
+ "OBS Translation Questions",
+ "Open Bible Stories",
+ "Study Notes",
+ "Study Questions",
+ "Training Library",
+ "Translation Academy",
+ "Translation Notes",
+ "Translation Questions",
+ "Translation Words",
+ "TSV Study Notes",
+ "TSV Study Questions",
+ "TSV Translation Notes",
+ "TSV Translation Questions",
+ "TSV Translation Words Links",
+ "TSV OBS Study Notes",
+ "TSV OBS Study Questions",
+ "TSV OBS Translation Notes",
+ "TSV OBS Translation Questions",
+ "TSV OBS Translation Words Links"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "if the org has one or more repos with the given subject(s), the org will be in the results. Multiple subjects are ORed.",
+ "name": "subject",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "if the org has one or more repos with the given metadata type(s), the org will be in the results. Multiple metadata types are ORed.",
+ "name": "metadataType",
+ "in": "query"
+ },
{
"type": "integer",
"description": "page number of results to return (1-based)",
@@ -3099,7 +5002,7 @@
},
{
"type": "boolean",
- "description": "include search of keyword within repository description",
+ "description": "include search of keyword within repository description (defaults to false)",
"name": "includeDesc",
"in": "query"
},
@@ -3167,6 +5070,150 @@
"name": "exclusive",
"in": "query"
},
+ {
+ "type": "string",
+ "description": "name of the repo. Multiple repos are ORed.",
+ "name": "repo",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "owner of the repo. Multiple owners are ORed.",
+ "name": "owner",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "if the repo is a resource of the given language(s), the repo will be in the results. Multiple langs are ORed.",
+ "name": "lang",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "if the repo is a gateway language resource, the repo will be in the results",
+ "name": "is_gl",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "Aligned Bible",
+ "Aramaic Grammar",
+ "Bible",
+ "Greek Grammar",
+ "Greek Lexicon",
+ "Greek New Testament",
+ "Hebrew Grammar",
+ "Hebrew Old Testament",
+ "Hebrew-Aramaic Lexicon",
+ "OBS Study Notes",
+ "OBS Study Questions",
+ "OBS Translation Notes",
+ "OBS Translation Questions",
+ "Open Bible Stories",
+ "Study Notes",
+ "Study Questions",
+ "Training Library",
+ "Translation Academy",
+ "Translation Notes",
+ "Translation Questions",
+ "Translation Words",
+ "TSV Study Notes",
+ "TSV Study Questions",
+ "TSV Translation Notes",
+ "TSV Translation Questions",
+ "TSV Translation Words Links",
+ "TSV OBS Study Notes",
+ "TSV OBS Study Questions",
+ "TSV OBS Translation Notes",
+ "TSV OBS Translation Questions",
+ "TSV OBS Translation Words Links"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "resource subject. Multiple subjects are ORed.",
+ "name": "subject",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "glt",
+ "gst",
+ "obs",
+ "obs-sn",
+ "obs-sq",
+ "obs-tn",
+ "obs-tq",
+ "obs-twl",
+ "sn",
+ "sq",
+ "ta",
+ "tn",
+ "tq",
+ "tw",
+ "twl",
+ "ugnt",
+ "uhb",
+ "ult",
+ "ust"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "resource identifier. Multiple resources are ORed.",
+ "name": "resource",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "content format (usfm, text, markdown, etc.). Multiple formats are ORed.",
+ "name": "format",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "book (project id or ingredients id) that exist in a resource. If the resource contains the the book, its repository will be included in the results. Multiple books are ORed.",
+ "name": "book",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "rc",
+ "sb",
+ "tc",
+ "ts"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "return repos only with metadata of this type",
+ "name": "metadataType",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "return repos only with the version of metadata given. Does not apply if metadataType is not given",
+ "name": "metadataVersion",
+ "in": "query"
+ },
{
"type": "string",
"description": "sort repos by attribute. Supported values are \"alpha\", \"created\", \"updated\", \"size\", and \"id\". Default is \"alpha\"",
@@ -5208,7 +7255,140 @@
}
}
},
- "/repos/{owner}/{repo}/git/notes/{sha}": {
+ "/repos/{owner}/{repo}/git/notes/{sha}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a note corresponding to a single commit from a repository",
+ "operationId": "repoGetNote",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "a git ref or commit sha",
+ "name": "sha",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Note"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/git/refs": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get specified ref or filtered repository's refs",
+ "operationId": "repoListAllGitRefs",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/ReferenceList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "description": "Creates a reference for your repository. You are unable to create new references for empty repositories, even if the commit SHA-1 hash used exists. Empty repositories are repositories without branches.",
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Create a reference",
+ "operationId": "repoCreateGitRef",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateGitRefOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Reference"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "409": {
+ "description": "The git ref with the same name already exists."
+ },
+ "422": {
+ "description": "Unable to form reference"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/git/refs/{ref}": {
"get": {
"produces": [
"application/json"
@@ -5216,8 +7396,8 @@
"tags": [
"repository"
],
- "summary": "Get a note corresponding to a single commit from a repository",
- "operationId": "repoGetNote",
+ "summary": "Get specified ref or filtered repository's refs",
+ "operationId": "repoListGitRefs",
"parameters": [
{
"type": "string",
@@ -5235,8 +7415,8 @@
},
{
"type": "string",
- "description": "a git ref or commit sha",
- "name": "sha",
+ "description": "part or full name of the ref",
+ "name": "ref",
"in": "path",
"required": true
},
@@ -5255,27 +7435,25 @@
],
"responses": {
"200": {
- "$ref": "#/responses/Note"
+ "$ref": "#/responses/ReferenceList"
},
"404": {
"$ref": "#/responses/notFound"
- },
- "422": {
- "$ref": "#/responses/validationError"
}
}
- }
- },
- "/repos/{owner}/{repo}/git/refs": {
- "get": {
+ },
+ "delete": {
+ "consumes": [
+ "application/json"
+ ],
"produces": [
"application/json"
],
"tags": [
"repository"
],
- "summary": "Get specified ref or filtered repository's refs",
- "operationId": "repoListAllGitRefs",
+ "summary": "Delete a reference",
+ "operationId": "repoDeleteGitRef",
"parameters": [
{
"type": "string",
@@ -5290,28 +7468,42 @@
"name": "repo",
"in": "path",
"required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the ref to be deleted",
+ "name": "ref",
+ "in": "path",
+ "required": true
}
],
"responses": {
- "200": {
- "$ref": "#/responses/ReferenceList"
+ "204": {
+ "$ref": "#/responses/empty"
},
"404": {
"$ref": "#/responses/notFound"
+ },
+ "405": {
+ "$ref": "#/responses/error"
+ },
+ "409": {
+ "$ref": "#/responses/conflict"
}
}
- }
- },
- "/repos/{owner}/{repo}/git/refs/{ref}": {
- "get": {
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
"produces": [
"application/json"
],
"tags": [
"repository"
],
- "summary": "Get specified ref or filtered repository's refs",
- "operationId": "repoListGitRefs",
+ "summary": "Update a reference",
+ "operationId": "repoUpdateGitRef",
"parameters": [
{
"type": "string",
@@ -5329,15 +7521,22 @@
},
{
"type": "string",
- "description": "part or full name of the ref",
+ "description": "name of the ref to update",
"name": "ref",
"in": "path",
"required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/UpdateGitRefOption"
+ }
}
],
"responses": {
"200": {
- "$ref": "#/responses/ReferenceList"
+ "$ref": "#/responses/Reference"
},
"404": {
"$ref": "#/responses/notFound"
@@ -15881,6 +18080,81 @@
"name": "uid",
"in": "query"
},
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "if the user has one or more repos with the given language(s), the user will be in the results. Multiple lang's are ORed.",
+ "name": "lang",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "if the user has one or more repos that is a gateway language, the user will be in the results",
+ "name": "is_gl",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "Aligned Bible",
+ "Aramaic Grammar",
+ "Bible",
+ "Greek Grammar",
+ "Greek Lexicon",
+ "Greek New Testament",
+ "Hebrew Grammar",
+ "Hebrew Old Testament",
+ "Hebrew-Aramaic Lexicon",
+ "OBS Study Notes",
+ "OBS Study Questions",
+ "OBS Translation Notes",
+ "OBS Translation Questions",
+ "Open Bible Stories",
+ "Study Notes",
+ "Study Questions",
+ "Training Library",
+ "Translation Academy",
+ "Translation Notes",
+ "Translation Questions",
+ "Translation Words",
+ "TSV Study Notes",
+ "TSV Study Questions",
+ "TSV Translation Notes",
+ "TSV Translation Questions",
+ "TSV Translation Words Links",
+ "TSV OBS Study Notes",
+ "TSV OBS Study Questions",
+ "TSV OBS Translation Notes",
+ "TSV OBS Translation Questions",
+ "TSV OBS Translation Words Links"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "if the user has one or more repos with the given subject(s), the user will be in the results. Multiple subjects are ORed.",
+ "name": "subject",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "rc",
+ "sb",
+ "tc",
+ "ts"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "if the user has one or more repos with the given metadata type(s), the user will be in the results. Multiple metadata types are ORed.",
+ "name": "metadataType",
+ "in": "query"
+ },
{
"type": "integer",
"description": "page number of results to return (1-based)",
@@ -16904,96 +19178,312 @@
"created_at": {
"type": "string",
"format": "date-time",
- "x-go-name": "Created"
+ "x-go-name": "Created"
+ },
+ "dismiss_stale_approvals": {
+ "type": "boolean",
+ "x-go-name": "DismissStaleApprovals"
+ },
+ "enable_approvals_whitelist": {
+ "type": "boolean",
+ "x-go-name": "EnableApprovalsWhitelist"
+ },
+ "enable_merge_whitelist": {
+ "type": "boolean",
+ "x-go-name": "EnableMergeWhitelist"
+ },
+ "enable_push": {
+ "type": "boolean",
+ "x-go-name": "EnablePush"
+ },
+ "enable_push_whitelist": {
+ "type": "boolean",
+ "x-go-name": "EnablePushWhitelist"
+ },
+ "enable_status_check": {
+ "type": "boolean",
+ "x-go-name": "EnableStatusCheck"
+ },
+ "merge_whitelist_teams": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "MergeWhitelistTeams"
+ },
+ "merge_whitelist_usernames": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "MergeWhitelistUsernames"
+ },
+ "protected_file_patterns": {
+ "type": "string",
+ "x-go-name": "ProtectedFilePatterns"
+ },
+ "push_whitelist_deploy_keys": {
+ "type": "boolean",
+ "x-go-name": "PushWhitelistDeployKeys"
+ },
+ "push_whitelist_teams": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "PushWhitelistTeams"
+ },
+ "push_whitelist_usernames": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "PushWhitelistUsernames"
+ },
+ "require_signed_commits": {
+ "type": "boolean",
+ "x-go-name": "RequireSignedCommits"
+ },
+ "required_approvals": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "RequiredApprovals"
+ },
+ "rule_name": {
+ "type": "string",
+ "x-go-name": "RuleName"
+ },
+ "status_check_contexts": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "StatusCheckContexts"
+ },
+ "unprotected_file_patterns": {
+ "type": "string",
+ "x-go-name": "UnprotectedFilePatterns"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Updated"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CatalogEntry": {
+ "description": "CatalogEntry represents a repository's metadata of a tag or default branch as an entry of the catalog",
+ "type": "object",
+ "properties": {
+ "books": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Books"
+ },
+ "branch_or_tag_name": {
+ "type": "string",
+ "x-go-name": "Ref"
+ },
+ "commit_sha": {
+ "type": "string",
+ "x-go-name": "CommitSHA"
+ },
+ "content_format": {
+ "type": "string",
+ "x-go-name": "ContentFormat"
+ },
+ "contents_url": {
+ "type": "string",
+ "x-go-name": "ContentsURL"
+ },
+ "full_name": {
+ "type": "string",
+ "x-go-name": "FullName"
+ },
+ "git_trees_url": {
+ "type": "string",
+ "x-go-name": "GitTreesURL"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "ingredients": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Ingredient"
+ },
+ "x-go-name": "Ingredients"
+ },
+ "language": {
+ "type": "string",
+ "x-go-name": "Language"
+ },
+ "language_direction": {
+ "type": "string",
+ "x-go-name": "LanguageDir"
+ },
+ "language_is_gl": {
+ "type": "boolean",
+ "x-go-name": "LanguageIsGL"
+ },
+ "language_title": {
+ "type": "string",
+ "x-go-name": "LanguageTitle"
+ },
+ "metadata_api_contents_url": {
+ "type": "string",
+ "x-go-name": "MetadataAPIContentsURL"
+ },
+ "metadata_json_url": {
+ "type": "string",
+ "x-go-name": "MetadataJSONURL"
+ },
+ "metadata_type": {
+ "type": "string",
+ "x-go-name": "MetadataType"
+ },
+ "metadata_url": {
+ "type": "string",
+ "x-go-name": "MetadataURL"
+ },
+ "metadata_version": {
+ "type": "string",
+ "x-go-name": "MetadataVersion"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "owner": {
+ "type": "string",
+ "x-go-name": "Owner"
+ },
+ "ref_type": {
+ "type": "string",
+ "x-go-name": "RefType"
+ },
+ "release": {
+ "$ref": "#/definitions/Release"
+ },
+ "released": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Released"
},
- "dismiss_stale_approvals": {
- "type": "boolean",
- "x-go-name": "DismissStaleApprovals"
+ "repo": {
+ "$ref": "#/definitions/Repository"
},
- "enable_approvals_whitelist": {
- "type": "boolean",
- "x-go-name": "EnableApprovalsWhitelist"
+ "resource": {
+ "type": "string",
+ "x-go-name": "Resource"
},
- "enable_merge_whitelist": {
- "type": "boolean",
- "x-go-name": "EnableMergeWhitelist"
+ "stage": {
+ "type": "string",
+ "x-go-name": "Stage"
},
- "enable_push": {
- "type": "boolean",
- "x-go-name": "EnablePush"
+ "subject": {
+ "type": "string",
+ "x-go-name": "Subject"
},
- "enable_push_whitelist": {
- "type": "boolean",
- "x-go-name": "EnablePushWhitelist"
+ "tarbar_url": {
+ "type": "string",
+ "x-go-name": "TarballURL"
},
- "enable_status_check": {
- "type": "boolean",
- "x-go-name": "EnableStatusCheck"
+ "title": {
+ "type": "string",
+ "x-go-name": "Title"
},
- "merge_whitelist_teams": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "x-go-name": "MergeWhitelistTeams"
+ "url": {
+ "type": "string",
+ "x-go-name": "Self"
},
- "merge_whitelist_usernames": {
+ "zipball_url": {
+ "type": "string",
+ "x-go-name": "ZipballURL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CatalogSearchResults": {
+ "description": "CatalogSearchResults results of a successful catalog search",
+ "type": "object",
+ "properties": {
+ "data": {
"type": "array",
"items": {
- "type": "string"
+ "$ref": "#/definitions/CatalogEntry"
},
- "x-go-name": "MergeWhitelistUsernames"
+ "x-go-name": "Data"
},
- "protected_file_patterns": {
+ "last_updated": {
"type": "string",
- "x-go-name": "ProtectedFilePatterns"
+ "format": "date-time",
+ "x-go-name": "LastUpdated"
},
- "push_whitelist_deploy_keys": {
+ "ok": {
"type": "boolean",
- "x-go-name": "PushWhitelistDeployKeys"
- },
- "push_whitelist_teams": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "x-go-name": "PushWhitelistTeams"
+ "x-go-name": "OK"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CatalogStage": {
+ "description": "CatalogStage a repo's catalog stage metadata",
+ "type": "object",
+ "properties": {
+ "branch_or_tag_name": {
+ "type": "string",
+ "x-go-name": "Ref"
},
- "push_whitelist_usernames": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "x-go-name": "PushWhitelistUsernames"
+ "commit_sha": {
+ "type": "string",
+ "x-go-name": "CommitSHA"
},
- "require_signed_commits": {
- "type": "boolean",
- "x-go-name": "RequireSignedCommits"
+ "contents_url": {
+ "type": "string",
+ "x-go-name": "ContentsURL"
},
- "required_approvals": {
- "type": "integer",
- "format": "int64",
- "x-go-name": "RequiredApprovals"
+ "git_trees_url": {
+ "type": "string",
+ "x-go-name": "GitTreesURL"
},
- "rule_name": {
+ "release_url": {
"type": "string",
- "x-go-name": "RuleName"
+ "x-go-name": "ReleaseURL"
},
- "status_check_contexts": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "x-go-name": "StatusCheckContexts"
+ "released": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Released"
},
- "unprotected_file_patterns": {
+ "tarball_url": {
"type": "string",
- "x-go-name": "UnprotectedFilePatterns"
+ "x-go-name": "TarballURL"
},
- "updated_at": {
+ "zipball_url": {
"type": "string",
- "format": "date-time",
- "x-go-name": "Updated"
+ "x-go-name": "ZipballURL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CatalogStages": {
+ "description": "CatalogStages a repo's catalog stages",
+ "type": "object",
+ "properties": {
+ "latest": {
+ "$ref": "#/definitions/CatalogStage"
+ },
+ "preprod": {
+ "$ref": "#/definitions/CatalogStage"
+ },
+ "prod": {
+ "$ref": "#/definitions/CatalogStage"
}
},
"x-go-package": "code.gitea.io/gitea/modules/structs"
@@ -17758,6 +20248,27 @@
},
"x-go-package": "code.gitea.io/gitea/modules/structs"
},
+ "CreateGitRefOption": {
+ "description": "CreateGitRefOption options when creating a git ref in a repository",
+ "type": "object",
+ "required": [
+ "ref",
+ "target"
+ ],
+ "properties": {
+ "ref": {
+ "description": "The name of the reference.",
+ "type": "string",
+ "x-go-name": "RefName"
+ },
+ "target": {
+ "description": "The target commitish for this reference.",
+ "type": "string",
+ "x-go-name": "Target"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
"CreateHookOption": {
"description": "CreateHookOption options when create a hook",
"type": "object",
@@ -20051,6 +22562,46 @@
},
"x-go-package": "code.gitea.io/gitea/modules/structs"
},
+ "Ingredient": {
+ "description": "Ingredient is a single project of a resource",
+ "type": "object",
+ "properties": {
+ "alignment_count": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "AlignmentCount"
+ },
+ "categories": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Categories"
+ },
+ "identifier": {
+ "type": "string",
+ "x-go-name": "Identifier"
+ },
+ "path": {
+ "type": "string",
+ "x-go-name": "Path"
+ },
+ "sort": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Sort"
+ },
+ "title": {
+ "type": "string",
+ "x-go-name": "Title"
+ },
+ "versification": {
+ "type": "string",
+ "x-go-name": "Versification"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
"InternalTracker": {
"description": "InternalTracker represents settings for internal tracker",
"type": "object",
@@ -21041,6 +23592,30 @@
"type": "boolean",
"x-go-name": "RepoAdminChangeTeamAccess"
},
+ "repo_languages": {
+ "description": "All languages of the repos the org owns",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "RepoLanguages"
+ },
+ "repo_metadata_types": {
+ "description": "All metadata types of the repos the org owns",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "RepoMetadataTypes"
+ },
+ "repo_subjects": {
+ "description": "All subjects of the repos the org owns",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "RepoSubjects"
+ },
"username": {
"description": "deprecated",
"type": "string",
@@ -21385,6 +23960,13 @@
"format": "int64",
"x-go-name": "Comments"
},
+ "conflicted_files": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "ConflictedFiles"
+ },
"created_at": {
"type": "string",
"format": "date-time",
@@ -21399,6 +23981,10 @@
"format": "date-time",
"x-go-name": "Deadline"
},
+ "has_conflicts": {
+ "type": "boolean",
+ "x-go-name": "HasConflicts"
+ },
"head": {
"$ref": "#/definitions/PRBranchInfo"
},
@@ -21951,10 +24537,24 @@
"type": "string",
"x-go-name": "AvatarURL"
},
+ "catalog": {
+ "$ref": "#/definitions/CatalogStages"
+ },
+ "checking_level": {
+ "description": "checking level from the manifest",
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "CheckingLevel"
+ },
"clone_url": {
"type": "string",
"x-go-name": "CloneURL"
},
+ "content_format": {
+ "description": "content format",
+ "type": "string",
+ "x-go-name": "ContentFormat"
+ },
"created_at": {
"type": "string",
"format": "date-time",
@@ -22044,6 +24644,14 @@
"type": "boolean",
"x-go-name": "IgnoreWhitespaceConflicts"
},
+ "ingredients": {
+ "description": "ingredients",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Ingredient"
+ },
+ "x-go-name": "Ingredients"
+ },
"internal": {
"type": "boolean",
"x-go-name": "Internal"
@@ -22052,9 +24660,25 @@
"$ref": "#/definitions/InternalTracker"
},
"language": {
+ "description": "language from the manifest",
"type": "string",
"x-go-name": "Language"
},
+ "language_direction": {
+ "description": "language direction from the manifest",
+ "type": "string",
+ "x-go-name": "LanguageDir"
+ },
+ "language_is_gl": {
+ "description": "is the language a GL",
+ "type": "boolean",
+ "x-go-name": "LanguageIsGL"
+ },
+ "language_title": {
+ "description": "language title from the manifest",
+ "type": "string",
+ "x-go-name": "LanguageTitle"
+ },
"languages_url": {
"type": "string",
"x-go-name": "LanguagesURL"
@@ -22063,6 +24687,16 @@
"type": "string",
"x-go-name": "Link"
},
+ "metadata_type": {
+ "description": "language from the manifest",
+ "type": "string",
+ "x-go-name": "MetadataType"
+ },
+ "metadata_version": {
+ "description": "language from the manifest",
+ "type": "string",
+ "x-go-name": "MetadataVersion"
+ },
"mirror": {
"type": "boolean",
"x-go-name": "Mirror"
@@ -22129,10 +24763,20 @@
"format": "int64",
"x-go-name": "Stars"
},
+ "subject": {
+ "description": "subject from the manifest",
+ "type": "string",
+ "x-go-name": "Subject"
+ },
"template": {
"type": "boolean",
"x-go-name": "Template"
},
+ "title": {
+ "description": "title from the manifest",
+ "type": "string",
+ "x-go-name": "Title"
+ },
"updated_at": {
"type": "string",
"format": "date-time",
@@ -22683,6 +25327,21 @@
},
"x-go-package": "code.gitea.io/gitea/modules/structs"
},
+ "UpdateGitRefOption": {
+ "description": "UpdateGitRefOption options when updating a git ref in a repository",
+ "type": "object",
+ "required": [
+ "target"
+ ],
+ "properties": {
+ "target": {
+ "description": "The target commitish for the reference to be updated to.",
+ "type": "string",
+ "x-go-name": "Target"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
"UpdateRepoAvatarOption": {
"description": "UpdateRepoAvatarUserOption options when updating the repo avatar",
"type": "object",
@@ -22794,6 +25453,30 @@
"type": "boolean",
"x-go-name": "ProhibitLogin"
},
+ "repo_languages": {
+ "description": "Repo languages",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "RepoLanguages"
+ },
+ "repo_metadata_types": {
+ "description": "Repo metadata types",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "RepoMetadataTypes"
+ },
+ "repo_subjects": {
+ "description": "Repo subjects",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "RepoSubjects"
+ },
"restricted": {
"description": "Is user restricted",
"type": "boolean",
@@ -23136,6 +25819,25 @@
}
}
},
+ "CatalogEntry": {
+ "description": "CatalogEntry",
+ "schema": {
+ "$ref": "#/definitions/CatalogEntry"
+ }
+ },
+ "CatalogMetadata": {
+ "description": "CatalogMetadata",
+ "schema": {
+ "type": "object",
+ "additionalProperties": {}
+ }
+ },
+ "CatalogSearchResults": {
+ "description": "CatalogSearchResults",
+ "schema": {
+ "$ref": "#/definitions/CatalogSearchResults"
+ }
+ },
"ChangedFileList": {
"description": "ChangedFileList",
"schema": {
@@ -23479,6 +26181,20 @@
}
}
},
+ "LangnamesJSON": {
+ "description": "LanguLangnamesJSON",
+ "schema": {
+ "type": "object",
+ "additionalProperties": {}
+ }
+ },
+ "Language": {
+ "description": "Language",
+ "schema": {
+ "type": "object",
+ "additionalProperties": {}
+ }
+ },
"LanguageStatistics": {
"description": "LanguageStatistics",
"schema": {
diff --git a/templates/user/auth/signup_inner.tmpl b/templates/user/auth/signup_inner.tmpl
index 068ccbc618..d2045096c5 100644
--- a/templates/user/auth/signup_inner.tmpl
+++ b/templates/user/auth/signup_inner.tmpl
@@ -15,13 +15,24 @@
{{if .DisableRegistration}}
{{ctx.Locale.Tr "auth.disable_register_prompt"}}
{{else}}
+
+
+ {{ctx.Locale.Tr "signup.agreement" | Safe}}
+
+
{{ctx.Locale.Tr "username"}}
+
+ {{ctx.Locale.Tr "signup.user_name_helper" | Safe}}
+
{{ctx.Locale.Tr "email"}}
+
+ {{ctx.Locale.Tr "signup.email_helper" | Safe}}
+
{{if not .DisablePassword}}
diff --git a/tests/integration/links_test.go b/tests/integration/links_test.go
index a3937dd697..426a57a377 100644
--- a/tests/integration/links_test.go
+++ b/tests/integration/links_test.go
@@ -21,12 +21,12 @@ func TestLinksNoLogin(t *testing.T) {
defer tests.PrepareTestEnv(t)()
links := []string{
- "/explore/repos",
- "/explore/repos?q=test",
- "/explore/users",
- "/explore/users?q=test",
- "/explore/organizations",
- "/explore/organizations?q=test",
+ // "/explore/repos",
+ // "/explore/repos?q=test",
+ // "/explore/users",
+ // "/explore/users?q=test",
+ // "/explore/organizations",
+ // "/explore/organizations?q=test",
"/",
"/user/sign_up",
"/user/login",
diff --git a/web_src/css/dcs.css b/web_src/css/dcs.css
new file mode 100644
index 0000000000..5bbcaae5de
--- /dev/null
+++ b/web_src/css/dcs.css
@@ -0,0 +1,60 @@
+/* DCS Customizations */
+
+.markup.tsv {
+ padding: 10px;
+ overflow: scroll;
+}
+.markup.tsv table.tsv {
+ border: 1px solid var(--color-secondary);
+}
+.markup.tsv table.tsv th, .markup.tsv table.tsv td {
+ vertical-align: top;
+ line-height: normal !important;
+}
+.markup.tsv table.tsv th.line-num, .markup.tsv table.tsv td.line-num {
+ text-align: left;
+ color: var(--color-secondary-dark-2);
+}
+.markup.tsv table.tsv th h1, .markup.tsv table.tsv th h2, .markup.tsv table.tsv th h3, .markup.tsv table.tsv th h4, .markup.tsv table.tsv th h5, .markup.tsv table.tsv th h6, .markup.tsv table.tsv td h1, .markup.tsv table.tsv td h2, .markup.tsv table.tsv td h3, .markup.tsv table.tsv td h4, .markup.tsv table.tsv td h5, .markup.tsv table.tsv td h6 {
+ margin: 0;
+ border-bottom: none;
+ white-space: nowrap;
+ line-height: normal;
+}
+.markup.tsv table.tsv th ol, .markup.tsv table.tsv th ul, .markup.tsv table.tsv td ol, .markup.tsv table.tsv td ul {
+ display: flex;
+ flex-direction: column;
+}
+.markup.tsv table.tsv th p, .markup.tsv table.tsv th ul, .markup.tsv table.tsv th ol, .markup.tsv table.tsv td p, .markup.tsv table.tsv td ul, .markup.tsv table.tsv td ol {
+ margin: 0;
+}
+[data-language-direction="rtl"] {
+ direction: rtl;
+ text-align: right;
+}
+/* .data-table .modified span {
+ display: inline-block;
+} */
+.validation-message-badge {
+ cursor: pointer;
+}
+.validation-message-badge .svg {
+ margin-right: 0 !important;
+ width: 14px !important;
+}
+.catalog-badge {
+ display: block;
+ margin-top: 10px;
+ cursor: pointer;
+}
+#dcs-info-icon {
+ position: absolute;
+ right: 5px;
+ top: 5px;
+ font-size: 1.2em;
+ background-color: transparent;
+ color: var(--color-body) !important;
+}
+.blame .file-view.code-view {
+ overflow-y: auto;
+}
\ No newline at end of file
diff --git a/web_src/css/index.css b/web_src/css/index.css
index c1360bb194..5123d3ad80 100644
--- a/web_src/css/index.css
+++ b/web_src/css/index.css
@@ -12,7 +12,9 @@
@import "./modules/divider.css";
@import "./modules/svg.css";
@import "./modules/flexcontainer.css";
-
+/*** DCS Customizations ***/
+@import "./dcs.css";
+/*** END DCS Customizations ***/
@import "./shared/flex-list.css";
@import "./shared/milestone.css";
@import "./shared/repoorg.css";
diff --git a/web_src/css/standalone/swagger.css b/web_src/css/standalone/swagger.css
index c32e392036..0af0da84f4 100644
--- a/web_src/css/standalone/swagger.css
+++ b/web_src/css/standalone/swagger.css
@@ -12,10 +12,11 @@ body {
.swagger-back-link {
color: #1f69c0;
text-decoration: none;
- position: absolute;
- top: 1rem;
- right: 1.5rem;
- display: flex;
+ /*** DCS Customizations ***/
+ float: right;
+ padding-right: 10px;
+ clear: both;
+ /*** END DCS Customizations ***/
align-items: center;
}
diff --git a/web_src/css/themes/theme-gitea-wide-screen.css b/web_src/css/themes/theme-gitea-wide-screen.css
new file mode 100644
index 0000000000..bc83525974
--- /dev/null
+++ b/web_src/css/themes/theme-gitea-wide-screen.css
@@ -0,0 +1,9 @@
+@media only screen and (min-width: 1200px) {
+ .ui.ui.ui.container:not(.fluid) {
+ width: 100%;
+ margin-left: 0;
+ margin-right: 0;
+ padding-left: 30px;
+ padding-right: 30px;
+ }
+}
diff --git a/web_src/js/features/dcs-info-icon.js b/web_src/js/features/dcs-info-icon.js
new file mode 100644
index 0000000000..dfa268697f
--- /dev/null
+++ b/web_src/js/features/dcs-info-icon.js
@@ -0,0 +1,17 @@
+import {createTippy} from '../modules/tippy.js';
+
+export function initDCSInfoIcon() {
+ const icon = document.getElementById('dcs-info-icon');
+ if (!icon) {
+ return;
+ }
+ const tooltip = document.getElementById('dcs-info-icon-tooltip');
+ if (!tooltip) {
+ return;
+ }
+ createTippy(icon, {
+ allowHTML: true,
+ maxWidth: 650,
+ content: tooltip.innerHTML,
+ });
+}
diff --git a/web_src/js/features/dcs-language-fonts.js b/web_src/js/features/dcs-language-fonts.js
new file mode 100644
index 0000000000..2cda47d82a
--- /dev/null
+++ b/web_src/js/features/dcs-language-fonts.js
@@ -0,0 +1,38 @@
+import $ from 'jquery';
+import lang_font_families from '../../../assets/lang_font_families.json';
+import lang_font_links from '../../../assets/lang_font_links.json';
+
+const set_dcs_fonts = [];
+const set_dcs_selectors = [];
+
+export function initDCSLanguageFonts() {
+ $('[data-language]').each((_, tag) => {
+ const lang = $(tag).attr('data-language');
+ if (lang_font_families[lang]) {
+ setDCSFontsHTML(lang_font_families[lang], `[data-language=${lang}], [data-language=${lang}] *`);
+ }
+ });
+}
+
+function setDCSFontsHTML(fonts, selector) {
+ if (set_dcs_selectors.includes(selector)) {
+ return;
+ }
+ const $head = $('head');
+ if (!fonts.includes('Noto Sans')) {
+ fonts.push('Noto Sans');
+ }
+ for (const font of fonts) {
+ if (!set_dcs_fonts.includes(font) && lang_font_links[font]) {
+ $head.append(`
`);
+ set_dcs_fonts.push(font);
+ }
+ }
+ $head.append(`
+`);
+ set_dcs_selectors.push(selector);
+}
diff --git a/web_src/js/features/dcs-validation-badge.js b/web_src/js/features/dcs-validation-badge.js
new file mode 100644
index 0000000000..a945950d12
--- /dev/null
+++ b/web_src/js/features/dcs-validation-badge.js
@@ -0,0 +1,26 @@
+import {createTippy} from '../modules/tippy.js';
+
+export function initDCSValidationBadge() {
+ const badges = document.getElementsByClassName('validation-message-badge');
+ if (!badges) {
+ return;
+ }
+ [].forEach.call(badges, (badge) => {
+ const tooltips = badge.getElementsByClassName('validation-message-tooltip');
+ if (tooltips) {
+ createTippy(badge, {
+ trigger: 'mouseenter',
+ allowHTML: true,
+ content: 'Click to see status',
+ });
+ createTippy(badge, {
+ trigger: 'click',
+ allowHTML: true,
+ maxWidth: 650,
+ content: tooltips[0].innerHTML,
+ interactive: true,
+ hideOnClick: true,
+ });
+ }
+ });
+}
diff --git a/web_src/js/index.js b/web_src/js/index.js
index 4713618506..9a8bc95b60 100644
--- a/web_src/js/index.js
+++ b/web_src/js/index.js
@@ -75,6 +75,11 @@ import {initRepoBranchButton} from './features/repo-branch.js';
import {initCommonOrganization} from './features/common-organization.js';
import {initRepoWikiForm} from './features/repo-wiki.js';
import {initRepoCommentForm, initRepository} from './features/repo-legacy.js';
+/** DCS Customizations **/
+import {initDCSInfoIcon} from './features/dcs-info-icon.js';
+import {initDCSValidationBadge} from './features/dcs-validation-badge.js';
+import {initDCSLanguageFonts} from './features/dcs-language-fonts.js';
+/** END DCS Customizations **/
import {initCopyContent} from './features/copycontent.js';
import {initCaptcha} from './features/captcha.js';
import {initRepositoryActionView} from './components/RepoActionView.vue';
@@ -132,6 +137,12 @@ onDomReady(() => {
initDashboardRepoList();
+ /** DCS Customizations **/
+ initDCSInfoIcon();
+ initDCSValidationBadge();
+ initDCSLanguageFonts();
+ /** END DCS Customizations **/
+
initNotificationCount();
initNotificationsTable();