Merge branch 'master' into sieve-gui

# Conflicts:
#	dev/Sieve/Parser.js
This commit is contained in:
the-djmaze 2024-09-23 11:26:36 +02:00
commit 05bc9a60b1
6 changed files with 30 additions and 10 deletions

View file

@ -52,6 +52,8 @@ http {
server { server {
listen 8888; listen 8888;
listen [::]:8888;
#listen [::]:8888 ipv6only=off;
root /snappymail; root /snappymail;
index index.php; index index.php;
charset utf-8; charset utf-8;

View file

@ -45,8 +45,16 @@ export class GrammarString /*extends String*/
/** /**
* abstract * abstract
*/ */
export class GrammarComment extends GrammarString export /*abstract*/ class GrammarComment extends GrammarString
{ {
/*
constructor()
{
if (this.constructor == GrammarComment) {
throw Error("Abstract class can't be instantiated.");
}
}
*/
} }
/** /**

View file

@ -18,6 +18,7 @@ import {
import { import {
GrammarBracketComment, GrammarBracketComment,
GrammarCommand, GrammarCommand,
GrammarComment,
GrammarHashComment, GrammarHashComment,
GrammarMultiLine, GrammarMultiLine,
GrammarNumber, GrammarNumber,
@ -28,7 +29,7 @@ import {
} from 'Sieve/Grammar'; } from 'Sieve/Grammar';
import { availableCommands } from 'Sieve/Commands'; import { availableCommands } from 'Sieve/Commands';
import { ConditionalCommand, RequireCommand } from 'Sieve/Commands/Controls'; import { ConditionalCommand, IfCommand, RequireCommand } from 'Sieve/Commands/Controls';
import { NotTest } from 'Sieve/Commands/Tests'; import { NotTest } from 'Sieve/Commands/Tests';
const const
@ -156,7 +157,17 @@ export const parseScript = (script, name = 'script.sieve') => {
let new_command; let new_command;
if (Commands[value]) { if (Commands[value]) {
if ('elsif' === value || 'else' === value) { if ('elsif' === value || 'else' === value) {
// (prev_command instanceof ConditionalCommand) || error('Not after IF condition'); let valid = false, cmd = (command ? command?.commands : tree), i = cmd?.length;
while (i) {
cmd[--i];
if (cmd[i] instanceof IfCommand) {
valid = true;
break;
} else if (typeof cmd[i] !== 'string' && !(cmd[i] instanceof GrammarComment)) {
break;
}
}
valid || error('Not after IF/ELSIF condition');
} }
if ('allof' === value || 'anyof' === value) { if ('allof' === value || 'anyof' === value) {
// (command instanceof ConditionalCommand || command instanceof NotTest) || error('Test-list not in conditional'); // (command instanceof ConditionalCommand || command instanceof NotTest) || error('Test-list not in conditional');
@ -266,7 +277,6 @@ export const parseScript = (script, name = 'script.sieve') => {
break; break;
case T_BLOCK_END: case T_BLOCK_END:
(command instanceof ConditionalCommand) || error(TokenError[type]); (command instanceof ConditionalCommand) || error(TokenError[type]);
// prev_command = command;
command = levels.up(); command = levels.up();
break; break;

View file

@ -219,9 +219,9 @@
"DISPLAY_NAME": "Nom à afficher", "DISPLAY_NAME": "Nom à afficher",
"LAST_NAME": "Nom", "LAST_NAME": "Nom",
"FIRST_NAME": "Prénom", "FIRST_NAME": "Prénom",
"MIDDLE_NAME": "Middle name", "MIDDLE_NAME": "Deuxième Prénom",
"NAME_PREFIX": "Name prefix", "NAME_PREFIX": "Civilité",
"NAME_SUFFIX": "Name suffix", "NAME_SUFFIX": "Suffix",
"NICK_NAME": "Pseudonyme", "NICK_NAME": "Pseudonyme",
"LABEL_READ_ONLY": "Lecture seule", "LABEL_READ_ONLY": "Lecture seule",
"ADD_MENU_LABEL": "Ajouter", "ADD_MENU_LABEL": "Ajouter",

View file

@ -502,8 +502,8 @@
"IMAGES_OPTION_ALWAYS": "Zawsze pokazuj", "IMAGES_OPTION_ALWAYS": "Zawsze pokazuj",
"IMAGES_WHITELIST": "Biała lista obrazów", "IMAGES_WHITELIST": "Biała lista obrazów",
"MESSAGE_POPUP_WINDOW": "Pokaż w nowym oknie zamiast w nowej karcie", "MESSAGE_POPUP_WINDOW": "Pokaż w nowym oknie zamiast w nowej karcie",
"MAILTO": "Register as 'mailto:' links handler", "MAILTO": "Zarejestruj obsługę linków 'mailto:' jako domyślnego klienta poczty",
"HTML_TO_MD": "Convert HTML to Markdown instead of plain text" "HTML_TO_MD": "Konwertuj HTML na Markdown zamiast zwykłego tekstu"
}, },
"SETTINGS_CONTACTS": { "SETTINGS_CONTACTS": {
"LABEL_CONTACTS_AUTOSAVE": "Automatycznie dodawaj odbiorców do książki adresowej", "LABEL_CONTACTS_AUTOSAVE": "Automatycznie dodawaj odbiorców do książki adresowej",

View file

@ -11,7 +11,7 @@
<div class="control-group" data-bind="css: {'error': nameError}, hidden: exists"> <div class="control-group" data-bind="css: {'error': nameError}, hidden: exists">
<input type="text" class="span5" <input type="text" class="span5"
data-bind="value: name, hasfocus: !exists()" data-bind="value: name"
autocorrect="off" autocapitalize="off" autocorrect="off" autocapitalize="off"
data-i18n="[placeholder]GLOBAL/NAME"> data-i18n="[placeholder]GLOBAL/NAME">
</div> </div>