package webview import ( "strings" ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/nfs" kit "shylinux.com/x/toolkits" "shylinux.com/x/webview" ) type WebView struct { webview.WebView Source string } func (w WebView) Menu() bool { list := []string{} ice.Pulse.Cmd(nfs.CAT, w.Source, func(ls []string, line string) { if strings.HasPrefix(line, "# ") { return } if len(ls) > 1 { list = append(list, kit.Format(``, ls[0], ls[0])) w.WebView.Bind(ls[0], func() { w.navigate(ls[1]) }) } }) if len(list) == 0 { return false } w.WebView.SetTitle(ice.CONTEXTS) w.WebView.SetSize(200, 60*len(list), webview.HintNone) w.WebView.Navigate(kit.Format(`data:text/html, %s `, kit.Join(list, ice.NL))) return true } func (w WebView) Title(text string) { w.WebView.SetTitle(text) } func (w WebView) Webview(url string) { w.WebView.Navigate(url) } func (w WebView) Open(url string) { w.WebView.Navigate(url) } func (w WebView) OpenUrl(url string) { ice.Pulse.Cmd(cli.SYSTEM, "open", url) } func (w WebView) OpenApp(app string) { ice.Pulse.Cmd(cli.SYSTEM, "open", "-a", app) } func (w WebView) OpenCmd(cmd string) { ice.Pulse.Cmd(nfs.SAVE, kit.HomePath(".bash_temp"), cmd) ice.Pulse.Cmd(cli.SYSTEM, "open", "-a", "Terminal") } func (w WebView) Terminate() { w.WebView.Terminate() } func (w WebView) Close() { if !w.Menu() { w.WebView.Terminate() } } func (w WebView) navigate(url string) { w.WebView.SetSize(1200, 800, webview.HintNone) w.WebView.Navigate(url) } func Run(cb func(*WebView) ice.Any) { w := webview.New(true) defer w.Destroy() defer w.Run() view := &WebView{Source: "etc/webview.txt", WebView: w} kit.Reflect(cb(view), func(name string, value ice.Any) { w.Bind(name, value) }) if !view.Menu() { view.navigate("http://localhost:9020") } }