mirror of
https://github.com/the-djmaze/snappymail.git
synced 2025-01-06 23:07:56 +08:00
82 lines
1.4 KiB
JavaScript
82 lines
1.4 KiB
JavaScript
|
import ko from 'ko';
|
||
|
|
||
|
import { AbstractModel } from 'Knoin/AbstractModel';
|
||
|
import { FilterModel } from 'Model/Filter';
|
||
|
|
||
|
class SieveScriptModel extends AbstractModel
|
||
|
{
|
||
|
constructor() {
|
||
|
super();
|
||
|
|
||
|
this.addObservables({
|
||
|
name: '',
|
||
|
nameError: false,
|
||
|
nameFocused: false,
|
||
|
|
||
|
active: false,
|
||
|
|
||
|
body: '',
|
||
|
|
||
|
deleteAccess: false,
|
||
|
canBeDeleted: false
|
||
|
});
|
||
|
|
||
|
this.filters = ko.observableArray([]);
|
||
|
|
||
|
this.addSubscribables({
|
||
|
name: sValue => this.nameError(!sValue)
|
||
|
});
|
||
|
}
|
||
|
|
||
|
setFilters() {
|
||
|
/*let tree = */window.Sieve.parseScript(this.body);
|
||
|
// this.filters = ko.observableArray(tree);
|
||
|
}
|
||
|
|
||
|
verify() {
|
||
|
if (!this.name()) {
|
||
|
this.nameError(true);
|
||
|
return false;
|
||
|
}
|
||
|
this.nameError(false);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
toJson() {
|
||
|
return {
|
||
|
name: this.name(),
|
||
|
active: this.active ? '1' : '0',
|
||
|
body: this.body,
|
||
|
// filters: this.filters()
|
||
|
};
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Only 'rainloop.user' script supports filters
|
||
|
*/
|
||
|
allowFilters() {
|
||
|
return 'rainloop.user' === this.name();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @static
|
||
|
* @param {FetchJsonScript} json
|
||
|
* @returns {?SieveScriptModel}
|
||
|
*/
|
||
|
static reviveFromJson(json) {
|
||
|
const script = super.reviveFromJson(json);
|
||
|
if (script) {
|
||
|
script.filters([]);
|
||
|
if (script.allowFilters() && Array.isNotEmpty(json.filters)) {
|
||
|
script.filters(
|
||
|
json.filters.map(aData => FilterModel.reviveFromJson(aData)).filter(v => v)
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
return script;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
export { SieveScriptModel, SieveScriptModel as default };
|