Éditer une ligne depuis Dépenses ou Recettes ouvrait le document, puis relâchait sur la liste des documents : il fallait revenir à la page d'analyse et refaire ses filtres à la main pour corriger la ligne suivante. Les deux tables passent maintenant à l'éditeur la vue d'où l'on part, filtres compris, et il y ramène à ses trois sorties : enregistrement terminé, abandon, et document introuvable. Sans cette destination — depuis la liste des documents, ou un lien direct — le repli reste la liste. La destination arrive par l'URL, donc fabricable par n'importe qui : seule une page de l'application est suivie (utils/retour.js). Une URL absolue, un chemin protocol-relatif que le navigateur lirait comme un domaine, ou des contre-slashs retombent sur le repli. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
23 lines
980 B
JavaScript
23 lines
980 B
JavaScript
// Une table d'analyse envoie vers l'editeur de document la page ou revenir une
|
|
// fois l'enregistrement termine, filtres compris. Cette destination arrive par
|
|
// l'URL : elle est donc fabricable par n'importe qui, et n'est suivie que si
|
|
// elle designe une page de l'application.
|
|
|
|
/**
|
|
* La destination de retour portee par une query, ou `repli` si elle manque ou
|
|
* ne designe pas un chemin interne.
|
|
*
|
|
* Sont refuses tout ce qui peut sortir du site : une URL absolue
|
|
* (`https://ailleurs`), un chemin protocol-relatif (`//ailleurs`) que le
|
|
* navigateur traite comme un domaine, et les contre-slashs dont certains
|
|
* navigateurs font des slashs.
|
|
*/
|
|
export function cheminRetour(brut, repli = '/documents') {
|
|
const valeur = Array.isArray(brut) ? brut[0] : brut
|
|
if (typeof valeur !== 'string' || valeur === '') return repli
|
|
if (!valeur.startsWith('/')) return repli
|
|
if (valeur.startsWith('//')) return repli
|
|
if (valeur.includes('\\')) return repli
|
|
return valeur
|
|
}
|