(opts, d2c, targetCalendar)
| 220 | }; |
| 221 | |
| 222 | function getFilterFunc(opts, d2c, targetCalendar) { |
| 223 | var operation = opts.operation; |
| 224 | var value = opts.value; |
| 225 | var hasArrayValue = Lib.isArrayOrTypedArray(value); |
| 226 | |
| 227 | function isOperationIn(array) { |
| 228 | return array.indexOf(operation) !== -1; |
| 229 | } |
| 230 | |
| 231 | var d2cValue = function(v) { return d2c(v, 0, opts.valuecalendar); }; |
| 232 | var d2cTarget = function(v) { return d2c(v, 0, targetCalendar); }; |
| 233 | |
| 234 | var coercedValue; |
| 235 | |
| 236 | if(isOperationIn(COMPARISON_OPS)) { |
| 237 | coercedValue = hasArrayValue ? d2cValue(value[0]) : d2cValue(value); |
| 238 | } else if(isOperationIn(INTERVAL_OPS)) { |
| 239 | coercedValue = hasArrayValue ? |
| 240 | [d2cValue(value[0]), d2cValue(value[1])] : |
| 241 | [d2cValue(value), d2cValue(value)]; |
| 242 | } else if(isOperationIn(SET_OPS)) { |
| 243 | coercedValue = hasArrayValue ? value.map(d2cValue) : [d2cValue(value)]; |
| 244 | } |
| 245 | |
| 246 | switch(operation) { |
| 247 | case '=': |
| 248 | return function(v) { return d2cTarget(v) === coercedValue; }; |
| 249 | |
| 250 | case '!=': |
| 251 | return function(v) { return d2cTarget(v) !== coercedValue; }; |
| 252 | |
| 253 | case '<': |
| 254 | return function(v) { return d2cTarget(v) < coercedValue; }; |
| 255 | |
| 256 | case '<=': |
| 257 | return function(v) { return d2cTarget(v) <= coercedValue; }; |
| 258 | |
| 259 | case '>': |
| 260 | return function(v) { return d2cTarget(v) > coercedValue; }; |
| 261 | |
| 262 | case '>=': |
| 263 | return function(v) { return d2cTarget(v) >= coercedValue; }; |
| 264 | |
| 265 | case '[]': |
| 266 | return function(v) { |
| 267 | var cv = d2cTarget(v); |
| 268 | return cv >= coercedValue[0] && cv <= coercedValue[1]; |
| 269 | }; |
| 270 | |
| 271 | case '()': |
| 272 | return function(v) { |
| 273 | var cv = d2cTarget(v); |
| 274 | return cv > coercedValue[0] && cv < coercedValue[1]; |
| 275 | }; |
| 276 | |
| 277 | case '[)': |
| 278 | return function(v) { |
| 279 | var cv = d2cTarget(v); |
no test coverage detected
searching dependent graphs…