=== modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/dhis2/dhis2.select.js' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/dhis2/dhis2.select.js 2011-10-26 12:44:55 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/dhis2/dhis2.select.js 2011-10-26 13:22:09 +0000 @@ -80,13 +80,13 @@ if ( caseSensitive ) { - $select_ghost_matched = $select_ghost_options.filter( ':contains(' + key + ')' ); - $select_not_matched = $select_options.filter( ':not( :contains(' + key + ') )' ); + $select_ghost_matched = $select_ghost_options.filter( dhis2.util.jqTextFilterCaseSensitive( key, false ) ); + $select_not_matched = $select_options.filter( dhis2.util.jqTextFilterCaseSensitive( key, true ) ); } else { - $select_ghost_matched = $select_ghost_options.filter( ':containsNC(' + key + ')' ); - $select_not_matched = $select_options.filter( ':not( :containsNC(' + key + ') )' ); + $select_ghost_matched = $select_ghost_options.filter( dhis2.util.jqTextFilter( key, false ) ); + $select_not_matched = $select_options.filter( dhis2.util.jqTextFilter( key, true ) ); } dhis2.select.moveSorted( $select_ghost, $select_not_matched ); === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/dhis2/dhis2.util.js' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/dhis2/dhis2.util.js 2011-10-26 12:55:00 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/dhis2/dhis2.util.js 2011-10-26 13:22:09 +0000 @@ -52,6 +52,60 @@ }; /** + * Escape function for regular expressions. + */ +dhis2.util.escape = function( text ) +{ + return text.replace( /[-[\]{}()*+?.,\/\\^$|#\s]/g, "\\$&" ); +}; + +/** + * jQuery cannot correctly filter strings with () in them, so here is a fix + * until jQuery gets updated. + */ +dhis2.util.jqTextFilterCaseSensitive = function( key, not ) +{ + key = dhis2.util.escape(key); + not = not || false; + + if ( not ) + { + return function( i, el ) + { + return !!!$( el ).text().match( "" + key ); + }; + } + else + { + return function( i, el ) + { + return !!$( el ).text().match( "" + key ); + }; + } +}; + +dhis2.util.jqTextFilter = function( key, not ) +{ + key = dhis2.util.escape(key).toLowerCase(); + not = not || false; + + if ( not ) + { + return function( i, el ) + { + return !!!$( el ).text().toLowerCase().match( "" + key ); + }; + } + else + { + return function( i, el ) + { + return !!$( el ).text().toLowerCase().match( "" + key ); + }; + } +}; + +/** * adds ':containsNC' to filtering. * $(sel).find(':containsNC(key)').doSomething(); */ @@ -110,11 +164,3 @@ console.log( str ); } }; - -/** - * Escape function for regular expressions. - */ -dhis2.util.escape = function( text ) -{ - return text.replace( /[-[\]{}()*+?.,\/\\^$|#\s]/g, "\\$&" ); -};