From d0f42f26280a19dfdeb5209e088b7fc1272db850 Mon Sep 17 00:00:00 2001 From: MaMe82 Date: Tue, 6 Nov 2018 17:13:51 +0100 Subject: [PATCH] Work on webclient master template settings --- service/nexmon/netlink.go | 1 + web_client/hvueComponentsDialog.go | 4 +- web_client/hvueComponentsGeneric.go | 404 +++++++++++++++++++++++----- web_client/main.go | 3 + 4 files changed, 341 insertions(+), 71 deletions(-) create mode 100644 service/nexmon/netlink.go diff --git a/service/nexmon/netlink.go b/service/nexmon/netlink.go new file mode 100644 index 0000000..d4e97d7 --- /dev/null +++ b/service/nexmon/netlink.go @@ -0,0 +1 @@ +package nexmon diff --git a/web_client/hvueComponentsDialog.go b/web_client/hvueComponentsDialog.go index bc6be8a..1ed9c4e 100644 --- a/web_client/hvueComponentsDialog.go +++ b/web_client/hvueComponentsDialog.go @@ -8,6 +8,7 @@ import ( ) func InitComponentsDialog() { + hvue.NewComponent( "select-string-from-array", hvue.Template(templateSelectStringModal), @@ -22,7 +23,7 @@ func InitComponentsDialog() { }), hvue.Mounted(func(vm *hvue.VM) { vm.Set("CurrentSelection", vm.Get("values").Index(0)) - println("Index 0 on mount", vm.Get("values").Index(0)) +// println("Index 0 on mount", vm.Get("values").Index(0)) }), hvue.ComputedWithGetSet( "visible", @@ -38,7 +39,6 @@ func InitComponentsDialog() { func(vm *hvue.VM) { vm.Call("$emit", "load", vm.Get("CurrentSelection")) //println(vm.Get("CurrentSelection")) - }, ), hvue.Method( diff --git a/web_client/hvueComponentsGeneric.go b/web_client/hvueComponentsGeneric.go index b3d6b62..61c7a17 100644 --- a/web_client/hvueComponentsGeneric.go +++ b/web_client/hvueComponentsGeneric.go @@ -5,98 +5,364 @@ package main import ( "github.com/gopherjs/gopherjs/js" "github.com/mame82/hvue" + "strings" ) -func LogLevelClass(vm *hvue.VM, level int) string { - prefix := "log-entry log-entry-level-" - switch level { - case 1: - return prefix + "critical" - case 2: - return prefix + "error" - case 3: - return prefix + "warning" - case 4: - return prefix + "information" - case 5: - return prefix + "verbose" - default: - return prefix + "undefined" - } +type jsMasterTemplate struct { + *js.Object + TemplateNameBluetooth string `js:"TemplateNameBluetooth"` + TemplateNameUSB string `js:"TemplateNameUSB"` + TemplateNameWiFi string `js:"TemplateNameWiFi"` + TemplateNameTriggerActions string `js:"TemplateNameTriggerActions"` + TemplateNamesNetwork []string `js:"TemplateNamesNetwork"` } +func NewMasterTemplate() (res *jsMasterTemplate) { + res = &jsMasterTemplate{Object: O()} + res.TemplateNameBluetooth = "" + res.TemplateNameWiFi = "" + res.TemplateNameUSB = "" + res.TemplateNameTriggerActions = "" + res.TemplateNamesNetwork = []string{} -func InitCompLogger() { + return res +} + +func InitComponentsGeneric() { hvue.NewComponent( - "logger", - hvue.Template(compLoggerTemplate), + "generic", + hvue.Template(compGeneric), + ) + hvue.NewComponent( + "startup-settings", + hvue.Template(compStartupSettings), + ) + hvue.NewComponent( + "system", + hvue.Template(compSystem), + ) + hvue.NewComponent( + "master-template", + hvue.Template(compMasterTemplate), hvue.DataFunc(func(vm *hvue.VM) interface{} { data := &struct { *js.Object - Pagination *jsDataTablePagination `js:"pagination"` - }{Object:O()} + MasterTemplate *jsMasterTemplate `js:"MasterTemplate"` - data.Pagination = newPagination(0, 1) + ShowTemplateSelectBluetooth bool `js:"ShowTemplateSelectBluetooth"` + ShowTemplateSelectWiFi bool `js:"ShowTemplateSelectWiFi"` + ShowTemplateSelectUSB bool `js:"ShowTemplateSelectUSB"` + ShowTemplateSelectTriggerAction bool `js:"ShowTemplateSelectTriggerAction"` + ShowTemplateSelectNetwork bool `js:"ShowTemplateSelectNetwork"` + + }{Object: O()} + + data.MasterTemplate = NewMasterTemplate() + data.ShowTemplateSelectBluetooth = false + data.ShowTemplateSelectWiFi = false + data.ShowTemplateSelectUSB = false + data.ShowTemplateSelectTriggerAction = false + data.ShowTemplateSelectNetwork = false return data }), - hvue.Method("logLevelClass", LogLevelClass), - hvue.PropObj("max-entries", hvue.Types(hvue.PNumber), hvue.Default(5)), - - hvue.Computed("classFromLevel", func(vm *hvue.VM) interface{} { - return "info" - }), - hvue.Method("formatDate", func(vm *hvue.VM, timestamp *js.Object) interface{} { - return js.Global.Get("Quasar").Get("utils").Get("date").Call("formatDate", timestamp, "YYYY-MM-DD HH:mm:ss Z") - }), - hvue.Computed("logArray", - func(vm *hvue.VM) interface{} { - return vm.Get("$store").Get("state").Get("EventProcessor").Get("logArray") - }), ) + hvue.NewComponent( + "database", + hvue.Template(compDatabase), + ) + + + + hvue.NewComponent( + "select-network-templates", + hvue.Template(templateSelectNetworkTemplatesModal), + hvue.DataFunc(func(vm *hvue.VM) interface{} { + data := struct { + *js.Object + CurrentSelection []string `js:"CurrentSelection"` + }{Object:O()} + data.CurrentSelection = []string{} + + return &data + }), + /* + hvue.Mounted(func(vm *hvue.VM) { + vm.Set("CurrentSelection", vm.Get("values").Index(0)) + // println("Index 0 on mount", vm.Get("values").Index(0)) + }), + */ + hvue.Computed("options", func(vm *hvue.VM) interface{} { + inVals := vm.Get("values") + options := js.Global.Get("Array").New() + + for i:=0; i < inVals.Length(); i++ { + val := inVals.Index(i).String() + entry := struct{ + *js.Object + Label string `js:"label"` + Value string `js:"value"` + }{Object:O()} + entry.Label = val + entry.Value = val + + options.Call("push", entry) + } + + return options + }), + + hvue.ComputedWithGetSet( + "visible", + func(vm *hvue.VM) interface{} { + return vm.Get("show") + }, + func(vm *hvue.VM, newValue *js.Object) { + vm.Call("$emit", "show", newValue) + }, + ), + hvue.ComputedWithGetSet("selection", + func(vm *hvue.VM) interface{} { + return vm.Get("value") + }, + func(vm *hvue.VM, newValue *js.Object) { + vm.Call("$emit", "input", newValue) + }), + hvue.Computed("available", func(vm *hvue.VM) interface{} { + + + sel := vm.Get("selection") + selection := make(map[string]bool, 0) + selectionPrefix := make(map[string]bool, 0) + for i:=0; i - -
- - - {{ formatDate(props.value) }} - - +
+
+ +
+ +
+ +
+ +
+ +
+ +
+
- - ` -) +const compStartupSettings = ` + + + Startup Settings + + + +
+ +
+
+
+` + +const compMasterTemplate = ` + + + Master Template + + + {{ $data }} + + + + +
+ + + + + USB Template + If not empty, the selected USB settings are deployed along with the master template + + + + + + + + + + Networks templates + If not empty, the selected network templates are deployed along with the master template. Only one template could be selected per interface. + + + + + + + + +
+
+
+` + +const compSystem = ` + + + System + + + +
+
+
+
+
+
+` + +const compDatabase = ` + + + Database + + + +
+
+
+
+
+
+` + +const templateSelectNetworkTemplatesModal = ` + + + + + {{ title }} + + Only one template could be selected per interface + + + + + + + + + + + + {{ name }} + + + + + + + + + + + + + + + + + + + + + + +` diff --git a/web_client/main.go b/web_client/main.go index 508a104..4bce5b2 100644 --- a/web_client/main.go +++ b/web_client/main.go @@ -66,6 +66,7 @@ func main() { VueRouterRoute("/wifi","", ""), VueRouterRoute("/triggeractions","", ""), VueRouterRoute("/bluetooth","", ""), + VueRouterRoute("/generic","", ""), ) @@ -83,6 +84,7 @@ func main() { InitComponentsWiFi() InitComponentsTriggerActions() InitComponentsBluetooth() + InitComponentsGeneric() vm := hvue.NewVM( hvue.El("#app"), @@ -119,6 +121,7 @@ const templateMainApp = ` +