@edugouvfr/ngx-dsfr-ext
Version:
NgxDsfrExt est une extension au package @edugouvfr/ngx-dsfr (portage Angular des éléments DSFR)
90 lines • 11.2 kB
JavaScript
import { Directive, HostListener, Input } from '@angular/core';
import * as i0 from "@angular/core";
/**
* L'objective de cette directive est d'implémenter un masque de saisie en fonction de plusieurs entrées :
* - On peut considérer le `placeholder`, le `pattern` de l'input ou tout simplement un attribut `mask`.
* - Dans cette première version, on gère tout simplement une date
*/
/**
* L'objectif de cette directive est de proposer, en l'absence de masque de saisie un formatage par défaut
* @author pfontanet
* @since 0.10
*/
export class DateFormatDirective {
constructor() { }
onInput(event) {
const doFormat = !!this.dsfrDateFormat;
if (doFormat) {
const inputElt = event.target;
inputElt.value = completeDateValue(inputElt.value);
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateFormatDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: DateFormatDirective, isStandalone: true, selector: "[dsfrDateFormat]", inputs: { dsfrDateFormat: "dsfrDateFormat" }, host: { listeners: { "input": "onInput($event)" } }, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateFormatDirective, decorators: [{
type: Directive,
args: [{
selector: '[dsfrDateFormat]',
standalone: true,
}]
}], ctorParameters: () => [], propDecorators: { dsfrDateFormat: [{
type: Input
}], onInput: [{
type: HostListener,
args: ['input', ['$event']]
}] } });
/* -- Functions ----------------------------------------------------------------------------------------------------- */
/**
* Compléte la valeur d'une date
*/
export function completeDateValue(val) {
// On supprime tout ce n'est ni chiffre ni séparateur
let value = filtreDigitSep(val);
const regexp = /^(?<g1>[\d]{0,2})?(?<s1>\/)?(?<g2>[\d]{0,2})?(?<s2>\/)?(?<year>[\d]{0,4})?/;
const reArr = regexp.exec(value);
const groups = reArr?.groups;
value = '';
if (groups) {
const g1 = groups['g1'] || '';
let s1 = groups['s1'] || '';
s1 = !s1 && g1.length === 2 ? '/' : s1;
const g2 = groups['g2'] || '';
let s2 = groups['s2'] || '';
s2 = !s2 && g2.length === 2 ? '/' : s2;
const year = groups['year'] || '';
value = g1 + s1 + g2 + s2 + year;
}
return value;
}
/**
* Compléte la valeur d'une date en langue 'fr'
* (export pour les tests)
*/
export function completeDateValueFr(val) {
// On supprime tout ce n'est ni chiffre ni séparateur
let value = filtreDigitSep(val);
// const regexpFr = /^(?<day>3[01]|0?[1-9]|[12][0-9])?(?<s1>\/)?(?<month>1[0-2]|0?[1-9])?(?<s2>\/)?(?<year>[\d]{0,4})?/;
const regexp = /^(?<day>[\d]{0,2})?(?<s1>\/)?(?<month>[\d]{0,2})?(?<s2>\/)?(?<year>[\d]{0,4})?/;
const reArr = regexp.exec(value);
const groups = reArr?.groups;
value = '';
if (groups) {
const day = groups['day'] || '';
let s1 = groups['s1'] || '';
s1 = !s1 && day.length === 2 ? '/' : s1;
const month = groups['month'] || '';
let s2 = groups['s2'] || '';
s2 = !s2 && month.length === 2 ? '/' : s2;
const year = groups['year'] || '';
value = day + s1 + month + s2 + year;
}
return value;
}
/**
* Ne conserve que les chiffres et les séparateurs
*/
function filtreDigitSep(value) {
return value.replace(/[^\d^\/]/g, '');
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1mb3JtYXQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWRzZnItZXh0L3NyYy9saWIvZGF0ZXBpY2tlci9tYXNrL2RhdGUtZm9ybWF0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRS9EOzs7O0dBSUc7QUFLSDs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLG1CQUFtQjtJQUc5QixnQkFBZSxDQUFDO0lBR2hCLE9BQU8sQ0FBQyxLQUFZO1FBQ2xCLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3ZDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBMEIsQ0FBQztZQUNsRCxRQUFRLENBQUMsS0FBSyxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxDQUFDO0lBQ0gsQ0FBQzsrR0FaVSxtQkFBbUI7bUdBQW5CLG1CQUFtQjs7NEZBQW5CLG1CQUFtQjtrQkFUL0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixVQUFVLEVBQUUsSUFBSTtpQkFDakI7d0RBT1UsY0FBYztzQkFBdEIsS0FBSztnQkFLTixPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDOztBQVVuQyx3SEFBd0g7QUFFeEg7O0dBRUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsR0FBVztJQUMzQyxxREFBcUQ7SUFDckQsSUFBSSxLQUFLLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWhDLE1BQU0sTUFBTSxHQUFHLDRFQUE0RSxDQUFDO0lBQzVGLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsTUFBTSxNQUFNLEdBQUcsS0FBSyxFQUFFLE1BQU0sQ0FBQztJQUM3QixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNYLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUIsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1QixFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUIsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1QixFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEMsS0FBSyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDbkMsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxHQUFXO0lBQzdDLHFEQUFxRDtJQUNyRCxJQUFJLEtBQUssR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFaEMsd0hBQXdIO0lBQ3hILE1BQU0sTUFBTSxHQUFHLGdGQUFnRixDQUFDO0lBQ2hHLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsTUFBTSxNQUFNLEdBQUcsS0FBSyxFQUFFLE1BQU0sQ0FBQztJQUM3QixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNYLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1QixFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1QixFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzFDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDdkMsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxjQUFjLENBQUMsS0FBYTtJQUNuQyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBMJ29iamVjdGl2ZSBkZSBjZXR0ZSBkaXJlY3RpdmUgZXN0IGQnaW1wbMOpbWVudGVyIHVuIG1hc3F1ZSBkZSBzYWlzaWUgZW4gZm9uY3Rpb24gZGUgcGx1c2lldXJzIGVudHLDqWVzIDpcbiAqIC0gT24gcGV1dCBjb25zaWTDqXJlciBsZSBgcGxhY2Vob2xkZXJgLCBsZSBgcGF0dGVybmAgZGUgbCdpbnB1dCBvdSB0b3V0IHNpbXBsZW1lbnQgdW4gYXR0cmlidXQgYG1hc2tgLlxuICogLSBEYW5zIGNldHRlIHByZW1pw6hyZSB2ZXJzaW9uLCBvbiBnw6hyZSB0b3V0IHNpbXBsZW1lbnQgdW5lIGRhdGVcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2RzZnJEYXRlRm9ybWF0XScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuLyoqXG4gKiBMJ29iamVjdGlmIGRlIGNldHRlIGRpcmVjdGl2ZSBlc3QgZGUgcHJvcG9zZXIsIGVuIGwnYWJzZW5jZSBkZSBtYXNxdWUgZGUgc2Fpc2llIHVuIGZvcm1hdGFnZSBwYXIgZMOpZmF1dFxuICogQGF1dGhvciBwZm9udGFuZXRcbiAqIEBzaW5jZSAwLjEwXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRlRm9ybWF0RGlyZWN0aXZlIHtcbiAgQElucHV0KCkgZHNmckRhdGVGb3JtYXQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgQEhvc3RMaXN0ZW5lcignaW5wdXQnLCBbJyRldmVudCddKVxuICBvbklucHV0KGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IGRvRm9ybWF0ID0gISF0aGlzLmRzZnJEYXRlRm9ybWF0O1xuICAgIGlmIChkb0Zvcm1hdCkge1xuICAgICAgY29uc3QgaW5wdXRFbHQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgIGlucHV0RWx0LnZhbHVlID0gY29tcGxldGVEYXRlVmFsdWUoaW5wdXRFbHQudmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAtLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBDb21wbMOpdGUgbGEgdmFsZXVyIGQndW5lIGRhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBsZXRlRGF0ZVZhbHVlKHZhbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gT24gc3VwcHJpbWUgdG91dCBjZSBuJ2VzdCBuaSBjaGlmZnJlIG5pIHPDqXBhcmF0ZXVyXG4gIGxldCB2YWx1ZSA9IGZpbHRyZURpZ2l0U2VwKHZhbCk7XG5cbiAgY29uc3QgcmVnZXhwID0gL14oPzxnMT5bXFxkXXswLDJ9KT8oPzxzMT5cXC8pPyg/PGcyPltcXGRdezAsMn0pPyg/PHMyPlxcLyk/KD88eWVhcj5bXFxkXXswLDR9KT8vO1xuICBjb25zdCByZUFyciA9IHJlZ2V4cC5leGVjKHZhbHVlKTtcbiAgY29uc3QgZ3JvdXBzID0gcmVBcnI/Lmdyb3VwcztcbiAgdmFsdWUgPSAnJztcbiAgaWYgKGdyb3Vwcykge1xuICAgIGNvbnN0IGcxID0gZ3JvdXBzWydnMSddIHx8ICcnO1xuICAgIGxldCBzMSA9IGdyb3Vwc1snczEnXSB8fCAnJztcbiAgICBzMSA9ICFzMSAmJiBnMS5sZW5ndGggPT09IDIgPyAnLycgOiBzMTtcbiAgICBjb25zdCBnMiA9IGdyb3Vwc1snZzInXSB8fCAnJztcbiAgICBsZXQgczIgPSBncm91cHNbJ3MyJ10gfHwgJyc7XG4gICAgczIgPSAhczIgJiYgZzIubGVuZ3RoID09PSAyID8gJy8nIDogczI7XG4gICAgY29uc3QgeWVhciA9IGdyb3Vwc1sneWVhciddIHx8ICcnO1xuICAgIHZhbHVlID0gZzEgKyBzMSArIGcyICsgczIgKyB5ZWFyO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIENvbXBsw6l0ZSBsYSB2YWxldXIgZCd1bmUgZGF0ZSBlbiBsYW5ndWUgJ2ZyJ1xuICogKGV4cG9ydCBwb3VyIGxlcyB0ZXN0cylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBsZXRlRGF0ZVZhbHVlRnIodmFsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBPbiBzdXBwcmltZSB0b3V0IGNlIG4nZXN0IG5pIGNoaWZmcmUgbmkgc8OpcGFyYXRldXJcbiAgbGV0IHZhbHVlID0gZmlsdHJlRGlnaXRTZXAodmFsKTtcblxuICAvLyBjb25zdCByZWdleHBGciA9IC9eKD88ZGF5PjNbMDFdfDA/WzEtOV18WzEyXVswLTldKT8oPzxzMT5cXC8pPyg/PG1vbnRoPjFbMC0yXXwwP1sxLTldKT8oPzxzMj5cXC8pPyg/PHllYXI+W1xcZF17MCw0fSk/LztcbiAgY29uc3QgcmVnZXhwID0gL14oPzxkYXk+W1xcZF17MCwyfSk/KD88czE+XFwvKT8oPzxtb250aD5bXFxkXXswLDJ9KT8oPzxzMj5cXC8pPyg/PHllYXI+W1xcZF17MCw0fSk/LztcbiAgY29uc3QgcmVBcnIgPSByZWdleHAuZXhlYyh2YWx1ZSk7XG4gIGNvbnN0IGdyb3VwcyA9IHJlQXJyPy5ncm91cHM7XG4gIHZhbHVlID0gJyc7XG4gIGlmIChncm91cHMpIHtcbiAgICBjb25zdCBkYXkgPSBncm91cHNbJ2RheSddIHx8ICcnO1xuICAgIGxldCBzMSA9IGdyb3Vwc1snczEnXSB8fCAnJztcbiAgICBzMSA9ICFzMSAmJiBkYXkubGVuZ3RoID09PSAyID8gJy8nIDogczE7XG4gICAgY29uc3QgbW9udGggPSBncm91cHNbJ21vbnRoJ10gfHwgJyc7XG4gICAgbGV0IHMyID0gZ3JvdXBzWydzMiddIHx8ICcnO1xuICAgIHMyID0gIXMyICYmIG1vbnRoLmxlbmd0aCA9PT0gMiA/ICcvJyA6IHMyO1xuICAgIGNvbnN0IHllYXIgPSBncm91cHNbJ3llYXInXSB8fCAnJztcbiAgICB2YWx1ZSA9IGRheSArIHMxICsgbW9udGggKyBzMiArIHllYXI7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogTmUgY29uc2VydmUgcXVlIGxlcyBjaGlmZnJlcyBldCBsZXMgc8OpcGFyYXRldXJzXG4gKi9cbmZ1bmN0aW9uIGZpbHRyZURpZ2l0U2VwKHZhbHVlOiBTdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdmFsdWUucmVwbGFjZSgvW15cXGReXFwvXS9nLCAnJyk7XG59XG4iXX0=