blob: d6978a4154c18b7d12f0f78876c09d0dcbc0747d [file] [log] [blame]
Matteo Scandolodd11d7c2016-06-14 17:26:51 -07001(function() {
2 'use strict';
3
4 /**
5 * @ngdoc service
6 * @name xos.uiComponents.Comparato
7 * @description This factory define a function that replace the native angular.filter comparator. It is done to allow the comparation between (0|1) values with booleans.
8 **/
9
10 angular
11 .module('xos.uiComponents')
12 .factory('Comparator', comparator);
13
14 function comparator() {
15
16 return function(actual, expected){
17 if (angular.isUndefined(actual)) {
18 // No substring matching against `undefined`
19 return false;
20 }
21 if ((actual === null) || (expected === null)) {
22 // No substring matching against `null`; only match against `null`
23 return actual === expected;
24 }
25 if (angular.isObject(expected) || (angular.isObject(actual))){
26 return angular.equals(expected, actual);
27 }
28
29 if(_.isBoolean(actual) || _.isBoolean(expected)){
30 if(actual === 0 || actual === 1){
31 actual = !!actual;
32 }
33 return angular.equals(expected, actual);
34 }
35
36 if(!angular.isString(actual) || !angular.isString(expected)){
37 if(angular.isDefined(actual.toString) && angular.isDefined(expected.toString)){
38 actual = actual.toString();
39 expected = expected.toString();
40 }
41 else {
42 return actual === expected;
43 }
44 }
45
46 actual = actual.toLowerCase() + '';
47 expected = expected.toLowerCase() + '';
48 return actual.indexOf(expected) !== -1;
49 };
50 }
51})();