fix(apk): URL du depot sur plusieurs lignes, la fin n'etait pas atteignable

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
r-zakarya
2026-09-17 17:33:45 +01:00
parent 333af8c28f
commit a9618e9395
+13 -18
View File
@@ -296,7 +296,13 @@
border: 0; border-radius: var(--radius-s); border: 0; border-radius: var(--radius-s);
background: rgba(255,255,255,.10); color: var(--text); background: rgba(255,255,255,.10); color: var(--text);
font: inherit; outline: none; font: inherit; outline: none;
/* Le body interdit la selection (user-select: none) et les champs en
HERITAIENT : le curseur ne suivait pas le doigt et le texte ne defilait
jamais - la fin d'une URL longue restait hors d'atteinte. */
-webkit-user-select: text; user-select: text;
} }
.field-in.multi { height: auto; padding: 12px 44px 12px 14px; resize: none;
line-height: 1.35; word-break: break-all; display: block; }
.field-in::placeholder { color: var(--muted); } .field-in::placeholder { color: var(--muted); }
/* La fleche dit si le panneau est deplie, et de quel bouton il descend. */ /* La fleche dit si le panneau est deplie, et de quel bouton il descend. */
.chev { display: inline-block; margin-left: 6px; font-size: 11px; .chev { display: inline-block; margin-left: 6px; font-size: 11px;
@@ -563,9 +569,13 @@
<div class="scroll"> <div class="scroll">
<h2>Repository</h2> <h2>Repository</h2>
<div class="in-wrap"> <div class="in-wrap">
<input class="field-in" id="sUrl" placeholder="repository URL, e.g. https://git.example.com/owner/repo" <!-- ZONE DE TEXTE ET NON input : l'URL passe a la ligne et se lit en
entier. Un input d'une ligne ne defilait pas sous le doigt dans la
WebView de l'app, et la fin d'une URL d'API restait inatteignable. -->
<textarea class="field-in multi" id="sUrl" rows="3"
placeholder="repository URL, e.g. https://git.example.com/owner/repo"
autocomplete="off" autocorrect="off" autocapitalize="none" autocomplete="off" autocorrect="off" autocapitalize="none"
spellcheck="false" inputmode="url"> spellcheck="false" inputmode="url"></textarea>
<div class="in-x" data-clear="sUrl">&#215;</div> <div class="in-x" data-clear="sUrl">&#215;</div>
</div> </div>
<div class="in-wrap"> <div class="in-wrap">
@@ -1629,23 +1639,8 @@ function openSettings() {
// https://git.example.com/OWNER/REPO (ou .../src/branch/main/FICHIER) devient // https://git.example.com/OWNER/REPO (ou .../src/branch/main/FICHIER) devient
// l'URL de l'API des contenus. Une URL d'API ou d'endpoint PHP passe telle quelle, // l'URL de l'API des contenus. Une URL d'API ou d'endpoint PHP passe telle quelle,
// et une forme non reconnue aussi - Sync dira alors ce qui ne va pas. // et une forme non reconnue aussi - Sync dira alors ce qui ne va pas.
// ENTRER DANS UN CHAMP MET LE CURSEUR A LA FIN. Sous Android, toucher un champ
// plus long que sa largeur pose le curseur sur le caractere touche, et la fin
// d'une URL ou d'un jeton reste hors d'atteinte. Differe : le toucher pose son
// propre curseur APRES l'evenement focus. Un second toucher place le curseur
// ou l'on veut.
document.addEventListener('focusin', function (ev) {
var el = ev.target;
if (!el.classList || !el.classList.contains('field-in')) return;
setTimeout(function () {
var n = el.value.length;
try { el.setSelectionRange(n, n); } catch (e) { return; }
el.scrollLeft = el.scrollWidth;
}, 60);
});
function normalizeRepoUrl(u) { function normalizeRepoUrl(u) {
u = u.trim(); u = u.replace(/\s+/g, '');
if (!u || /\/api\/v1\/repos\//i.test(u) || /\.php(\?|$)/i.test(u)) return u; if (!u || /\/api\/v1\/repos\//i.test(u) || /\.php(\?|$)/i.test(u)) return u;
var m = u.match(/^(https?:\/\/[^\/]+)\/([^\/]+)\/([^\/]+?)(?:\.git)?(?:\/src\/branch\/[^\/]+\/(.+?))?\/?$/i); var m = u.match(/^(https?:\/\/[^\/]+)\/([^\/]+)\/([^\/]+?)(?:\.git)?(?:\/src\/branch\/[^\/]+\/(.+?))?\/?$/i);
if (!m) return u; if (!m) return u;