ソースを参照

[filebrowser] Space act as AND operator in search

Clément Espeute 2 ヶ月 前
コミット
6d2de0fb17
1 ファイル変更22 行追加6 行削除
  1. 22 6
      hide/comp/FancySearch.hx

+ 22 - 6
hide/comp/FancySearch.hx

@@ -1,6 +1,7 @@
 package hide.comp;
 
 typedef SearchRanges = Array<Int>;
+
 class FancySearch extends hide.comp.Component {
 	var open = false;
 	var input : js.html.InputElement;
@@ -47,19 +48,34 @@ class FancySearch extends hide.comp.Component {
 		input.focus();
 	}
 
-	public static function computeSearchRanges(haystack: String, needle: String) : SearchRanges {
+	public static function computeSearchRanges(haystack: String, needle: String, spaceIsAnd: Bool = true, caseSensitive: Bool = false) : SearchRanges {
 		if (needle == null || needle == "")
-			return [];
-		var pos = haystack.toLowerCase().indexOf(needle);
-		if (pos < 0)
 			return null;
-		return [pos, pos + needle.length];
+
+		var needles : Array<String> = if (spaceIsAnd) {
+			StringTools.trim(needle).split(" ");
+		} else {
+			[needle];
+		}
+
+		var ranges : SearchRanges = [];
+		for (needle in needles) {
+			var pos = haystack.toLowerCase().indexOf(needle);
+			if (pos < 0)
+				return null;
+			ranges.push(pos);
+			ranges.push(pos + needle.length);
+		}
+		if (ranges.length==0)
+			return null;
+		return ranges;
 	}
 
 	public static function splitSearchRanges(string: String, ranges: SearchRanges, openToken: String = "<span class='search-hl'>", closeToken: String = "</span>") : String {
 		var lastPos = 0;
 		var finalName = "";
-		for (index in 0...(ranges.length>>1)) {
+		for (i in 0...(ranges.length>>1)) {
+			var index = i * 2;
 			var len = ranges[index+1] - ranges[index];
 			if (len > 0) {
 				var first = string.substr(lastPos, ranges[index]);