Skip to content

Commit 48f6168

Browse files
committed
show limit message
1 parent 8172210 commit 48f6168

File tree

3 files changed

+27
-15
lines changed

3 files changed

+27
-15
lines changed

routers/web/repo/repo.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,8 @@ func createCommon(ctx *context.Context) {
154154
ctx.Data["Licenses"] = repo_module.Licenses
155155
ctx.Data["Readmes"] = repo_module.Readmes
156156
ctx.Data["IsForcedPrivate"] = setting.Repository.ForcePrivate
157-
ctx.Data["CanCreateRepo"] = ctx.Doer.CanCreateRepo()
158-
ctx.Data["MaxCreationLimit"] = ctx.Doer.MaxCreationLimit()
157+
ctx.Data["CanCreateRepoInDoer"] = ctx.Doer.CanCreateRepo()
158+
ctx.Data["MaxCreationLimitOfDoer"] = ctx.Doer.MaxCreationLimit()
159159
ctx.Data["SupportedObjectFormats"] = git.DefaultFeatures().SupportedObjectFormats
160160
ctx.Data["DefaultObjectFormat"] = git.Sha1ObjectFormat
161161
}

templates/repo/create.tmpl

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,19 @@
99
{{template "repo/create_helper" .}}
1010
<form class="ui form left-right-form new-repo-form" action="{{.Link}}" method="post">
1111
{{.CsrfTokenHtml}}
12+
<div id="create-repo-error-message" class="ui negative message tw-text-center tw-hidden"></div>
1213
<div class="inline required field {{if .Err_Owner}}error{{end}}">
1314
<label>{{ctx.Locale.Tr "repo.owner"}}</label>
14-
<div class="ui selection owner dropdown">
15-
<input type="hidden" id="uid" name="uid" value="{{.ContextUser.ID}}" required>
16-
<span class="text truncated-item-container" title="{{.ContextUser.Name}}">
17-
{{ctx.AvatarUtils.Avatar .ContextUser 28 "mini"}}
18-
<span class="truncated-item-name">{{.ContextUser.ShortName 40}}</span>
19-
</span>
15+
<div class="ui selection dropdown" id="repo_owner_dropdown">
16+
<input type="hidden" name="uid" value="{{.ContextUser.ID}}">
17+
<span class="text truncated-item-name"></span>
2018
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
2119
<div class="menu">
22-
<div class="item truncated-item-container" data-value="{{.SignedUser.ID}}" title="{{.SignedUser.Name}}">
20+
<div class="item truncated-item-container" data-value="{{.SignedUser.ID}}" title="{{.Name}}"
21+
{{if not .CanCreateRepoInDoer}}
22+
data-create-repo-disallowed-prompt="{{ctx.Locale.TrN .MaxCreationLimit "repo.form.reach_limit_of_creation_1" "repo.form.reach_limit_of_creation_n" .MaxCreationLimitOfDoer}}"
23+
{{end}}
24+
>
2325
{{ctx.AvatarUtils.Avatar .SignedUser 28 "mini"}}
2426
<span class="truncated-item-name">{{.SignedUser.ShortName 40}}</span>
2527
</div>

web_src/js/features/repo-new.ts

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ import {sanitizeRepoName} from './repo-common.ts';
66
const {appSubUrl} = window.config;
77

88
function initRepoNewTemplateSearch(form: HTMLFormElement) {
9-
const inputRepoOwnerUid = form.querySelector<HTMLInputElement>('#uid');
9+
const elCreateRepoErrorMessage = form.querySelector('#create-repo-error-message');
10+
const elRepoOwnerDropdown = form.querySelector('#repo_owner_dropdown');
1011
const elRepoTemplateDropdown = form.querySelector<HTMLInputElement>('#repo_template_search');
1112
const inputRepoTemplate = form.querySelector<HTMLInputElement>('#repo_template');
1213
const elTemplateUnits = form.querySelector('#template_units');
@@ -19,11 +20,20 @@ function initRepoNewTemplateSearch(form: HTMLFormElement) {
1920
inputRepoTemplate.addEventListener('change', checkTemplate);
2021
checkTemplate();
2122

22-
const $dropdown = fomanticQuery(elRepoTemplateDropdown);
23+
const $repoOwnerDropdown = fomanticQuery(elRepoOwnerDropdown);
24+
const $repoTemplateDropdown = fomanticQuery(elRepoTemplateDropdown);
2325
const onChangeOwner = function () {
24-
$dropdown.dropdown('setting', {
26+
const ownerId = $repoOwnerDropdown.dropdown('get value');
27+
const $ownerItem = $repoOwnerDropdown.dropdown('get item', ownerId);
28+
hideElem(elCreateRepoErrorMessage);
29+
if ($ownerItem?.length) {
30+
const elOwnerItem = $ownerItem[0];
31+
elCreateRepoErrorMessage.textContent = elOwnerItem.getAttribute('data-create-repo-disallowed-prompt') ?? '';
32+
toggleElem(elCreateRepoErrorMessage, Boolean(elCreateRepoErrorMessage.textContent));
33+
}
34+
$repoTemplateDropdown.dropdown('setting', {
2535
apiSettings: {
26-
url: `${appSubUrl}/repo/search?q={query}&template=true&priority_owner_id=${inputRepoOwnerUid.value}`,
36+
url: `${appSubUrl}/repo/search?q={query}&template=true&priority_owner_id=${ownerId}`,
2737
onResponse(response: any) {
2838
const results = [];
2939
results.push({name: '', value: ''}); // empty item means not using template
@@ -33,14 +43,14 @@ function initRepoNewTemplateSearch(form: HTMLFormElement) {
3343
value: String(tmplRepo.repository.id),
3444
});
3545
}
36-
$dropdown.fomanticExt.onResponseKeepSelectedItem($dropdown, inputRepoTemplate.value);
46+
$repoTemplateDropdown.fomanticExt.onResponseKeepSelectedItem($repoTemplateDropdown, inputRepoTemplate.value);
3747
return {results};
3848
},
3949
cache: false,
4050
},
4151
});
4252
};
43-
inputRepoOwnerUid.addEventListener('change', onChangeOwner);
53+
$repoOwnerDropdown.dropdown('setting', 'onChange', onChangeOwner);
4454
onChangeOwner();
4555
}
4656

0 commit comments

Comments
 (0)