Added the new Sieve parser as script validator

This commit is contained in:
the-djmaze 2022-03-11 13:41:13 +01:00
parent 9bae77bfa1
commit 42813b90dd
3 changed files with 19 additions and 5 deletions

View file

@ -168,7 +168,7 @@ export const parseScript = (script, name = 'script.sieve') => {
error = message => {
// throw new SyntaxError(message + ' at ' + regex.lastIndex + ' line ' + line, name, line)
throw new SyntaxError(message + ' on line ' + line
+ ' around: ' + script.substr(regex.lastIndex - 10, 20).replace(/\r\n/g, '\\r\\n'), name, line)
+ ' around:\n\n' + script.substr(regex.lastIndex - 20, 30), name, line)
},
pushArg = arg => {
command || error('Argument not part of command');

View file

@ -3,7 +3,7 @@ import { SieveScriptModel } from 'Sieve/Model/Script';
import { FilterPopupView } from 'Sieve/View/Filter';
//import { parseScript } from 'Sieve/Parser';
import { parseScript } from 'Sieve/Parser';
import {
capa,
@ -18,7 +18,7 @@ export class SieveScriptPopupView extends rl.pluginPopupView {
this.addObservables({
saveError: false,
saveErrorText: '',
errorText: '',
rawActive: false,
allowToggle: false,
script: null
@ -30,6 +30,15 @@ export class SieveScriptPopupView extends rl.pluginPopupView {
this.filterForDeletion = ko.observable(null).askDeleteHelper();
}
validateScript() {
try {
this.errorText('');
parseScript(this.script().body());
} catch (e) {
this.errorText(e.message);
}
}
saveScript() {
let self = this,
script = self.script();
@ -45,6 +54,7 @@ export class SieveScriptPopupView extends rl.pluginPopupView {
self.saving = true;
self.saveError(false);
self.errorText('');
if (self.allowToggle()) {
script.body(script.filtersToRaw());
@ -56,7 +66,7 @@ export class SieveScriptPopupView extends rl.pluginPopupView {
if (iError) {
self.saveError(true);
self.saveErrorText((data && data.ErrorMessageAdditional) || getNotification(iError));
self.errorText((data && data.ErrorMessageAdditional) || getNotification(iError));
} else {
script.exists() || scripts.push(script);
script.exists(true);
@ -125,6 +135,7 @@ export class SieveScriptPopupView extends rl.pluginPopupView {
this.rawActive(raw);
this.allowToggle(!raw);
this.saveError(false);
this.errorText('');
/*
// TODO: Sieve GUI