k9s/internal/model/menu_hint.go

55 lines
1.1 KiB
Go

// SPDX-License-Identifier: Apache-2.0
// Copyright Authors of K9s
package model
import (
"strconv"
)
// MenuHint represents keyboard mnemonic.
type MenuHint struct {
Mnemonic string
Description string
Visible bool
}
// IsBlank checks if menu hint is a place holder.
func (m MenuHint) IsBlank() bool {
return m.Mnemonic == "" && m.Description == "" && !m.Visible
}
// String returns a string representation.
func (m MenuHint) String() string {
return m.Mnemonic
}
// MenuHints represents a collection of hints.
type MenuHints []MenuHint
// Len returns the hints length.
func (h MenuHints) Len() int {
return len(h)
}
// Swap swaps to elements.
func (h MenuHints) Swap(i, j int) {
h[i], h[j] = h[j], h[i]
}
// Less returns true if first hint is less than second.
func (h MenuHints) Less(i, j int) bool {
n, err1 := strconv.Atoi(h[i].Mnemonic)
m, err2 := strconv.Atoi(h[j].Mnemonic)
if err1 == nil && err2 == nil {
return n < m
}
if err1 == nil && err2 != nil {
return true
}
if err1 != nil && err2 == nil {
return false
}
return h[i].Description < h[j].Description
}