@ -17,6 +17,7 @@ export class SearchEngine implements Filters
{
accentOff : true ,
caseOff : true ,
separatedWords : true , // doit-on chercher l'expression en entier ou chacun des mots ?
specialCharsOff : true ,
specialCharsWhiteList : "" ,
}
@ -128,9 +129,9 @@ export class SearchEngine implements Filters
finalString = finalString . toLowerCase ( ) ;
if ( this . searchMode . specialCharsOff )
{
// Suppression de tous les caractères "spéciaux", c'est-à-dire n'étant ni une lettre, ni un chiffre
// Suppression de tous les caractères "spéciaux", c'est-à-dire n'étant ni une lettre, ni un chiffre , ni un espace
// ! Doit être exécuté après "accentOff", sans quoi les caractères accentués seront supprimés avant d'être remplacés
const validChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "+ this . searchMode . specialCharsWhiteList ;
const validChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "+ this . searchMode . specialCharsWhiteList ;
let validString = "" ;
for ( const letter of finalString )
{
@ -145,18 +146,36 @@ export class SearchEngine implements Filters
public dataIsOk ( data : { [ index : string ] : string } ) : boolean
{
const realSearch = this . searchPreProcessing ( this . _inputValue . trim ( ) ) ;
// Pas de valeur s électionné e = pas de filtre sur ce champ
// Pas de valeur s aisi e = pas de filtre sur ce champ
if ( realSearch . length === 0 )
return true ;
// Sinon, on cherche la valeur saisie dans tous les champs définis :
for ( let field in data )
// L'expression saisie doit-elle être séparée en plusieurs "mots" ?
let searchedWords : string [ ] = [ ] ;
if ( this . searchMode . separatedWords )
searchedWords = realSearch . split ( " " ) ;
else
searchedWords [ 0 ] = realSearch ;
// Chacun des "mots" doit être trouvé au moins une fois :
let nbFound = 0 ;
for ( const word of searchedWords )
{
if ( this . _fields2Search . indexOf ( field ) !== - 1 )
{
if ( this . searchPreProcessing ( data [ field ] ) . indexOf ( realSearch ) !== - 1 )
return true ;
for ( let field in data )
{
if ( this . _fields2Search . indexOf ( field ) !== - 1 )
{
if ( this . searchPreProcessing ( data [ field ] ) . indexOf ( word . trim ( ) ) !== - 1 )
{
nbFound ++ ;
break ; // ! sinon, on peut trouver +sieurs fois le même "mot" dans les différents champs.
}
}
}
}
return false ;
if ( nbFound < searchedWords . length ) // tous les mots doivent être trouvés
return false ;
else
return true ;
}
}