new-gui/examples/cloudflare/gui.go

123 lines
2.9 KiB
Go

// This is a simple example
package main
import (
"log"
"strconv"
)
func loadDNS(c *configT) {
hostname := c.domain
log.Println("adding DNS record", hostname)
newt := mainWindow.NewTab(hostname)
newg := newt.NewGroup("more")
// make a grid 6 things wide
grid := newg.NewGrid("gridnuts", 6, gridH)
// grid.NewButton("Type", func () {
// log.Println("sort by Type")
// })
typedrop := grid.NewDropdown("type")
typedrop.AddText("A")
typedrop.AddText("AAAA")
typedrop.AddText("CNAME")
typedrop.Custom = func () {
log.Println("custom dropdown() a =", typedrop.Name, typedrop.S)
}
nb := grid.NewButton("Name", func () {
log.Println("sort by Name")
})
nb.Disable()
grid.NewButton("Protection", func () {
log.Println("sort proxied")
})
grid.NewButton("TTL", func () {
log.Println("sort by TTL")
})
nb = grid.NewButton("Value", func () {
log.Println("sort by Value")
})
nb.Disable()
nb = grid.NewButton("Save", func () {
log.Println("click below to save")
})
nb.Disable()
masterSave = newt.NewButton("Master Save", func () {
log.Println("save stuff to cloudflare")
})
masterSave.Disable()
records := getZonefile(c)
for _, record := range records.Result {
var rr RRT // dns zonefile resource record
// copy all the JSON values into the row record.
rr.ID = record.ID
rr.Type = record.Type
rr.Name = record.Name
rr.Content = record.Content
rr.Proxied = record.Proxied
rr.Proxiable = record.Proxiable
rr.TTL = record.TTL
rr.typeNode = grid.NewLabel(record.Type)
rr.nameNode = grid.NewEntryLine(record.Name)
rr.nameNode.SetText(record.Name)
rr.nameNode.Disable()
// set proxy or unproxied
rr.proxyNode = grid.NewDropdown("proxy")
if (record.Proxied) {
rr.proxyNode.AddText("Proxied")
rr.proxyNode.AddText("DNS")
} else {
rr.proxyNode.AddText("DNS")
rr.proxyNode.AddText("Proxied")
}
rr.proxyNode.Custom = func () {
log.Println("proxy dropdown() a =", rr.proxyNode.Name, rr.proxyNode.S, rr.ID)
rr.saveNode.Enable()
masterSave.Enable()
}
var ttl, short string
if (record.TTL == 1) {
ttl = "Auto"
} else {
ttl = strconv.Itoa(record.TTL)
}
rr.ttlNode = grid.NewLabel(ttl)
// short = fmt.Sprintf("%80s", record.Content)
short = record.Content
if len(short) > 40 {
short = short[:40] // Slice the first 20 characters
}
rr.valueNode = grid.NewEntryLine(short)
rr.valueNode.SetText(record.Content)
rr.valueNode.Custom = func () {
log.Println("value changed =", rr.valueNode.Name, rr.proxyNode.S, rr.ID)
rr.saveNode.Enable()
masterSave.Enable()
}
// fmt.Printf("ID: %s, Type: %s, Name: %s, short Content: %s\n", record.ID, record.Type, record.Name, short)
// fmt.Printf("\tproxied: %b, %b, string TTL: %i\n", record.Proxied, record.Proxiable, ttl)
rr.saveNode = grid.NewButton("Save", nil)
rr.saveNode.Disable()
rr.saveNode.Custom = func () {
name := "save stuff to cloudflare for " + rr.ID
log.Println(name)
doChange(&rr)
}
}
grid.Pad()
}