mirror of
https://github.com/wavetermdev/waveterm.git
synced 2025-01-04 18:59:08 +01:00
e2bd3cd94a
Adds a meta field `pinnedurl` that can be set to override the `web:defaulturl` setting for a given block. Also adds a home button to the webview to reset the block url to the homepage The help view is now an extension of the webview with some of the chrome removed. Also updates the cookie dependency to resolve a vulnerability
133 lines
4.7 KiB
Go
133 lines
4.7 KiB
Go
// Copyright 2024, Command Line Inc.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package waveobj
|
|
|
|
import (
|
|
"strings"
|
|
)
|
|
|
|
const Entity_Any = "any"
|
|
|
|
// for typescript typing
|
|
type MetaTSType struct {
|
|
// shared
|
|
View string `json:"view,omitempty"`
|
|
Controller string `json:"controller,omitempty"`
|
|
File string `json:"file,omitempty"`
|
|
Url string `json:"url,omitempty"`
|
|
PinnedUrl string `json:"pinnedurl,omitempty"`
|
|
Connection string `json:"connection,omitempty"`
|
|
Edit bool `json:"edit,omitempty"`
|
|
History []string `json:"history,omitempty"`
|
|
HistoryForward []string `json:"history:forward,omitempty"`
|
|
|
|
DisplayName string `json:"display:name,omitempty"`
|
|
DisplayOrder float64 `json:"display:order,omitempty"`
|
|
|
|
Icon string `json:"icon,omitempty"`
|
|
IconColor string `json:"icon:color,omitempty"`
|
|
|
|
Frame bool `json:"frame,omitempty"`
|
|
FrameClear bool `json:"frame:*,omitempty"`
|
|
FrameBorderColor string `json:"frame:bordercolor,omitempty"`
|
|
FrameBorderColor_Focused string `json:"frame:bordercolor:focused,omitempty"`
|
|
FrameTitle string `json:"frame:title,omitempty"`
|
|
FrameIcon string `json:"frame:icon,omitempty"`
|
|
FrameText string `json:"frame:text,omitempty"`
|
|
|
|
Cmd string `json:"cmd,omitempty"`
|
|
CmdClear bool `json:"cmd:*,omitempty"`
|
|
CmdInteractive bool `json:"cmd:interactive,omitempty"`
|
|
CmdLogin bool `json:"cmd:login,omitempty"`
|
|
CmdRunOnStart bool `json:"cmd:runonstart,omitempty"`
|
|
CmdClearOnStart bool `json:"cmd:clearonstart,omitempty"`
|
|
CmdClearOnRestart bool `json:"cmd:clearonrestart,omitempty"`
|
|
CmdEnv map[string]string `json:"cmd:env,omitempty"`
|
|
CmdCwd string `json:"cmd:cwd,omitempty"`
|
|
CmdNoWsh bool `json:"cmd:nowsh,omitempty"`
|
|
|
|
GraphClear bool `json:"graph:*,omitempty"`
|
|
GraphNumPoints int `json:"graph:numpoints,omitempty"`
|
|
GraphMetrics []string `json:"graph:metrics,omitempty"`
|
|
|
|
// for tabs
|
|
Bg string `json:"bg,omitempty"`
|
|
BgClear bool `json:"bg:*,omitempty"`
|
|
BgOpacity float64 `json:"bg:opacity,omitempty"`
|
|
BgBlendMode string `json:"bg:blendmode,omitempty"`
|
|
|
|
TermClear bool `json:"term:*,omitempty"`
|
|
TermFontSize int `json:"term:fontsize,omitempty"`
|
|
TermFontFamily string `json:"term:fontfamily,omitempty"`
|
|
TermMode string `json:"term:mode,omitempty"`
|
|
TermTheme string `json:"term:theme,omitempty"`
|
|
TermLocalShellPath string `json:"term:localshellpath,omitempty"` // matches settings
|
|
TermLocalShellOpts []string `json:"term:localshellopts,omitempty"` // matches settings
|
|
TermScrollback *int `json:"term:scrollback,omitempty"`
|
|
|
|
Count int `json:"count,omitempty"` // temp for cpu plot. will remove later
|
|
}
|
|
|
|
type MetaDataDecl struct {
|
|
Key string `json:"key"`
|
|
Desc string `json:"desc,omitempty"`
|
|
Type string `json:"type"` // string, int, float, bool, array, object
|
|
Default any `json:"default,omitempty"`
|
|
StrOptions []string `json:"stroptions,omitempty"`
|
|
NumRange []*int `json:"numrange,omitempty"` // inclusive, null means no limit
|
|
Entity []string `json:"entity"` // what entities this applies to, e.g. "block", "tab", "any", etc.
|
|
Special []string `json:"special,omitempty"` // special handling. things that need to happen if this gets updated
|
|
}
|
|
|
|
type MetaPresetDecl struct {
|
|
Preset string `json:"preset"`
|
|
Desc string `json:"desc,omitempty"`
|
|
Keys []string `json:"keys"`
|
|
Entity []string `json:"entity"` // what entities this applies to, e.g. "block", "tab", etc.
|
|
}
|
|
|
|
// returns a clean copy of meta with mergeMeta merged in
|
|
// if mergeSpecial is false, then special keys will not be merged (like display:*)
|
|
func MergeMeta(meta MetaMapType, metaUpdate MetaMapType, mergeSpecial bool) MetaMapType {
|
|
rtn := make(MetaMapType)
|
|
for k, v := range meta {
|
|
rtn[k] = v
|
|
}
|
|
// deal with "section:*" keys
|
|
for k := range metaUpdate {
|
|
if !strings.HasSuffix(k, ":*") {
|
|
continue
|
|
}
|
|
if !metaUpdate.GetBool(k, false) {
|
|
continue
|
|
}
|
|
prefix := strings.TrimSuffix(k, ":*")
|
|
if prefix == "" {
|
|
continue
|
|
}
|
|
// delete "[prefix]" and all keys that start with "[prefix]:"
|
|
prefixColon := prefix + ":"
|
|
for k2 := range rtn {
|
|
if k2 == prefix || strings.HasPrefix(k2, prefixColon) {
|
|
delete(rtn, k2)
|
|
}
|
|
}
|
|
}
|
|
// now deal with regular keys
|
|
for k, v := range metaUpdate {
|
|
if !mergeSpecial && strings.HasPrefix(k, "display:") {
|
|
continue
|
|
}
|
|
if strings.HasSuffix(k, ":*") {
|
|
continue
|
|
}
|
|
if v == nil {
|
|
delete(rtn, k)
|
|
continue
|
|
}
|
|
rtn[k] = v
|
|
}
|
|
return rtn
|
|
}
|