diff options
author | wxiaoguang <wxiaoguang@gmail.com> | 2022-10-08 19:22:44 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-08 12:22:44 +0100 |
commit | 768e16dad19e98e5a6090bd09a7662da6079eae0 (patch) | |
tree | e68861e02b9f99bd0e78fa6f44641512a2f547c7 /web_src/js/utils.js | |
parent | 7bb12d7efa9fd01e15ddc14b3b8e40df4a4abd42 (diff) | |
download | gitea-768e16dad19e98e5a6090bd09a7662da6079eae0.tar.gz gitea-768e16dad19e98e5a6090bd09a7662da6079eae0.zip |
Use weighted algorithm for string matching when finding files in repo (#21370)
This PR is for:
* https://github.com/go-gitea/gitea/issues/20231
Now, when a user searches `word`, they always see `/{word}.txt` before
`/{w}e-g{o}t-{r}esult.{d}at`
Demo:
When searching "a", "a.ext" comes first.
Then when searching "at", the longer matched "template" comes first.
<details>
![image](https://user-images.githubusercontent.com/2114189/194588738-3644d891-956f-40e4-b79b-b97d34265456.png)
![image](https://user-images.githubusercontent.com/2114189/194588797-9b124670-4e1e-4510-a170-780295ed89b8.png)
</details>
This PR also makes the frontend tests could import feature JS files by
introducing `jestSetup.js`
Co-authored-by: delvh <dev.lh@web.de>
Co-authored-by: silverwind <me@silverwind.io>
Diffstat (limited to 'web_src/js/utils.js')
-rw-r--r-- | web_src/js/utils.js | 30 |
1 files changed, 0 insertions, 30 deletions
diff --git a/web_src/js/utils.js b/web_src/js/utils.js index 8e8dc01be1..4020b7a7f4 100644 --- a/web_src/js/utils.js +++ b/web_src/js/utils.js @@ -59,36 +59,6 @@ export function parseIssueHref(href) { return {owner, repo, type, index}; } -// return the sub-match result as an array: [unmatched, matched, unmatched, matched, ...] -// res[even] is unmatched, res[odd] is matched, see unit tests for examples -export function strSubMatch(full, sub) { - const res = ['']; - let i = 0, j = 0; - const subLower = sub.toLowerCase(), fullLower = full.toLowerCase(); - while (i < subLower.length && j < fullLower.length) { - if (subLower[i] === fullLower[j]) { - if (res.length % 2 !== 0) res.push(''); - res[res.length - 1] += full[j]; - j++; - i++; - } else { - if (res.length % 2 === 0) res.push(''); - res[res.length - 1] += full[j]; - j++; - } - } - if (i !== sub.length) { - // if the sub string doesn't match the full, only return the full as unmatched. - return [full]; - } - if (j < full.length) { - // append remaining chars from full to result as unmatched - if (res.length % 2 === 0) res.push(''); - res[res.length - 1] += full.substring(j); - } - return res; -} - // pretty-print a number using locale-specific separators, e.g. 1200 -> 1,200 export function prettyNumber(num, locale = 'en-US') { if (typeof num !== 'number') return ''; |