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()
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))
idx := -1
min := -1
var hasprefixidx []int
var hasprefixdist []int
for i := range ct.allcoins {
coin := ct.allcoins[i]
name := strings.ToLower(coin.Name)
symbol := strings.ToLower(coin.Symbol)
// if query matches symbol, return immediately
if symbol == q {
idx = i
min = 0
break
ct.goToGlobalIndex(i)
return nil
}
dist := levenshtein.Distance(name, q)
if min == -1 {
min = dist
// if query matches name, return immediately
if name == q {
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
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 {
ct.goToGlobalIndex(idx)
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