| 3786 | } |
| 3787 | |
| 3788 | add(filter, env) { |
| 3789 | var key = filter.key.toString(), |
| 3790 | op = filter.op, |
| 3791 | conflict = this.conflict(filter), |
| 3792 | numval; |
| 3793 | if (conflict) {return conflict;} |
| 3794 | |
| 3795 | if (op === '=') { |
| 3796 | for (var i in this.filters) { |
| 3797 | if (this.filters[i].key === key) {delete this.filters[i];} |
| 3798 | } |
| 3799 | this.filters[key + '='] = filter; |
| 3800 | } else if (op === '!=') { |
| 3801 | this.filters[key + '!=' + filter.val] = filter; |
| 3802 | } else if (op === '=~') { |
| 3803 | this.filters[key + '=~' + filter.val] = filter; |
| 3804 | } else if (op === '>') { |
| 3805 | // If there are other filters that are also > |
| 3806 | // but are less than this one, they don't matter, so |
| 3807 | // remove them. |
| 3808 | for (var j in this.filters) { |
| 3809 | if (this.filters[j].key === key && this.filters[j].val <= filter.val) { |
| 3810 | delete this.filters[j]; |
| 3811 | } |
| 3812 | } |
| 3813 | this.filters[key + '>'] = filter; |
| 3814 | } else if (op === '>=') { |
| 3815 | for (var k in this.filters) { |
| 3816 | numval = (+this.filters[k].val.toString()); |
| 3817 | if (this.filters[k].key === key && numval < filter.val) { |
| 3818 | delete this.filters[k]; |
| 3819 | } |
| 3820 | } |
| 3821 | if (this.filters[key + '!=' + filter.val] !== undefined) { |
| 3822 | delete this.filters[key + '!=' + filter.val]; |
| 3823 | filter.op = '>'; |
| 3824 | this.filters[key + '>'] = filter; |
| 3825 | } else { |
| 3826 | this.filters[key + '>='] = filter; |
| 3827 | } |
| 3828 | } else if (op === '<') { |
| 3829 | for (var l in this.filters) { |
| 3830 | numval = (+this.filters[l].val.toString()); |
| 3831 | if (this.filters[l].key === key && numval >= filter.val) { |
| 3832 | delete this.filters[l]; |
| 3833 | } |
| 3834 | } |
| 3835 | this.filters[key + '<'] = filter; |
| 3836 | } else if (op === '<=') { |
| 3837 | for (var m in this.filters) { |
| 3838 | numval = (+this.filters[m].val.toString()); |
| 3839 | if (this.filters[m].key === key && numval > filter.val) { |
| 3840 | delete this.filters[m]; |
| 3841 | } |
| 3842 | } |
| 3843 | if (this.filters[key + '!=' + filter.val] !== undefined) { |
| 3844 | delete this.filters[key + '!=' + filter.val]; |
| 3845 | filter.op = '<'; |