diff options
| -rw-r--r-- | ext/bg/js/deinflector.js | 44 | 
1 files changed, 23 insertions, 21 deletions
| diff --git a/ext/bg/js/deinflector.js b/ext/bg/js/deinflector.js index b8646e73..5cfb7f75 100644 --- a/ext/bg/js/deinflector.js +++ b/ext/bg/js/deinflector.js @@ -25,27 +25,27 @@ class Deinflection {          this.reason = reason;      } -    validate(validator) { -        return validator(this.term).then(sets => { -            for (const rules of sets) { -                if (this.rules.length === 0) { -                    return true; -                } +    deinflect(validator, reasons, entry=false) { +        const validate = () => { +            if (entry) { +                return Promise.resolve(true); +            } -                for (const rule of this.rules) { -                    if (rules.includes(rule)) { -                        return true; +            return validator(this.term).then(sets => { +                for (const rules of sets) { +                    for (const rule of this.rules) { +                        if (rules.includes(rule)) { +                            return true; +                        }                      }                  } -            } -            return false; -        }); -    } +                return false; +            }); +        }; -    deinflect(validator, reasons) {          const promises = [ -            this.validate(validator).then(valid => { +            validate().then(valid => {                  const child = new Deinflection(this.term, this.rules);                  this.children.push(child);              }) @@ -53,11 +53,13 @@ class Deinflection {          for (const reason in reasons) {              for (const variant of reasons[reason]) { -                let allowed = this.rules.length === 0; -                for (const rule of this.rules) { -                    if (variant.rulesIn.includes(rule)) { -                        allowed = true; -                        break; +                let allowed = entry; +                if (!allowed) { +                    for (const rule of this.rules) { +                        if (variant.rulesIn.includes(rule)) { +                            allowed = true; +                            break; +                        }                      }                  } @@ -119,6 +121,6 @@ class Deinflector {      deinflect(term, validator) {          const node = new Deinflection(term); -        return node.deinflect(validator, this.reasons).then(success => success ? node.gather() : []); +        return node.deinflect(validator, this.reasons, true).then(success => success ? node.gather() : []);      }  } |