From a089699c8915636ba4f158d77dba9b012bc93208 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Fri, 4 Mar 2011 19:02:28 +0300 Subject: build custom layer of Dojo to speed up loading of tt-rss (refs #293) --- lib/dojo/data/util/filter.js | 108 ++++++++++++++++++++++++++----------------- 1 file changed, 66 insertions(+), 42 deletions(-) (limited to 'lib/dojo/data/util/filter.js') diff --git a/lib/dojo/data/util/filter.js b/lib/dojo/data/util/filter.js index dcdc050e6..d23e63ade 100644 --- a/lib/dojo/data/util/filter.js +++ b/lib/dojo/data/util/filter.js @@ -5,48 +5,72 @@ */ -if(!dojo._hasResource["dojo.data.util.filter"]){ -dojo._hasResource["dojo.data.util.filter"]=true; +if(!dojo._hasResource["dojo.data.util.filter"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.data.util.filter"] = true; dojo.provide("dojo.data.util.filter"); -dojo.data.util.filter.patternToRegExp=function(_1,_2){ -var _3="^"; -var c=null; -for(var i=0;i<_1.length;i++){ -c=_1.charAt(i); -switch(c){ -case "\\": -_3+=c; -i++; -_3+=_1.charAt(i); -break; -case "*": -_3+=".*"; -break; -case "?": -_3+="."; -break; -case "$": -case "^": -case "/": -case "+": -case ".": -case "|": -case "(": -case ")": -case "{": -case "}": -case "[": -case "]": -_3+="\\"; -default: -_3+=c; -} -} -_3+="$"; -if(_2){ -return new RegExp(_3,"mi"); -}else{ -return new RegExp(_3,"m"); -} + +dojo.data.util.filter.patternToRegExp = function(/*String*/pattern, /*boolean?*/ ignoreCase){ + // summary: + // Helper function to convert a simple pattern to a regular expression for matching. + // description: + // Returns a regular expression object that conforms to the defined conversion rules. + // For example: + // ca* -> /^ca.*$/ + // *ca* -> /^.*ca.*$/ + // *c\*a* -> /^.*c\*a.*$/ + // *c\*a?* -> /^.*c\*a..*$/ + // and so on. + // + // pattern: string + // A simple matching pattern to convert that follows basic rules: + // * Means match anything, so ca* means match anything starting with ca + // ? Means match single character. So, b?b will match to bob and bab, and so on. + // \ is an escape character. So for example, \* means do not treat * as a match, but literal character *. + // To use a \ as a character in the string, it must be escaped. So in the pattern it should be + // represented by \\ to be treated as an ordinary \ character instead of an escape. + // + // ignoreCase: + // An optional flag to indicate if the pattern matching should be treated as case-sensitive or not when comparing + // By default, it is assumed case sensitive. + + var rxp = "^"; + var c = null; + for(var i = 0; i < pattern.length; i++){ + c = pattern.charAt(i); + switch(c){ + case '\\': + rxp += c; + i++; + rxp += pattern.charAt(i); + break; + case '*': + rxp += ".*"; break; + case '?': + rxp += "."; break; + case '$': + case '^': + case '/': + case '+': + case '.': + case '|': + case '(': + case ')': + case '{': + case '}': + case '[': + case ']': + rxp += "\\"; //fallthrough + default: + rxp += c; + } + } + rxp += "$"; + if(ignoreCase){ + return new RegExp(rxp,"mi"); //RegExp + }else{ + return new RegExp(rxp,"m"); //RegExp + } + }; + } -- cgit v1.2.3