|
import * as is from '../is'; |
|
|
|
export const valCmp = (fieldVal, operator, value) => { |
|
let matches; |
|
let isFieldStr = is.string( fieldVal ); |
|
let isFieldNum = is.number( fieldVal ); |
|
let isValStr = is.string(value); |
|
let fieldStr, valStr; |
|
let caseInsensitive = false; |
|
let notExpr = false; |
|
let isIneqCmp = false; |
|
|
|
if( operator.indexOf( '!' ) >= 0 ){ |
|
operator = operator.replace( '!', '' ); |
|
notExpr = true; |
|
} |
|
|
|
if( operator.indexOf( '@' ) >= 0 ){ |
|
operator = operator.replace( '@', '' ); |
|
caseInsensitive = true; |
|
} |
|
|
|
if( isFieldStr || isValStr || caseInsensitive ){ |
|
fieldStr = !isFieldStr && !isFieldNum ? '' : '' + fieldVal; |
|
valStr = '' + value; |
|
} |
|
|
|
|
|
|
|
if( caseInsensitive ){ |
|
fieldVal = fieldStr = fieldStr.toLowerCase(); |
|
value = valStr = valStr.toLowerCase(); |
|
} |
|
|
|
switch( operator ){ |
|
case '*=': |
|
matches = fieldStr.indexOf( valStr ) >= 0; |
|
break; |
|
case '$=': |
|
matches = fieldStr.indexOf( valStr, fieldStr.length - valStr.length ) >= 0; |
|
break; |
|
case '^=': |
|
matches = fieldStr.indexOf( valStr ) === 0; |
|
break; |
|
case '=': |
|
matches = fieldVal === value; |
|
break; |
|
case '>': |
|
isIneqCmp = true; |
|
matches = fieldVal > value; |
|
break; |
|
case '>=': |
|
isIneqCmp = true; |
|
matches = fieldVal >= value; |
|
break; |
|
case '<': |
|
isIneqCmp = true; |
|
matches = fieldVal < value; |
|
break; |
|
case '<=': |
|
isIneqCmp = true; |
|
matches = fieldVal <= value; |
|
break; |
|
default: |
|
matches = false; |
|
break; |
|
} |
|
|
|
|
|
if( notExpr && ( fieldVal != null || !isIneqCmp ) ){ |
|
matches = !matches; |
|
} |
|
|
|
return matches; |
|
}; |
|
|
|
export const boolCmp = (fieldVal, operator) => { |
|
switch( operator ){ |
|
case '?': |
|
return fieldVal ? true : false; |
|
case '!': |
|
return fieldVal ? false : true; |
|
case '^': |
|
return fieldVal === undefined; |
|
} |
|
}; |
|
|
|
export const existCmp = (fieldVal) => fieldVal !== undefined; |
|
|
|
export const data = (ele, field) => ele.data(field); |
|
|
|
export const meta = (ele, field) => ele[field](); |