mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-27 21:37:57 +08:00
- Modified Godeps/Godeps.json by hand - [TEST] Updated welcome docs hash to sharness - [TEST] Updated contact doc - [TEST] disabled breaking test (t0080-repo refs local)
91 lines
1.7 KiB
Go
91 lines
1.7 KiB
Go
package tour
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
|
|
u "github.com/ipfs/go-ipfs/util"
|
|
)
|
|
|
|
var log = u.Logger("tour")
|
|
|
|
// ID is a string identifier for topics
|
|
type ID string
|
|
|
|
// LessThan returns whether this ID is sorted earlier than another.
|
|
func (i ID) LessThan(o ID) bool {
|
|
return compareDottedInts(string(i), string(o))
|
|
}
|
|
|
|
// IDSlice implements the sort interface for ID slices.
|
|
type IDSlice []ID
|
|
|
|
func (a IDSlice) Len() int { return len(a) }
|
|
func (a IDSlice) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
|
|
func (a IDSlice) Less(i, j int) bool { return a[i].LessThan(a[j]) }
|
|
|
|
// Topic is a type of objects that structures a tour topic.
|
|
type Topic struct {
|
|
ID ID
|
|
Content
|
|
}
|
|
|
|
type Content struct {
|
|
Title string
|
|
Text string
|
|
}
|
|
|
|
// Topics is a sorted list of topic IDs
|
|
var IDs []ID
|
|
|
|
// Topics contains a mapping of Tour Topic ID to Topic
|
|
var Topics = map[ID]Topic{}
|
|
|
|
// NextTopic returns the next in-order topic
|
|
func NextTopic(topic ID) ID {
|
|
for _, id := range IDs {
|
|
if topic.LessThan(id) {
|
|
return id
|
|
}
|
|
}
|
|
return topic // last one, it seems.
|
|
}
|
|
|
|
// TopicID returns a valid tour topic ID from given string
|
|
func TopicID(t string) ID {
|
|
if t == "" { // if empty, use first ID
|
|
return IDs[0]
|
|
}
|
|
return ID(t)
|
|
}
|
|
|
|
func compareDottedInts(i, o string) bool {
|
|
is := strings.Split(i, ".")
|
|
os := strings.Split(o, ".")
|
|
|
|
for n, vis := range is {
|
|
if n >= len(os) {
|
|
return false // os is smaller.
|
|
}
|
|
|
|
vos := os[n]
|
|
ivis, err1 := strconv.Atoi(vis)
|
|
ivos, err2 := strconv.Atoi(vos)
|
|
if err1 != nil || err2 != nil {
|
|
log.Debug(err1)
|
|
log.Debug(err2)
|
|
panic("tour ID LessThan: not an int")
|
|
}
|
|
|
|
if ivis < ivos {
|
|
return true
|
|
}
|
|
|
|
if ivis > ivos {
|
|
return false
|
|
}
|
|
}
|
|
|
|
return len(os) > len(is)
|
|
}
|