mirror of
https://github.com/go-gitea/gitea
synced 2024-09-01 12:05:19 +02:00
Compare commits
14 Commits
6fee36ed2b
...
8abf66781f
Author | SHA1 | Date | |
---|---|---|---|
|
8abf66781f | ||
|
a40192dc12 | ||
|
e1cf760d2f | ||
|
b5e518fce4 | ||
|
5bd05dee63 | ||
|
ccb9705595 | ||
|
3d19281d3e | ||
|
6071df1bef | ||
|
df0d7c1aec | ||
|
6d29c32bd3 | ||
|
3cf7472410 | ||
|
2543f15e30 | ||
|
8ddd550e44 | ||
|
f34a0b9f32 |
@ -2981,6 +2981,10 @@ emails.not_updated=Falhou a modificação do endereço de email solicitado: %v
|
|||||||
emails.duplicate_active=Este endereço de email já está a ser usado por outro utilizador.
|
emails.duplicate_active=Este endereço de email já está a ser usado por outro utilizador.
|
||||||
emails.change_email_header=Modificar propriedades do email
|
emails.change_email_header=Modificar propriedades do email
|
||||||
emails.change_email_text=Tem a certeza que quer modificar este endereço de email?
|
emails.change_email_text=Tem a certeza que quer modificar este endereço de email?
|
||||||
|
emails.delete=Eliminar email
|
||||||
|
emails.delete_desc=Tem a certeza que quer eliminar este endereço de email?
|
||||||
|
emails.deletion_success=O endereço de email foi eliminado.
|
||||||
|
emails.delete_primary_email_error=NĂŁo pode eliminar o email principal.
|
||||||
|
|
||||||
orgs.org_manage_panel=Gestão das organizações
|
orgs.org_manage_panel=Gestão das organizações
|
||||||
orgs.name=Nome
|
orgs.name=Nome
|
||||||
|
@ -327,7 +327,7 @@ func getOAuthGroupsForUser(ctx go_context.Context, user *user_model.User) ([]str
|
|||||||
|
|
||||||
func parseBasicAuth(ctx *context.Context) (username, password string, err error) {
|
func parseBasicAuth(ctx *context.Context) (username, password string, err error) {
|
||||||
authHeader := ctx.Req.Header.Get("Authorization")
|
authHeader := ctx.Req.Header.Get("Authorization")
|
||||||
if authType, authData, ok := strings.Cut(authHeader, " "); ok && authType == "Basic" {
|
if authType, authData, ok := strings.Cut(authHeader, " "); ok && strings.EqualFold(authType, "Basic") {
|
||||||
return base.BasicAuthDecode(authData)
|
return base.BasicAuthDecode(authData)
|
||||||
}
|
}
|
||||||
return "", "", errors.New("invalid basic authentication")
|
return "", "", errors.New("invalid basic authentication")
|
||||||
@ -661,7 +661,7 @@ func AccessTokenOAuth(ctx *context.Context) {
|
|||||||
// if there is no ClientID or ClientSecret in the request body, fill these fields by the Authorization header and ensure the provided field matches the Authorization header
|
// if there is no ClientID or ClientSecret in the request body, fill these fields by the Authorization header and ensure the provided field matches the Authorization header
|
||||||
if form.ClientID == "" || form.ClientSecret == "" {
|
if form.ClientID == "" || form.ClientSecret == "" {
|
||||||
authHeader := ctx.Req.Header.Get("Authorization")
|
authHeader := ctx.Req.Header.Get("Authorization")
|
||||||
if authType, authData, ok := strings.Cut(authHeader, " "); ok && authType == "Basic" {
|
if authType, authData, ok := strings.Cut(authHeader, " "); ok && strings.EqualFold(authType, "Basic") {
|
||||||
clientID, clientSecret, err := base.BasicAuthDecode(authData)
|
clientID, clientSecret, err := base.BasicAuthDecode(authData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
handleAccessTokenError(ctx, AccessTokenError{
|
handleAccessTokenError(ctx, AccessTokenError{
|
||||||
|
@ -317,7 +317,7 @@ func editFilePost(ctx *context.Context, form forms.EditRepoFileForm, isNewFile b
|
|||||||
case git.EntryModeBlob:
|
case git.EntryModeBlob:
|
||||||
ctx.RenderWithErr(ctx.Tr("repo.editor.directory_is_a_file", fileErr.Path), tplEditFile, &form)
|
ctx.RenderWithErr(ctx.Tr("repo.editor.directory_is_a_file", fileErr.Path), tplEditFile, &form)
|
||||||
default:
|
default:
|
||||||
ctx.Error(http.StatusInternalServerError, err.Error())
|
ctx.RenderWithErr(ctx.Tr("repo.editor.filename_is_invalid", fileErr.Path), tplEditFile, &form)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ctx.Error(http.StatusInternalServerError, err.Error())
|
ctx.Error(http.StatusInternalServerError, err.Error())
|
||||||
|
@ -75,18 +75,56 @@ export function initRepoEditor() {
|
|||||||
}
|
}
|
||||||
filenameInput.addEventListener('input', function () {
|
filenameInput.addEventListener('input', function () {
|
||||||
const parts = filenameInput.value.split('/');
|
const parts = filenameInput.value.split('/');
|
||||||
|
const links = Array.from(document.querySelectorAll('.breadcrumb span.section'));
|
||||||
|
const dividers = Array.from(document.querySelectorAll('.breadcrumb .breadcrumb-divider'));
|
||||||
if (parts.length > 1) {
|
if (parts.length > 1) {
|
||||||
|
let containSpace = false;
|
||||||
for (let i = 0; i < parts.length; ++i) {
|
for (let i = 0; i < parts.length; ++i) {
|
||||||
const value = parts[i];
|
const value = parts[i];
|
||||||
|
const trimValue = value.trim();
|
||||||
|
if (trimValue === '..') {
|
||||||
|
// remove previous tree path
|
||||||
|
if (links.length > 0) {
|
||||||
|
const link = links.pop();
|
||||||
|
const divider = dividers.pop();
|
||||||
|
link.remove();
|
||||||
|
divider.remove();
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (i < parts.length - 1) {
|
if (i < parts.length - 1) {
|
||||||
if (value.length) {
|
if (trimValue.length) {
|
||||||
$(`<span class="section"><a href="#">${htmlEscape(value)}</a></span>`).insertBefore($(filenameInput));
|
const $link = $(`<span class="section"><a href="#">${htmlEscape(value)}</a></span>`);
|
||||||
$('<div class="breadcrumb-divider">/</div>').insertBefore($(filenameInput));
|
const $divider = $('<div class="breadcrumb-divider">/</div>');
|
||||||
|
links.push($link.get(0));
|
||||||
|
dividers.push($divider.get(0));
|
||||||
|
$link.insertBefore($(filenameInput));
|
||||||
|
$divider.insertBefore($(filenameInput));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
filenameInput.value = value;
|
filenameInput.value = value;
|
||||||
}
|
}
|
||||||
this.setSelectionRange(0, 0);
|
this.setSelectionRange(0, 0);
|
||||||
|
containSpace |= (trimValue !== value && trimValue !== '');
|
||||||
|
}
|
||||||
|
let warningDiv = document.querySelector('.ui.warning.message.flash-message.flash-warning.space-related');
|
||||||
|
containSpace |= Array.from(links).some((link) => {
|
||||||
|
const value = link.querySelector('a').textContent;
|
||||||
|
return value.trim() !== value;
|
||||||
|
});
|
||||||
|
if (containSpace) {
|
||||||
|
if (!warningDiv) {
|
||||||
|
warningDiv = document.createElement('div');
|
||||||
|
warningDiv.classList.add('ui', 'warning', 'message', 'flash-message', 'flash-warning', 'space-related');
|
||||||
|
warningDiv.innerHTML = '<p>Parent directory contains leading or trailing whitespace.</p>';
|
||||||
|
// Add display 'block' because display is set to 'none' in formantic\build\semantic.css
|
||||||
|
warningDiv.style.display = 'block';
|
||||||
|
const inputContainer = document.querySelector('.repo-editor-header');
|
||||||
|
inputContainer.insertAdjacentElement('beforebegin', warningDiv);
|
||||||
|
}
|
||||||
|
showElem(warningDiv);
|
||||||
|
} else if (warningDiv) {
|
||||||
|
hideElem(warningDiv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
joinTreePath();
|
joinTreePath();
|
||||||
|
Loading…
Reference in New Issue
Block a user