Renaissance
_,,ad8888888888bba,_
,ad88888I888888888888888ba,
,88888888I88888888888888888888a,
,d888888888I8888888888888888888888b,
d88888PP"""" ""YY88888888888888888888b,
,d88"'__,,--------,,,,.;ZZZY8888888888888,
,8IIl'" ;;l"ZZZIII8888888888,
,I88l;' ;lZZZZZ888III8888888,
,II88Zl;. ;llZZZZZ888888I888888,
,II888Zl;. .;;;;;lllZZZ888888I8888b
,II8888Z;; `;;;;;''llZZ8888888I8888,
II88888Z;' .;lZZZ8888888I888b
II88888Z; _,aaa, .,aaaaa,__.l;llZZZ88888888I888
II88888IZZZZZZZZZ, .ZZZZZZZZZZZZZZ;llZZ88888888I888,
II88888IZZ<'(@@>Z| |ZZZ<'(@@>ZZZZ;;llZZ888888888I88I
,II88888; `""" ;| |ZZ; `""" ;;llZ8888888888I888
II888888l `;; .;llZZ8888888888I888,
,II888888Z; ;;; .;;llZZZ8888888888I888I
III888888Zl; .., `;; ,;;lllZZZ88888888888I888
II88888888Z;;...;(_ _) ,;;;llZZZZ88888888888I888,
II88888888Zl;;;;;' `--'Z;. .,;;;;llZZZZ88888888888I888b
]I888888888Z;;;;' ";llllll;..;;;lllZZZZ88888888888I8888,
II888888888Zl.;;"Y88bd888P";;,..;lllZZZZZ88888888888I8888I
II8888888888Zl;.; `"PPP";;;,..;lllZZZZZZZ88888888888I88888
II888888888888Zl;;. `;;;l;;;;lllZZZZZZZZW88888888888I88888
`II8888888888888Zl;. ,;;lllZZZZZZZZWMZ88888888888I88888
II8888888888888888ZbaalllZZZZZZZZZWWMZZZ8888888888I888888,
`II88888888888888888b"WWZZZZZWWWMMZZZZZZI888888888I888888b
`II88888888888888888;ZZMMMMMMZZZZZZZZllI888888888I8888888
`II8888888888888888 `;lZZZZZZZZZZZlllll888888888I8888888,
II8888888888888888, `;lllZZZZllllll;;.Y88888888I8888888b,
,II8888888888888888b .;;lllllll;;;.;..88888888I88888888b,
II888888888888888PZI;. .`;;;.;;;..; ...88888888I8888888888,
II888888888888PZ;;';;. ;. .;. .;. .. Y8888888I88888888888b,
,II888888888PZ;;' `8888888I8888888888888b,
II888888888' 888888I8888888888888888
,II888888888 ,888888I8888888888888888
,d88888888888 d888888I8888888888ZZZZZZ
,ad888888888888I 8888888I8888ZZZZZZZZZZZZ
888888888888888' 888888IZZZZZZZZZZZZZZZZZ
8888888888P'8P' Y888ZZZZZZZZZZZZZZZZZZZZ
888888888, " ,ZZZZZZZZZZZZZZZZZZZZZZZ
8888888888, ,ZZZZZZZZZZZZZZZZZZZZZZZZZZ
888888888888a, _ ,ZZZZZZZZZZZZZZZZZZZZ88888888
888888888888888ba,_d' ,ZZZZZZZZZZZZZZZZZ8888888888888
8888888888888888888888bbbaaa,,,______,ZZZZZZZZZZZZZZZ88888888888888888
88888888888888888888888888888888888ZZZZZZZZZZZZZZZ88888888888888888888
8888888888888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888
888888888888888888888888888888888ZZZZZZZZZZZZZZ88888888888888888888888
8888888888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888888
88888888888888888888888888888ZZZZZZZZZZZZZZ888888888888888888888888888
8888888888888888888888888888ZZZZZZZZZZZZZZ88888888888888888 Normand 8
88888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888 Veilleux 8
8888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888888888888
2015-05-12 19:20:58 +02:00
|
|
|
// Filtered view manager
|
|
|
|
// We define local filter objects for each different type of field (SetFilter,
|
|
|
|
// RangeFilter, dateFilter, etc.). We then define a global `Filter` object whose
|
|
|
|
// goal is to filter complete documents by using the local filters for each
|
|
|
|
// fields.
|
2015-09-03 23:12:46 +02:00
|
|
|
function showFilterSidebar() {
|
2018-08-13 20:01:08 +03:00
|
|
|
Sidebar.setView('filter');
|
2015-09-03 23:12:46 +02:00
|
|
|
}
|
2015-05-26 20:30:01 +02:00
|
|
|
|
Renaissance
_,,ad8888888888bba,_
,ad88888I888888888888888ba,
,88888888I88888888888888888888a,
,d888888888I8888888888888888888888b,
d88888PP"""" ""YY88888888888888888888b,
,d88"'__,,--------,,,,.;ZZZY8888888888888,
,8IIl'" ;;l"ZZZIII8888888888,
,I88l;' ;lZZZZZ888III8888888,
,II88Zl;. ;llZZZZZ888888I888888,
,II888Zl;. .;;;;;lllZZZ888888I8888b
,II8888Z;; `;;;;;''llZZ8888888I8888,
II88888Z;' .;lZZZ8888888I888b
II88888Z; _,aaa, .,aaaaa,__.l;llZZZ88888888I888
II88888IZZZZZZZZZ, .ZZZZZZZZZZZZZZ;llZZ88888888I888,
II88888IZZ<'(@@>Z| |ZZZ<'(@@>ZZZZ;;llZZ888888888I88I
,II88888; `""" ;| |ZZ; `""" ;;llZ8888888888I888
II888888l `;; .;llZZ8888888888I888,
,II888888Z; ;;; .;;llZZZ8888888888I888I
III888888Zl; .., `;; ,;;lllZZZ88888888888I888
II88888888Z;;...;(_ _) ,;;;llZZZZ88888888888I888,
II88888888Zl;;;;;' `--'Z;. .,;;;;llZZZZ88888888888I888b
]I888888888Z;;;;' ";llllll;..;;;lllZZZZ88888888888I8888,
II888888888Zl.;;"Y88bd888P";;,..;lllZZZZZ88888888888I8888I
II8888888888Zl;.; `"PPP";;;,..;lllZZZZZZZ88888888888I88888
II888888888888Zl;;. `;;;l;;;;lllZZZZZZZZW88888888888I88888
`II8888888888888Zl;. ,;;lllZZZZZZZZWMZ88888888888I88888
II8888888888888888ZbaalllZZZZZZZZZWWMZZZ8888888888I888888,
`II88888888888888888b"WWZZZZZWWWMMZZZZZZI888888888I888888b
`II88888888888888888;ZZMMMMMMZZZZZZZZllI888888888I8888888
`II8888888888888888 `;lZZZZZZZZZZZlllll888888888I8888888,
II8888888888888888, `;lllZZZZllllll;;.Y88888888I8888888b,
,II8888888888888888b .;;lllllll;;;.;..88888888I88888888b,
II888888888888888PZI;. .`;;;.;;;..; ...88888888I8888888888,
II888888888888PZ;;';;. ;. .;. .;. .. Y8888888I88888888888b,
,II888888888PZ;;' `8888888I8888888888888b,
II888888888' 888888I8888888888888888
,II888888888 ,888888I8888888888888888
,d88888888888 d888888I8888888888ZZZZZZ
,ad888888888888I 8888888I8888ZZZZZZZZZZZZ
888888888888888' 888888IZZZZZZZZZZZZZZZZZ
8888888888P'8P' Y888ZZZZZZZZZZZZZZZZZZZZ
888888888, " ,ZZZZZZZZZZZZZZZZZZZZZZZ
8888888888, ,ZZZZZZZZZZZZZZZZZZZZZZZZZZ
888888888888a, _ ,ZZZZZZZZZZZZZZZZZZZZ88888888
888888888888888ba,_d' ,ZZZZZZZZZZZZZZZZZ8888888888888
8888888888888888888888bbbaaa,,,______,ZZZZZZZZZZZZZZZ88888888888888888
88888888888888888888888888888888888ZZZZZZZZZZZZZZZ88888888888888888888
8888888888888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888
888888888888888888888888888888888ZZZZZZZZZZZZZZ88888888888888888888888
8888888888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888888
88888888888888888888888888888ZZZZZZZZZZZZZZ888888888888888888888888888
8888888888888888888888888888ZZZZZZZZZZZZZZ88888888888888888 Normand 8
88888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888 Veilleux 8
8888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888888888888
2015-05-12 19:20:58 +02:00
|
|
|
// Use a "set" filter for a field that is a set of documents uniquely
|
|
|
|
// identified. For instance `{ labels: ['labelA', 'labelC', 'labelD'] }`.
|
2018-05-19 15:21:12 +02:00
|
|
|
// use "subField" for searching inside object Fields.
|
2018-05-19 16:06:06 +02:00
|
|
|
// For instance '{ 'customFields._id': ['field1','field2']} (subField would be: _id)
|
2015-09-03 23:12:46 +02:00
|
|
|
class SetFilter {
|
2018-08-13 20:01:08 +03:00
|
|
|
constructor(subField = '') {
|
|
|
|
this._dep = new Tracker.Dependency();
|
|
|
|
this._selectedElements = [];
|
|
|
|
this.subField = subField;
|
|
|
|
}
|
|
|
|
|
|
|
|
isSelected(val) {
|
|
|
|
this._dep.depend();
|
|
|
|
return this._selectedElements.indexOf(val) > -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
add(val) {
|
|
|
|
if (this._indexOfVal(val) === -1) {
|
|
|
|
this._selectedElements.push(val);
|
|
|
|
this._dep.changed();
|
|
|
|
showFilterSidebar();
|
2018-08-12 17:32:53 +03:00
|
|
|
}
|
2018-08-13 20:01:08 +03:00
|
|
|
}
|
2018-08-12 17:32:53 +03:00
|
|
|
|
2018-08-13 20:01:08 +03:00
|
|
|
remove(val) {
|
|
|
|
const indexOfVal = this._indexOfVal(val);
|
|
|
|
if (this._indexOfVal(val) !== -1) {
|
|
|
|
this._selectedElements.splice(indexOfVal, 1);
|
|
|
|
this._dep.changed();
|
2018-08-12 17:32:53 +03:00
|
|
|
}
|
2018-08-13 20:01:08 +03:00
|
|
|
}
|
2018-08-12 17:32:53 +03:00
|
|
|
|
2018-08-13 20:01:08 +03:00
|
|
|
toggle(val) {
|
|
|
|
if (this._indexOfVal(val) === -1) {
|
|
|
|
this.add(val);
|
|
|
|
} else {
|
|
|
|
this.remove(val);
|
Renaissance
_,,ad8888888888bba,_
,ad88888I888888888888888ba,
,88888888I88888888888888888888a,
,d888888888I8888888888888888888888b,
d88888PP"""" ""YY88888888888888888888b,
,d88"'__,,--------,,,,.;ZZZY8888888888888,
,8IIl'" ;;l"ZZZIII8888888888,
,I88l;' ;lZZZZZ888III8888888,
,II88Zl;. ;llZZZZZ888888I888888,
,II888Zl;. .;;;;;lllZZZ888888I8888b
,II8888Z;; `;;;;;''llZZ8888888I8888,
II88888Z;' .;lZZZ8888888I888b
II88888Z; _,aaa, .,aaaaa,__.l;llZZZ88888888I888
II88888IZZZZZZZZZ, .ZZZZZZZZZZZZZZ;llZZ88888888I888,
II88888IZZ<'(@@>Z| |ZZZ<'(@@>ZZZZ;;llZZ888888888I88I
,II88888; `""" ;| |ZZ; `""" ;;llZ8888888888I888
II888888l `;; .;llZZ8888888888I888,
,II888888Z; ;;; .;;llZZZ8888888888I888I
III888888Zl; .., `;; ,;;lllZZZ88888888888I888
II88888888Z;;...;(_ _) ,;;;llZZZZ88888888888I888,
II88888888Zl;;;;;' `--'Z;. .,;;;;llZZZZ88888888888I888b
]I888888888Z;;;;' ";llllll;..;;;lllZZZZ88888888888I8888,
II888888888Zl.;;"Y88bd888P";;,..;lllZZZZZ88888888888I8888I
II8888888888Zl;.; `"PPP";;;,..;lllZZZZZZZ88888888888I88888
II888888888888Zl;;. `;;;l;;;;lllZZZZZZZZW88888888888I88888
`II8888888888888Zl;. ,;;lllZZZZZZZZWMZ88888888888I88888
II8888888888888888ZbaalllZZZZZZZZZWWMZZZ8888888888I888888,
`II88888888888888888b"WWZZZZZWWWMMZZZZZZI888888888I888888b
`II88888888888888888;ZZMMMMMMZZZZZZZZllI888888888I8888888
`II8888888888888888 `;lZZZZZZZZZZZlllll888888888I8888888,
II8888888888888888, `;lllZZZZllllll;;.Y88888888I8888888b,
,II8888888888888888b .;;lllllll;;;.;..88888888I88888888b,
II888888888888888PZI;. .`;;;.;;;..; ...88888888I8888888888,
II888888888888PZ;;';;. ;. .;. .;. .. Y8888888I88888888888b,
,II888888888PZ;;' `8888888I8888888888888b,
II888888888' 888888I8888888888888888
,II888888888 ,888888I8888888888888888
,d88888888888 d888888I8888888888ZZZZZZ
,ad888888888888I 8888888I8888ZZZZZZZZZZZZ
888888888888888' 888888IZZZZZZZZZZZZZZZZZ
8888888888P'8P' Y888ZZZZZZZZZZZZZZZZZZZZ
888888888, " ,ZZZZZZZZZZZZZZZZZZZZZZZ
8888888888, ,ZZZZZZZZZZZZZZZZZZZZZZZZZZ
888888888888a, _ ,ZZZZZZZZZZZZZZZZZZZZ88888888
888888888888888ba,_d' ,ZZZZZZZZZZZZZZZZZ8888888888888
8888888888888888888888bbbaaa,,,______,ZZZZZZZZZZZZZZZ88888888888888888
88888888888888888888888888888888888ZZZZZZZZZZZZZZZ88888888888888888888
8888888888888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888
888888888888888888888888888888888ZZZZZZZZZZZZZZ88888888888888888888888
8888888888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888888
88888888888888888888888888888ZZZZZZZZZZZZZZ888888888888888888888888888
8888888888888888888888888888ZZZZZZZZZZZZZZ88888888888888888 Normand 8
88888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888 Veilleux 8
8888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888888888888
2015-05-12 19:20:58 +02:00
|
|
|
}
|
2018-08-13 20:01:08 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
reset() {
|
|
|
|
this._selectedElements = [];
|
|
|
|
this._dep.changed();
|
|
|
|
}
|
|
|
|
|
|
|
|
_indexOfVal(val) {
|
|
|
|
return this._selectedElements.indexOf(val);
|
|
|
|
}
|
|
|
|
|
|
|
|
_isActive() {
|
|
|
|
this._dep.depend();
|
|
|
|
return this._selectedElements.length !== 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
_getMongoSelector() {
|
|
|
|
this._dep.depend();
|
|
|
|
return {
|
|
|
|
$in: this._selectedElements,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
_getEmptySelector() {
|
|
|
|
this._dep.depend();
|
|
|
|
let includeEmpty = false;
|
2019-06-28 12:52:09 -05:00
|
|
|
this._selectedElements.forEach(el => {
|
2018-08-13 20:01:08 +03:00
|
|
|
if (el === undefined) {
|
|
|
|
includeEmpty = true;
|
|
|
|
}
|
|
|
|
});
|
2019-06-28 12:52:09 -05:00
|
|
|
return includeEmpty
|
|
|
|
? {
|
|
|
|
$eq: [],
|
|
|
|
}
|
|
|
|
: null;
|
2018-08-13 20:01:08 +03:00
|
|
|
}
|
2015-09-03 23:12:46 +02:00
|
|
|
}
|
Renaissance
_,,ad8888888888bba,_
,ad88888I888888888888888ba,
,88888888I88888888888888888888a,
,d888888888I8888888888888888888888b,
d88888PP"""" ""YY88888888888888888888b,
,d88"'__,,--------,,,,.;ZZZY8888888888888,
,8IIl'" ;;l"ZZZIII8888888888,
,I88l;' ;lZZZZZ888III8888888,
,II88Zl;. ;llZZZZZ888888I888888,
,II888Zl;. .;;;;;lllZZZ888888I8888b
,II8888Z;; `;;;;;''llZZ8888888I8888,
II88888Z;' .;lZZZ8888888I888b
II88888Z; _,aaa, .,aaaaa,__.l;llZZZ88888888I888
II88888IZZZZZZZZZ, .ZZZZZZZZZZZZZZ;llZZ88888888I888,
II88888IZZ<'(@@>Z| |ZZZ<'(@@>ZZZZ;;llZZ888888888I88I
,II88888; `""" ;| |ZZ; `""" ;;llZ8888888888I888
II888888l `;; .;llZZ8888888888I888,
,II888888Z; ;;; .;;llZZZ8888888888I888I
III888888Zl; .., `;; ,;;lllZZZ88888888888I888
II88888888Z;;...;(_ _) ,;;;llZZZZ88888888888I888,
II88888888Zl;;;;;' `--'Z;. .,;;;;llZZZZ88888888888I888b
]I888888888Z;;;;' ";llllll;..;;;lllZZZZ88888888888I8888,
II888888888Zl.;;"Y88bd888P";;,..;lllZZZZZ88888888888I8888I
II8888888888Zl;.; `"PPP";;;,..;lllZZZZZZZ88888888888I88888
II888888888888Zl;;. `;;;l;;;;lllZZZZZZZZW88888888888I88888
`II8888888888888Zl;. ,;;lllZZZZZZZZWMZ88888888888I88888
II8888888888888888ZbaalllZZZZZZZZZWWMZZZ8888888888I888888,
`II88888888888888888b"WWZZZZZWWWMMZZZZZZI888888888I888888b
`II88888888888888888;ZZMMMMMMZZZZZZZZllI888888888I8888888
`II8888888888888888 `;lZZZZZZZZZZZlllll888888888I8888888,
II8888888888888888, `;lllZZZZllllll;;.Y88888888I8888888b,
,II8888888888888888b .;;lllllll;;;.;..88888888I88888888b,
II888888888888888PZI;. .`;;;.;;;..; ...88888888I8888888888,
II888888888888PZ;;';;. ;. .;. .;. .. Y8888888I88888888888b,
,II888888888PZ;;' `8888888I8888888888888b,
II888888888' 888888I8888888888888888
,II888888888 ,888888I8888888888888888
,d88888888888 d888888I8888888888ZZZZZZ
,ad888888888888I 8888888I8888ZZZZZZZZZZZZ
888888888888888' 888888IZZZZZZZZZZZZZZZZZ
8888888888P'8P' Y888ZZZZZZZZZZZZZZZZZZZZ
888888888, " ,ZZZZZZZZZZZZZZZZZZZZZZZ
8888888888, ,ZZZZZZZZZZZZZZZZZZZZZZZZZZ
888888888888a, _ ,ZZZZZZZZZZZZZZZZZZZZ88888888
888888888888888ba,_d' ,ZZZZZZZZZZZZZZZZZ8888888888888
8888888888888888888888bbbaaa,,,______,ZZZZZZZZZZZZZZZ88888888888888888
88888888888888888888888888888888888ZZZZZZZZZZZZZZZ88888888888888888888
8888888888888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888
888888888888888888888888888888888ZZZZZZZZZZZZZZ88888888888888888888888
8888888888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888888
88888888888888888888888888888ZZZZZZZZZZZZZZ888888888888888888888888888
8888888888888888888888888888ZZZZZZZZZZZZZZ88888888888888888 Normand 8
88888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888 Veilleux 8
8888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888888888888
2015-05-12 19:20:58 +02:00
|
|
|
|
2018-05-19 18:38:48 +02:00
|
|
|
// Advanced filter forms a MongoSelector from a users String.
|
|
|
|
// Build by: Ignatz 19.05.2018 (github feuerball11)
|
|
|
|
class AdvancedFilter {
|
2018-08-13 20:01:08 +03:00
|
|
|
constructor() {
|
|
|
|
this._dep = new Tracker.Dependency();
|
|
|
|
this._filter = '';
|
|
|
|
this._lastValide = {};
|
|
|
|
}
|
|
|
|
|
|
|
|
set(str) {
|
|
|
|
this._filter = str;
|
|
|
|
this._dep.changed();
|
|
|
|
}
|
|
|
|
|
|
|
|
reset() {
|
|
|
|
this._filter = '';
|
|
|
|
this._lastValide = {};
|
|
|
|
this._dep.changed();
|
|
|
|
}
|
|
|
|
|
|
|
|
_isActive() {
|
|
|
|
this._dep.depend();
|
|
|
|
return this._filter !== '';
|
|
|
|
}
|
|
|
|
|
|
|
|
_filterToCommands() {
|
|
|
|
const commands = [];
|
|
|
|
let current = '';
|
|
|
|
let string = false;
|
|
|
|
let regex = false;
|
|
|
|
let wasString = false;
|
|
|
|
let ignore = false;
|
|
|
|
for (let i = 0; i < this._filter.length; i++) {
|
|
|
|
const char = this._filter.charAt(i);
|
|
|
|
if (ignore) {
|
|
|
|
ignore = false;
|
|
|
|
current += char;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (char === '/') {
|
|
|
|
string = !string;
|
|
|
|
if (string) regex = true;
|
|
|
|
current += char;
|
|
|
|
continue;
|
|
|
|
}
|
2019-06-28 12:52:09 -05:00
|
|
|
// eslint-disable-next-line quotes
|
|
|
|
if (char === "'") {
|
2018-08-13 20:01:08 +03:00
|
|
|
string = !string;
|
|
|
|
if (string) wasString = true;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (char === '\\' && !string) {
|
|
|
|
ignore = true;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (char === ' ' && !string) {
|
|
|
|
commands.push({
|
2019-06-28 12:52:09 -05:00
|
|
|
cmd: current,
|
|
|
|
string: wasString,
|
2018-08-13 20:01:08 +03:00
|
|
|
regex,
|
|
|
|
});
|
|
|
|
wasString = false;
|
|
|
|
current = '';
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
current += char;
|
2018-05-19 18:38:48 +02:00
|
|
|
}
|
2018-08-13 20:01:08 +03:00
|
|
|
if (current !== '') {
|
|
|
|
commands.push({
|
2019-06-28 12:52:09 -05:00
|
|
|
cmd: current,
|
|
|
|
string: wasString,
|
2018-08-13 20:01:08 +03:00
|
|
|
regex,
|
|
|
|
});
|
2018-05-19 18:38:48 +02:00
|
|
|
}
|
2018-08-13 20:01:08 +03:00
|
|
|
return commands;
|
|
|
|
}
|
|
|
|
|
|
|
|
_fieldNameToId(field) {
|
|
|
|
const found = CustomFields.findOne({
|
2019-06-28 12:52:09 -05:00
|
|
|
name: field,
|
2018-08-13 20:01:08 +03:00
|
|
|
});
|
|
|
|
return found._id;
|
|
|
|
}
|
|
|
|
|
|
|
|
_fieldValueToId(field, value) {
|
|
|
|
const found = CustomFields.findOne({
|
2019-06-28 12:52:09 -05:00
|
|
|
name: field,
|
2018-08-13 20:01:08 +03:00
|
|
|
});
|
2019-06-28 12:52:09 -05:00
|
|
|
if (
|
|
|
|
found.settings.dropdownItems &&
|
|
|
|
found.settings.dropdownItems.length > 0
|
|
|
|
) {
|
2018-08-13 20:01:08 +03:00
|
|
|
for (let i = 0; i < found.settings.dropdownItems.length; i++) {
|
|
|
|
if (found.settings.dropdownItems[i].name === value) {
|
|
|
|
return found.settings.dropdownItems[i]._id;
|
|
|
|
}
|
|
|
|
}
|
2018-06-14 12:41:16 +02:00
|
|
|
}
|
2018-08-13 20:01:08 +03:00
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
_arrayToSelector(commands) {
|
|
|
|
try {
|
|
|
|
//let changed = false;
|
|
|
|
this._processSubCommands(commands);
|
|
|
|
} catch (e) {
|
|
|
|
return this._lastValide;
|
2018-05-20 09:47:20 +02:00
|
|
|
}
|
2018-08-13 20:01:08 +03:00
|
|
|
this._lastValide = {
|
|
|
|
$or: commands,
|
|
|
|
};
|
|
|
|
return {
|
|
|
|
$or: commands,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
_processSubCommands(commands) {
|
|
|
|
const subcommands = [];
|
|
|
|
let level = 0;
|
|
|
|
let start = -1;
|
|
|
|
for (let i = 0; i < commands.length; i++) {
|
|
|
|
if (commands[i].cmd) {
|
|
|
|
switch (commands[i].cmd) {
|
2019-06-28 12:52:09 -05:00
|
|
|
case '(': {
|
|
|
|
level++;
|
|
|
|
if (start === -1) start = i;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
case ')': {
|
|
|
|
level--;
|
2018-08-13 20:01:08 +03:00
|
|
|
commands.splice(i, 1);
|
|
|
|
i--;
|
|
|
|
continue;
|
|
|
|
}
|
2019-06-28 12:52:09 -05:00
|
|
|
default: {
|
|
|
|
if (level > 0) {
|
|
|
|
subcommands.push(commands[i]);
|
|
|
|
commands.splice(i, 1);
|
|
|
|
i--;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
2018-05-20 09:47:20 +02:00
|
|
|
}
|
2018-08-13 20:01:08 +03:00
|
|
|
}
|
2018-05-20 09:47:20 +02:00
|
|
|
}
|
2018-08-13 20:01:08 +03:00
|
|
|
if (start !== -1) {
|
|
|
|
this._processSubCommands(subcommands);
|
2019-06-28 12:52:09 -05:00
|
|
|
if (subcommands.length === 1) commands.splice(start, 0, subcommands[0]);
|
|
|
|
else commands.splice(start, 0, subcommands);
|
2018-08-13 20:01:08 +03:00
|
|
|
}
|
|
|
|
this._processConditions(commands);
|
|
|
|
this._processLogicalOperators(commands);
|
|
|
|
}
|
|
|
|
|
|
|
|
_processConditions(commands) {
|
|
|
|
for (let i = 0; i < commands.length; i++) {
|
|
|
|
if (!commands[i].string && commands[i].cmd) {
|
|
|
|
switch (commands[i].cmd) {
|
2019-06-28 12:52:09 -05:00
|
|
|
case '=':
|
|
|
|
case '==':
|
|
|
|
case '===': {
|
|
|
|
const field = commands[i - 1].cmd;
|
|
|
|
const str = commands[i + 1].cmd;
|
|
|
|
if (commands[i + 1].regex) {
|
|
|
|
const match = str.match(new RegExp('^/(.*?)/([gimy]*)$'));
|
|
|
|
let regex = null;
|
|
|
|
if (match.length > 2) regex = new RegExp(match[1], match[2]);
|
|
|
|
else regex = new RegExp(match[1]);
|
|
|
|
commands[i] = {
|
|
|
|
'customFields._id': this._fieldNameToId(field),
|
|
|
|
'customFields.value': regex,
|
|
|
|
};
|
|
|
|
} else {
|
|
|
|
commands[i] = {
|
|
|
|
'customFields._id': this._fieldNameToId(field),
|
|
|
|
'customFields.value': {
|
|
|
|
$in: [this._fieldValueToId(field, str), parseInt(str, 10)],
|
|
|
|
},
|
|
|
|
};
|
|
|
|
}
|
|
|
|
commands.splice(i - 1, 1);
|
|
|
|
commands.splice(i, 1);
|
|
|
|
//changed = true;
|
|
|
|
i--;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case '!=':
|
|
|
|
case '!==': {
|
|
|
|
const field = commands[i - 1].cmd;
|
|
|
|
const str = commands[i + 1].cmd;
|
|
|
|
if (commands[i + 1].regex) {
|
|
|
|
const match = str.match(new RegExp('^/(.*?)/([gimy]*)$'));
|
|
|
|
let regex = null;
|
|
|
|
if (match.length > 2) regex = new RegExp(match[1], match[2]);
|
|
|
|
else regex = new RegExp(match[1]);
|
|
|
|
commands[i] = {
|
|
|
|
'customFields._id': this._fieldNameToId(field),
|
|
|
|
'customFields.value': {
|
|
|
|
$not: regex,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
} else {
|
|
|
|
commands[i] = {
|
|
|
|
'customFields._id': this._fieldNameToId(field),
|
|
|
|
'customFields.value': {
|
|
|
|
$not: {
|
|
|
|
$in: [this._fieldValueToId(field, str), parseInt(str, 10)],
|
|
|
|
},
|
|
|
|
},
|
|
|
|
};
|
|
|
|
}
|
|
|
|
commands.splice(i - 1, 1);
|
|
|
|
commands.splice(i, 1);
|
|
|
|
//changed = true;
|
|
|
|
i--;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case '>':
|
|
|
|
case 'gt':
|
|
|
|
case 'Gt':
|
|
|
|
case 'GT': {
|
|
|
|
const field = commands[i - 1].cmd;
|
|
|
|
const str = commands[i + 1].cmd;
|
2018-08-13 20:01:08 +03:00
|
|
|
commands[i] = {
|
|
|
|
'customFields._id': this._fieldNameToId(field),
|
2019-06-28 12:52:09 -05:00
|
|
|
'customFields.value': {
|
|
|
|
$gt: parseInt(str, 10),
|
|
|
|
},
|
2018-08-13 20:01:08 +03:00
|
|
|
};
|
2019-06-28 12:52:09 -05:00
|
|
|
commands.splice(i - 1, 1);
|
|
|
|
commands.splice(i, 1);
|
|
|
|
//changed = true;
|
|
|
|
i--;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case '>=':
|
|
|
|
case '>==':
|
|
|
|
case 'gte':
|
|
|
|
case 'Gte':
|
|
|
|
case 'GTE': {
|
|
|
|
const field = commands[i - 1].cmd;
|
|
|
|
const str = commands[i + 1].cmd;
|
2018-08-13 20:01:08 +03:00
|
|
|
commands[i] = {
|
|
|
|
'customFields._id': this._fieldNameToId(field),
|
|
|
|
'customFields.value': {
|
2019-06-28 12:52:09 -05:00
|
|
|
$gte: parseInt(str, 10),
|
2018-08-13 20:01:08 +03:00
|
|
|
},
|
|
|
|
};
|
2019-06-28 12:52:09 -05:00
|
|
|
commands.splice(i - 1, 1);
|
|
|
|
commands.splice(i, 1);
|
|
|
|
//changed = true;
|
|
|
|
i--;
|
|
|
|
break;
|
2018-08-13 20:01:08 +03:00
|
|
|
}
|
2019-06-28 12:52:09 -05:00
|
|
|
case '<':
|
|
|
|
case 'lt':
|
|
|
|
case 'Lt':
|
|
|
|
case 'LT': {
|
|
|
|
const field = commands[i - 1].cmd;
|
|
|
|
const str = commands[i + 1].cmd;
|
2018-08-13 20:01:08 +03:00
|
|
|
commands[i] = {
|
|
|
|
'customFields._id': this._fieldNameToId(field),
|
|
|
|
'customFields.value': {
|
2019-06-28 12:52:09 -05:00
|
|
|
$lt: parseInt(str, 10),
|
2018-08-13 20:01:08 +03:00
|
|
|
},
|
|
|
|
};
|
2019-06-28 12:52:09 -05:00
|
|
|
commands.splice(i - 1, 1);
|
|
|
|
commands.splice(i, 1);
|
|
|
|
//changed = true;
|
|
|
|
i--;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case '<=':
|
|
|
|
case '<==':
|
|
|
|
case 'lte':
|
|
|
|
case 'Lte':
|
|
|
|
case 'LTE': {
|
|
|
|
const field = commands[i - 1].cmd;
|
|
|
|
const str = commands[i + 1].cmd;
|
2018-08-13 20:01:08 +03:00
|
|
|
commands[i] = {
|
|
|
|
'customFields._id': this._fieldNameToId(field),
|
|
|
|
'customFields.value': {
|
2019-06-28 12:52:09 -05:00
|
|
|
$lte: parseInt(str, 10),
|
2018-08-13 20:01:08 +03:00
|
|
|
},
|
|
|
|
};
|
2019-06-28 12:52:09 -05:00
|
|
|
commands.splice(i - 1, 1);
|
|
|
|
commands.splice(i, 1);
|
|
|
|
//changed = true;
|
|
|
|
i--;
|
|
|
|
break;
|
2018-08-13 20:01:08 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-08-12 17:32:53 +03:00
|
|
|
}
|
2018-08-13 20:01:08 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
_processLogicalOperators(commands) {
|
|
|
|
for (let i = 0; i < commands.length; i++) {
|
|
|
|
if (!commands[i].string && commands[i].cmd) {
|
|
|
|
switch (commands[i].cmd) {
|
2019-06-28 12:52:09 -05:00
|
|
|
case 'or':
|
|
|
|
case 'Or':
|
|
|
|
case 'OR':
|
|
|
|
case '|':
|
|
|
|
case '||': {
|
|
|
|
const op1 = commands[i - 1];
|
|
|
|
const op2 = commands[i + 1];
|
|
|
|
commands[i] = {
|
|
|
|
$or: [op1, op2],
|
|
|
|
};
|
|
|
|
commands.splice(i - 1, 1);
|
|
|
|
commands.splice(i, 1);
|
|
|
|
//changed = true;
|
|
|
|
i--;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 'and':
|
|
|
|
case 'And':
|
|
|
|
case 'AND':
|
|
|
|
case '&':
|
|
|
|
case '&&': {
|
|
|
|
const op1 = commands[i - 1];
|
|
|
|
const op2 = commands[i + 1];
|
|
|
|
commands[i] = {
|
|
|
|
$and: [op1, op2],
|
|
|
|
};
|
|
|
|
commands.splice(i - 1, 1);
|
|
|
|
commands.splice(i, 1);
|
|
|
|
//changed = true;
|
|
|
|
i--;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 'not':
|
|
|
|
case 'Not':
|
|
|
|
case 'NOT':
|
|
|
|
case '!': {
|
|
|
|
const op1 = commands[i + 1];
|
|
|
|
commands[i] = {
|
|
|
|
$not: op1,
|
|
|
|
};
|
|
|
|
commands.splice(i + 1, 1);
|
|
|
|
//changed = true;
|
|
|
|
i--;
|
|
|
|
break;
|
|
|
|
}
|
2018-08-13 20:01:08 +03:00
|
|
|
}
|
|
|
|
}
|
2018-05-19 18:38:48 +02:00
|
|
|
}
|
2018-08-13 20:01:08 +03:00
|
|
|
}
|
2018-05-19 18:38:48 +02:00
|
|
|
|
2018-08-13 20:01:08 +03:00
|
|
|
_getMongoSelector() {
|
|
|
|
this._dep.depend();
|
|
|
|
const commands = this._filterToCommands();
|
|
|
|
return this._arrayToSelector(commands);
|
|
|
|
}
|
2019-10-18 16:44:09 -04:00
|
|
|
getRegexSelector() {
|
|
|
|
// generate a regex for filter list
|
|
|
|
this._dep.depend();
|
|
|
|
return new RegExp(
|
|
|
|
`^.*${this._filter.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}.*$`,
|
|
|
|
'i',
|
|
|
|
);
|
|
|
|
}
|
2018-05-19 18:38:48 +02:00
|
|
|
}
|
|
|
|
|
Renaissance
_,,ad8888888888bba,_
,ad88888I888888888888888ba,
,88888888I88888888888888888888a,
,d888888888I8888888888888888888888b,
d88888PP"""" ""YY88888888888888888888b,
,d88"'__,,--------,,,,.;ZZZY8888888888888,
,8IIl'" ;;l"ZZZIII8888888888,
,I88l;' ;lZZZZZ888III8888888,
,II88Zl;. ;llZZZZZ888888I888888,
,II888Zl;. .;;;;;lllZZZ888888I8888b
,II8888Z;; `;;;;;''llZZ8888888I8888,
II88888Z;' .;lZZZ8888888I888b
II88888Z; _,aaa, .,aaaaa,__.l;llZZZ88888888I888
II88888IZZZZZZZZZ, .ZZZZZZZZZZZZZZ;llZZ88888888I888,
II88888IZZ<'(@@>Z| |ZZZ<'(@@>ZZZZ;;llZZ888888888I88I
,II88888; `""" ;| |ZZ; `""" ;;llZ8888888888I888
II888888l `;; .;llZZ8888888888I888,
,II888888Z; ;;; .;;llZZZ8888888888I888I
III888888Zl; .., `;; ,;;lllZZZ88888888888I888
II88888888Z;;...;(_ _) ,;;;llZZZZ88888888888I888,
II88888888Zl;;;;;' `--'Z;. .,;;;;llZZZZ88888888888I888b
]I888888888Z;;;;' ";llllll;..;;;lllZZZZ88888888888I8888,
II888888888Zl.;;"Y88bd888P";;,..;lllZZZZZ88888888888I8888I
II8888888888Zl;.; `"PPP";;;,..;lllZZZZZZZ88888888888I88888
II888888888888Zl;;. `;;;l;;;;lllZZZZZZZZW88888888888I88888
`II8888888888888Zl;. ,;;lllZZZZZZZZWMZ88888888888I88888
II8888888888888888ZbaalllZZZZZZZZZWWMZZZ8888888888I888888,
`II88888888888888888b"WWZZZZZWWWMMZZZZZZI888888888I888888b
`II88888888888888888;ZZMMMMMMZZZZZZZZllI888888888I8888888
`II8888888888888888 `;lZZZZZZZZZZZlllll888888888I8888888,
II8888888888888888, `;lllZZZZllllll;;.Y88888888I8888888b,
,II8888888888888888b .;;lllllll;;;.;..88888888I88888888b,
II888888888888888PZI;. .`;;;.;;;..; ...88888888I8888888888,
II888888888888PZ;;';;. ;. .;. .;. .. Y8888888I88888888888b,
,II888888888PZ;;' `8888888I8888888888888b,
II888888888' 888888I8888888888888888
,II888888888 ,888888I8888888888888888
,d88888888888 d888888I8888888888ZZZZZZ
,ad888888888888I 8888888I8888ZZZZZZZZZZZZ
888888888888888' 888888IZZZZZZZZZZZZZZZZZ
8888888888P'8P' Y888ZZZZZZZZZZZZZZZZZZZZ
888888888, " ,ZZZZZZZZZZZZZZZZZZZZZZZ
8888888888, ,ZZZZZZZZZZZZZZZZZZZZZZZZZZ
888888888888a, _ ,ZZZZZZZZZZZZZZZZZZZZ88888888
888888888888888ba,_d' ,ZZZZZZZZZZZZZZZZZ8888888888888
8888888888888888888888bbbaaa,,,______,ZZZZZZZZZZZZZZZ88888888888888888
88888888888888888888888888888888888ZZZZZZZZZZZZZZZ88888888888888888888
8888888888888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888
888888888888888888888888888888888ZZZZZZZZZZZZZZ88888888888888888888888
8888888888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888888
88888888888888888888888888888ZZZZZZZZZZZZZZ888888888888888888888888888
8888888888888888888888888888ZZZZZZZZZZZZZZ88888888888888888 Normand 8
88888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888 Veilleux 8
8888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888888888888
2015-05-12 19:20:58 +02:00
|
|
|
// The global Filter object.
|
|
|
|
// XXX It would be possible to re-write this object more elegantly, and removing
|
|
|
|
// the need to provide a list of `_fields`. We also should move methods into the
|
|
|
|
// object prototype.
|
|
|
|
Filter = {
|
2018-08-13 20:01:08 +03:00
|
|
|
// XXX I would like to rename this field into `labels` to be consistent with
|
|
|
|
// the rest of the schema, but we need to set some migrations architecture
|
|
|
|
// before changing the schema.
|
|
|
|
labelIds: new SetFilter(),
|
|
|
|
members: new SetFilter(),
|
2019-08-07 07:58:05 +00:00
|
|
|
archive: new SetFilter(),
|
|
|
|
hideEmpty: new SetFilter(),
|
2018-08-13 20:01:08 +03:00
|
|
|
customFields: new SetFilter('_id'),
|
|
|
|
advanced: new AdvancedFilter(),
|
2019-10-18 16:44:09 -04:00
|
|
|
lists: new AdvancedFilter(), // we need the ability to filter list by name as well
|
2018-08-13 20:01:08 +03:00
|
|
|
|
2019-10-18 18:06:34 -04:00
|
|
|
_fields: ['labelIds', 'members', 'archive', 'hideEmpty', 'customFields'],
|
2018-08-13 20:01:08 +03:00
|
|
|
|
|
|
|
// We don't filter cards that have been added after the last filter change. To
|
|
|
|
// implement this we keep the id of these cards in this `_exceptions` fields
|
|
|
|
// and use a `$or` condition in the mongo selector we return.
|
|
|
|
_exceptions: [],
|
|
|
|
_exceptionsDep: new Tracker.Dependency(),
|
|
|
|
|
|
|
|
isActive() {
|
2019-06-28 12:52:09 -05:00
|
|
|
return (
|
|
|
|
_.any(this._fields, fieldName => {
|
|
|
|
return this[fieldName]._isActive();
|
2019-10-30 09:45:50 -04:00
|
|
|
}) ||
|
|
|
|
this.advanced._isActive() ||
|
|
|
|
this.lists._isActive()
|
2019-06-28 12:52:09 -05:00
|
|
|
);
|
2018-08-13 20:01:08 +03:00
|
|
|
},
|
|
|
|
|
|
|
|
_getMongoSelector() {
|
2019-06-28 12:52:09 -05:00
|
|
|
if (!this.isActive()) return {};
|
2018-08-13 20:01:08 +03:00
|
|
|
|
|
|
|
const filterSelector = {};
|
|
|
|
const emptySelector = {};
|
|
|
|
let includeEmptySelectors = false;
|
2019-06-28 12:52:09 -05:00
|
|
|
this._fields.forEach(fieldName => {
|
2018-08-13 20:01:08 +03:00
|
|
|
const filter = this[fieldName];
|
|
|
|
if (filter._isActive()) {
|
|
|
|
if (filter.subField !== '') {
|
2019-06-28 12:52:09 -05:00
|
|
|
filterSelector[
|
|
|
|
`${fieldName}.${filter.subField}`
|
|
|
|
] = filter._getMongoSelector();
|
2018-08-13 20:01:08 +03:00
|
|
|
} else {
|
|
|
|
filterSelector[fieldName] = filter._getMongoSelector();
|
|
|
|
}
|
|
|
|
emptySelector[fieldName] = filter._getEmptySelector();
|
|
|
|
if (emptySelector[fieldName] !== null) {
|
|
|
|
includeEmptySelectors = true;
|
2018-05-19 16:23:18 +02:00
|
|
|
}
|
2018-08-13 20:01:08 +03:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
const exceptionsSelector = {
|
|
|
|
_id: {
|
|
|
|
$in: this._exceptions,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
this._exceptionsDep.depend();
|
|
|
|
|
|
|
|
const selectors = [exceptionsSelector];
|
|
|
|
|
2019-06-28 12:52:09 -05:00
|
|
|
if (
|
|
|
|
_.any(this._fields, fieldName => {
|
|
|
|
return this[fieldName]._isActive();
|
|
|
|
})
|
|
|
|
)
|
|
|
|
selectors.push(filterSelector);
|
2018-08-13 20:01:08 +03:00
|
|
|
if (includeEmptySelectors) selectors.push(emptySelector);
|
2019-06-28 12:52:09 -05:00
|
|
|
if (this.advanced._isActive())
|
|
|
|
selectors.push(this.advanced._getMongoSelector());
|
2018-08-13 20:01:08 +03:00
|
|
|
|
|
|
|
return {
|
|
|
|
$or: selectors,
|
|
|
|
};
|
|
|
|
},
|
|
|
|
|
|
|
|
mongoSelector(additionalSelector) {
|
|
|
|
const filterSelector = this._getMongoSelector();
|
2019-06-28 12:52:09 -05:00
|
|
|
if (_.isUndefined(additionalSelector)) return filterSelector;
|
2018-08-13 20:01:08 +03:00
|
|
|
else
|
|
|
|
return {
|
|
|
|
$and: [filterSelector, additionalSelector],
|
|
|
|
};
|
|
|
|
},
|
|
|
|
|
|
|
|
reset() {
|
2019-06-28 12:52:09 -05:00
|
|
|
this._fields.forEach(fieldName => {
|
2018-08-13 20:01:08 +03:00
|
|
|
const filter = this[fieldName];
|
|
|
|
filter.reset();
|
|
|
|
});
|
2019-10-18 18:06:34 -04:00
|
|
|
this.lists.reset();
|
2018-08-13 20:01:08 +03:00
|
|
|
this.advanced.reset();
|
|
|
|
this.resetExceptions();
|
|
|
|
},
|
|
|
|
|
|
|
|
addException(_id) {
|
|
|
|
if (this.isActive()) {
|
|
|
|
this._exceptions.push(_id);
|
|
|
|
this._exceptionsDep.changed();
|
|
|
|
Tracker.flush();
|
|
|
|
}
|
|
|
|
},
|
Renaissance
_,,ad8888888888bba,_
,ad88888I888888888888888ba,
,88888888I88888888888888888888a,
,d888888888I8888888888888888888888b,
d88888PP"""" ""YY88888888888888888888b,
,d88"'__,,--------,,,,.;ZZZY8888888888888,
,8IIl'" ;;l"ZZZIII8888888888,
,I88l;' ;lZZZZZ888III8888888,
,II88Zl;. ;llZZZZZ888888I888888,
,II888Zl;. .;;;;;lllZZZ888888I8888b
,II8888Z;; `;;;;;''llZZ8888888I8888,
II88888Z;' .;lZZZ8888888I888b
II88888Z; _,aaa, .,aaaaa,__.l;llZZZ88888888I888
II88888IZZZZZZZZZ, .ZZZZZZZZZZZZZZ;llZZ88888888I888,
II88888IZZ<'(@@>Z| |ZZZ<'(@@>ZZZZ;;llZZ888888888I88I
,II88888; `""" ;| |ZZ; `""" ;;llZ8888888888I888
II888888l `;; .;llZZ8888888888I888,
,II888888Z; ;;; .;;llZZZ8888888888I888I
III888888Zl; .., `;; ,;;lllZZZ88888888888I888
II88888888Z;;...;(_ _) ,;;;llZZZZ88888888888I888,
II88888888Zl;;;;;' `--'Z;. .,;;;;llZZZZ88888888888I888b
]I888888888Z;;;;' ";llllll;..;;;lllZZZZ88888888888I8888,
II888888888Zl.;;"Y88bd888P";;,..;lllZZZZZ88888888888I8888I
II8888888888Zl;.; `"PPP";;;,..;lllZZZZZZZ88888888888I88888
II888888888888Zl;;. `;;;l;;;;lllZZZZZZZZW88888888888I88888
`II8888888888888Zl;. ,;;lllZZZZZZZZWMZ88888888888I88888
II8888888888888888ZbaalllZZZZZZZZZWWMZZZ8888888888I888888,
`II88888888888888888b"WWZZZZZWWWMMZZZZZZI888888888I888888b
`II88888888888888888;ZZMMMMMMZZZZZZZZllI888888888I8888888
`II8888888888888888 `;lZZZZZZZZZZZlllll888888888I8888888,
II8888888888888888, `;lllZZZZllllll;;.Y88888888I8888888b,
,II8888888888888888b .;;lllllll;;;.;..88888888I88888888b,
II888888888888888PZI;. .`;;;.;;;..; ...88888888I8888888888,
II888888888888PZ;;';;. ;. .;. .;. .. Y8888888I88888888888b,
,II888888888PZ;;' `8888888I8888888888888b,
II888888888' 888888I8888888888888888
,II888888888 ,888888I8888888888888888
,d88888888888 d888888I8888888888ZZZZZZ
,ad888888888888I 8888888I8888ZZZZZZZZZZZZ
888888888888888' 888888IZZZZZZZZZZZZZZZZZ
8888888888P'8P' Y888ZZZZZZZZZZZZZZZZZZZZ
888888888, " ,ZZZZZZZZZZZZZZZZZZZZZZZ
8888888888, ,ZZZZZZZZZZZZZZZZZZZZZZZZZZ
888888888888a, _ ,ZZZZZZZZZZZZZZZZZZZZ88888888
888888888888888ba,_d' ,ZZZZZZZZZZZZZZZZZ8888888888888
8888888888888888888888bbbaaa,,,______,ZZZZZZZZZZZZZZZ88888888888888888
88888888888888888888888888888888888ZZZZZZZZZZZZZZZ88888888888888888888
8888888888888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888
888888888888888888888888888888888ZZZZZZZZZZZZZZ88888888888888888888888
8888888888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888888
88888888888888888888888888888ZZZZZZZZZZZZZZ888888888888888888888888888
8888888888888888888888888888ZZZZZZZZZZZZZZ88888888888888888 Normand 8
88888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888 Veilleux 8
8888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888888888888
2015-05-12 19:20:58 +02:00
|
|
|
|
2018-08-13 20:01:08 +03:00
|
|
|
resetExceptions() {
|
|
|
|
this._exceptions = [];
|
|
|
|
this._exceptionsDep.changed();
|
|
|
|
},
|
Renaissance
_,,ad8888888888bba,_
,ad88888I888888888888888ba,
,88888888I88888888888888888888a,
,d888888888I8888888888888888888888b,
d88888PP"""" ""YY88888888888888888888b,
,d88"'__,,--------,,,,.;ZZZY8888888888888,
,8IIl'" ;;l"ZZZIII8888888888,
,I88l;' ;lZZZZZ888III8888888,
,II88Zl;. ;llZZZZZ888888I888888,
,II888Zl;. .;;;;;lllZZZ888888I8888b
,II8888Z;; `;;;;;''llZZ8888888I8888,
II88888Z;' .;lZZZ8888888I888b
II88888Z; _,aaa, .,aaaaa,__.l;llZZZ88888888I888
II88888IZZZZZZZZZ, .ZZZZZZZZZZZZZZ;llZZ88888888I888,
II88888IZZ<'(@@>Z| |ZZZ<'(@@>ZZZZ;;llZZ888888888I88I
,II88888; `""" ;| |ZZ; `""" ;;llZ8888888888I888
II888888l `;; .;llZZ8888888888I888,
,II888888Z; ;;; .;;llZZZ8888888888I888I
III888888Zl; .., `;; ,;;lllZZZ88888888888I888
II88888888Z;;...;(_ _) ,;;;llZZZZ88888888888I888,
II88888888Zl;;;;;' `--'Z;. .,;;;;llZZZZ88888888888I888b
]I888888888Z;;;;' ";llllll;..;;;lllZZZZ88888888888I8888,
II888888888Zl.;;"Y88bd888P";;,..;lllZZZZZ88888888888I8888I
II8888888888Zl;.; `"PPP";;;,..;lllZZZZZZZ88888888888I88888
II888888888888Zl;;. `;;;l;;;;lllZZZZZZZZW88888888888I88888
`II8888888888888Zl;. ,;;lllZZZZZZZZWMZ88888888888I88888
II8888888888888888ZbaalllZZZZZZZZZWWMZZZ8888888888I888888,
`II88888888888888888b"WWZZZZZWWWMMZZZZZZI888888888I888888b
`II88888888888888888;ZZMMMMMMZZZZZZZZllI888888888I8888888
`II8888888888888888 `;lZZZZZZZZZZZlllll888888888I8888888,
II8888888888888888, `;lllZZZZllllll;;.Y88888888I8888888b,
,II8888888888888888b .;;lllllll;;;.;..88888888I88888888b,
II888888888888888PZI;. .`;;;.;;;..; ...88888888I8888888888,
II888888888888PZ;;';;. ;. .;. .;. .. Y8888888I88888888888b,
,II888888888PZ;;' `8888888I8888888888888b,
II888888888' 888888I8888888888888888
,II888888888 ,888888I8888888888888888
,d88888888888 d888888I8888888888ZZZZZZ
,ad888888888888I 8888888I8888ZZZZZZZZZZZZ
888888888888888' 888888IZZZZZZZZZZZZZZZZZ
8888888888P'8P' Y888ZZZZZZZZZZZZZZZZZZZZ
888888888, " ,ZZZZZZZZZZZZZZZZZZZZZZZ
8888888888, ,ZZZZZZZZZZZZZZZZZZZZZZZZZZ
888888888888a, _ ,ZZZZZZZZZZZZZZZZZZZZ88888888
888888888888888ba,_d' ,ZZZZZZZZZZZZZZZZZ8888888888888
8888888888888888888888bbbaaa,,,______,ZZZZZZZZZZZZZZZ88888888888888888
88888888888888888888888888888888888ZZZZZZZZZZZZZZZ88888888888888888888
8888888888888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888
888888888888888888888888888888888ZZZZZZZZZZZZZZ88888888888888888888888
8888888888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888888
88888888888888888888888888888ZZZZZZZZZZZZZZ888888888888888888888888888
8888888888888888888888888888ZZZZZZZZZZZZZZ88888888888888888 Normand 8
88888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888 Veilleux 8
8888888888888888888888888ZZZZZZZZZZZZZZ8888888888888888888888888888888
2015-05-12 19:20:58 +02:00
|
|
|
};
|
|
|
|
|
2018-08-13 20:01:08 +03:00
|
|
|
Blaze.registerHelper('Filter', Filter);
|