return prefix match

Former-commit-id: 2267c61109751ccc4a5cba04eee7ae0fa6fdbb74 [formerly 2267c61109751ccc4a5cba04eee7ae0fa6fdbb74 [formerly 4ea9caa03afa385a8f87b02392508ef78b633d79 [formerly 7400fe5fc77f7a326090418784db645940dba6fb]]]
Former-commit-id: f4044f5e3fcb610b3a334fe28265e964eb8735b5
Former-commit-id: 714f6d4ed52966a938b4509fb93b8d4f1b1f0ba4 [formerly b2adf0d8c4e719a9e054936d39ce1a522093a4d1]
Former-commit-id: 6b399fa5ef7e3c3325c9b6ce5012110aa3d5a64a
pull/15/head
Miguel Mota 6 years ago
parent de27fe984d
commit 2c59ad0957

@ -232,3 +232,14 @@ func (ct *Cointop) lastPage() error {
ct.rowChanged() ct.rowChanged()
return nil return nil
} }
func (ct *Cointop) goToGlobalIndex(idx int) error {
perpage := ct.totalPerPage()
atpage := idx / perpage
ct.setPage(atpage)
rowIndex := (idx % perpage)
ct.highlightRow(rowIndex)
ct.updateTable()
ct.rowChanged()
return nil
}

@ -42,38 +42,45 @@ func (ct *Cointop) search(q string) error {
q = strings.TrimSpace(strings.ToLower(q)) q = strings.TrimSpace(strings.ToLower(q))
idx := -1 idx := -1
min := -1 min := -1
var hasprefixidx []int
var hasprefixdist []int
for i := range ct.allcoins { for i := range ct.allcoins {
coin := ct.allcoins[i] coin := ct.allcoins[i]
name := strings.ToLower(coin.Name) name := strings.ToLower(coin.Name)
symbol := strings.ToLower(coin.Symbol) symbol := strings.ToLower(coin.Symbol)
// if query matches symbol, return immediately
if symbol == q { if symbol == q {
idx = i ct.goToGlobalIndex(i)
min = 0 return nil
break
} }
dist := levenshtein.Distance(name, q) // if query matches name, return immediately
if min == -1 { if name == q {
min = dist ct.goToGlobalIndex(i)
return nil
} }
if dist <= min { // store index with the smallest levenshtein
dist := levenshtein.Distance(name, q)
if min == -1 || dist <= min {
idx = i idx = i
min = dist min = dist
} }
// store index where query is substring to name
if strings.HasPrefix(name, q) {
if len(hasprefixdist) == 0 || dist < hasprefixdist[0] {
hasprefixidx = append(hasprefixidx, i)
hasprefixdist = append(hasprefixdist, dist)
}
}
} }
// go to row if prefix match
if len(hasprefixidx) > 0 && hasprefixidx[0] != -1 && min > 0 {
ct.goToGlobalIndex(hasprefixidx[0])
return nil
}
// go to row if levenshtein distance is small enough
if idx > -1 && min <= 6 { if idx > -1 && min <= 6 {
ct.goToGlobalIndex(idx) ct.goToGlobalIndex(idx)
return nil
} }
return nil return nil
} }
func (ct *Cointop) goToGlobalIndex(idx int) error {
perpage := ct.totalPerPage()
atpage := idx / perpage
ct.setPage(atpage)
rowIndex := (idx % perpage)
ct.highlightRow(rowIndex)
ct.updateTable()
ct.rowChanged()
return nil
}

Loading…
Cancel
Save