mirror of
https://github.com/goharbor/harbor.git
synced 2024-11-20 17:25:24 +01:00
cron validator
Signed-off-by: FangyuanCheng <fangyuanc@vmware.com>
This commit is contained in:
parent
215149fc2f
commit
5dd200fa00
@ -31,11 +31,11 @@
|
||||
</select>
|
||||
</div>
|
||||
<span [hidden]="scheduleType!==SCHEDULE_TYPE.CUSTOM">{{ "SCHEDULE.CRON" | translate }} :</span>
|
||||
<div class="form-group" [hidden]="scheduleType!==SCHEDULE_TYPE.CUSTOM">
|
||||
<label for="targetCron" aria-haspopup="true" role="tooltip" [class.invalid]="cronStringInput.invalid && (cronStringInput.dirty || cronStringInput.touched)" class="tooltip tooltip-validation tooltip-md tooltip-top-right cron-label">
|
||||
<input type="text" name=targetCron id="targetCron" #cronStringInput="ngModel" required class="form-control"
|
||||
<div [hidden]="scheduleType!==SCHEDULE_TYPE.CUSTOM">
|
||||
<label for="targetCron" aria-haspopup="true" role="tooltip" [class.invalid]="dateInvalid" class="tooltip tooltip-validation tooltip-md tooltip-top-right cron-label">
|
||||
<input type="text" (blur)="blurInvalid()" (input)="inputInvalid()" name=targetCron id="targetCron" #cronStringInput="ngModel" required class="form-control"
|
||||
[(ngModel)]="cronString">
|
||||
<span class="tooltip-content">
|
||||
<span class="tooltip-content" *ngIf="dateInvalid">
|
||||
{{'TOOLTIP.CRON_REQUIRED' | translate }}
|
||||
</span>
|
||||
</label>
|
||||
|
@ -8,6 +8,7 @@ import {
|
||||
SimpleChange
|
||||
} from "@angular/core";
|
||||
import { OriginCron } from "../service/interface";
|
||||
import { cronRegex } from "../utils";
|
||||
const SCHEDULE_TYPE = {
|
||||
NONE: "None",
|
||||
DAILY: "Daily",
|
||||
@ -24,6 +25,7 @@ export class CronScheduleComponent implements OnChanges {
|
||||
@Input() originCron: OriginCron;
|
||||
@Input() labelEdit: string;
|
||||
@Input() labelCurrent: string;
|
||||
dateInvalid: boolean;
|
||||
originScheduleType: string;
|
||||
oriCron: string;
|
||||
cronString: string;
|
||||
@ -52,13 +54,26 @@ export class CronScheduleComponent implements OnChanges {
|
||||
}
|
||||
}
|
||||
|
||||
inputInvalid() {
|
||||
this.dateInvalid = cronRegex(this.cronString) ? false : true;
|
||||
}
|
||||
|
||||
blurInvalid() {
|
||||
if (!this.cronString) {
|
||||
this.dateInvalid = true;
|
||||
}
|
||||
}
|
||||
|
||||
public resetSchedule() {
|
||||
this.originScheduleType = this.scheduleType;
|
||||
this.oriCron = this.cronString;
|
||||
this.oriCron = this.cronString.replace(/\s+/g, " ").trim();
|
||||
this.isEditMode = false;
|
||||
}
|
||||
|
||||
save(): void {
|
||||
if (this.dateInvalid && this.scheduleType === SCHEDULE_TYPE.CUSTOM) {
|
||||
return;
|
||||
}
|
||||
let scheduleTerm: string = "";
|
||||
this.resetSchedule();
|
||||
if (this.scheduleType && this.scheduleType === SCHEDULE_TYPE.NONE) {
|
||||
|
@ -343,3 +343,24 @@ export function getChanges(original: any, afterChange: any): { [key: string]: an
|
||||
}
|
||||
return changes;
|
||||
}
|
||||
|
||||
export function cronRegex(testValue: any): boolean {
|
||||
const regSecond = "^($|#|\\w+\\s*=|(\\?|\\*|(?:[0-5]?\\d)(?:(?:-|\/|\\,)(?:[0-5]?\\d))?" +
|
||||
"(?:,(?:[0-5]?\\d)(?:(?:-|\/|\\,)(?:[0-5]?\\d))?)*)\\s+";
|
||||
const regMinute = "(\\?|\\*|(?:[0-5]?\\d)(?:(?:-|\/|\\,)(?:[0-5]?\\d))?(?:,(?:[0-5]?\\d)(?:(?:-|\/|\\,)(?:[0-5]?\\d))?)*)\\s+";
|
||||
const regHour = "(\\?|\\*|(?:[01]?\\d|2[0-3])(?:(?:-|\/|\\,)(?:[01]?\\d|2[0-3]))?(?:,(?:[01]?\\d|2[0-3])" +
|
||||
"(?:(?:-|\/|\\,)(?:[01]?\\d|2[0-3]))?)*)\\s+";
|
||||
const regDay = "(\\?|\\*|(?:0?[1-9]|[12]\\d|3[01])(?:(?:-|\/|\\,)(?:0?[1-9]|[12]\\d|3[01]))?(?:,(?:0?[1-9]|[12]\\d|3[01])" +
|
||||
"(?:(?:-|\/|\\,)(?:0?[1-9]|[12]\\d|3[01]))?)*)\\s+";
|
||||
const regMonth = "(\\?|\\*|(?:[1-9]|1[012])(?:(?:-|\/|\\,)(?:[1-9]|1[012]))?(?:L|W)?(?:,(?:[1-9]|1[012])(?:(?:-|\/|\\,)" +
|
||||
"(?:[1-9]|1[012]))?(?:L|W)?)*|\\?|\\*|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(?:(?:-)" +
|
||||
"(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?(?:,(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)" +
|
||||
"(?:(?:-)(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?)*)\\s+";
|
||||
const regWeek = "(\\?|\\*|(?:[0-6])(?:(?:-|\/|\\,|#)(?:[0-6]))?(?:L)?(?:,(?:[0-6])(?:(?:-|\/|\\,|#)" +
|
||||
"(?:[0-6]))?(?:L)?)*|\\?|\\*|(?:MON|TUE|WED|THU|FRI|SAT|SUN)(?:(?:-)(?:MON|TUE|WED|THU|FRI|SAT|SUN))?" +
|
||||
"(?:,(?:MON|TUE|WED|THU|FRI|SAT|SUN)(?:(?:-)(?:MON|TUE|WED|THU|FRI|SAT|SUN))?)*)(|\\s)+";
|
||||
const regYear = "(\\?|\\*|(?:|\\d{4})(?:(?:-|\/|\\,)(?:|\\d{4}))?(?:,(?:|\\d{4})(?:(?:-|\/|\\,)(?:|\\d{4}))?)*))$";
|
||||
const regEx = regSecond + regMinute + regHour + regDay + regMonth + regWeek + regYear;
|
||||
let reg = new RegExp(regEx, "i");
|
||||
return reg.test(testValue);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user