diff --git a/docs/posts/modules/ipinfo/index.html b/docs/posts/modules/ipinfo/index.html index f6f6bde9..703d1c35 100644 --- a/docs/posts/modules/ipinfo/index.html +++ b/docs/posts/modules/ipinfo/index.html @@ -128,6 +128,9 @@
ipinfo:
enabled: true
+ colors:
+ name: red
+ value: white
position:
top: 1
left: 2
diff --git a/ipinfo/widget.go b/ipinfo/widget.go
index a0bd3002..ff3999a2 100644
--- a/ipinfo/widget.go
+++ b/ipinfo/widget.go
@@ -3,9 +3,13 @@ package ipinfo
import (
"encoding/json"
"fmt"
+ "net/http"
+ "text/template"
+
+ "bytes"
+
"github.com/olebedev/config"
"github.com/senorprogrammer/wtf/wtf"
- "net/http"
)
// Config is a pointer to the global config object
@@ -14,6 +18,9 @@ var Config *config.Config
type Widget struct {
wtf.TextWidget
result string
+ colors struct {
+ name, value string
+ }
}
type ipinfo struct {
@@ -29,11 +36,13 @@ type ipinfo struct {
func NewWidget() *Widget {
widget := Widget{
- TextWidget: wtf.NewTextWidget("IPInfo", "ipinfo", false),
+ TextWidget: wtf.NewTextWidget(" IPInfo ", "ipinfo", false),
}
widget.View.SetWrap(true)
+ widget.config()
+
return &widget
}
@@ -45,9 +54,8 @@ func (widget *Widget) Refresh() {
widget.UpdateRefreshedAt()
widget.ipinfo()
widget.View.Clear()
- widget.View.SetTitle(fmt.Sprintf(" %s ", widget.Name))
- fmt.Fprintf(widget.View, "%s", widget.result)
+ widget.View.SetText(widget.result)
}
//this method reads the config and calls ipinfo for ip information
@@ -75,15 +83,43 @@ func (widget *Widget) ipinfo() {
widget.result = fmt.Sprintf("%s", err.Error())
return
}
- widget.result = fmt.Sprintf(
- "[red]IP Address:[white] %s\n[red]Hostname:[white] %v\n[red]City:[white] %s\n[red]Region:[white] %s\n[red]Country:[white] %s\n[red]Coordinates:[white] %v\n[red]Postal Code:[white] %s\n[red]Organization:[white] %v",
- info.Ip,
- info.Hostname,
- info.City,
- info.Region,
- info.Country,
- info.Coordinates,
- info.PostalCode,
- info.Organization,
- )
+
+ widget.setResult(&info)
+}
+
+// read module configs
+func (widget *Widget) config() {
+ nameColor, valueColor := Config.UString("wtf.mods.ipinfo.colors.name", "red"), Config.UString("wtf.mods.ipinfo.colors.value", "white")
+ widget.colors.name = nameColor
+ widget.colors.value = valueColor
+}
+
+func (widget *Widget) setResult(info *ipinfo) {
+ resultTemplate, _ := template.New("ipinfo_result").Parse(
+ "[{{.nameColor}}]IP Address: [{{.valueColor}}]{{.Ip}}\n" +
+ "[{{.nameColor}}]Hostname: [{{.valueColor}}]{{.Hostname}}\n" +
+ "[{{.nameColor}}]City: [{{.valueColor}}]{{.City}}\n" +
+ "[{{.nameColor}}]Region: [{{.valueColor}}]{{.Region}}\n" +
+ "[{{.nameColor}}]Country: [{{.valueColor}}]{{.Country}}\n" +
+ "[{{.nameColor}}]Coordinates: [{{.valueColor}}]{{.Coordinates}}\n" +
+ "[{{.nameColor}}]Postal Code: [{{.valueColor}}]{{.PostalCode}}\n" +
+ "[{{.nameColor}}]Organization: [{{.valueColor}}]{{.Organization}}\n",
+ )
+
+ resultBuffer := new(bytes.Buffer)
+
+ resultTemplate.Execute(resultBuffer, map[string]string{
+ "nameColor": widget.colors.name,
+ "valueColor": widget.colors.value,
+ "Ip": info.Ip,
+ "Hostname": info.Hostname,
+ "City": info.City,
+ "Region": info.Region,
+ "Country": info.Country,
+ "Coordinates": info.Coordinates,
+ "PostalCode": info.PostalCode,
+ "Organization": info.Organization,
+ })
+
+ widget.result = resultBuffer.String()
}