|
@@ -263,6 +263,7 @@ func (action *Action) sanitize(cfg *Config) {
|
|
|
action.Icon = lookupHTMLIcon(action.Icon, cfg.DefaultIconForActions)
|
|
action.Icon = lookupHTMLIcon(action.Icon, cfg.DefaultIconForActions)
|
|
|
migrateActionOnClick(action)
|
|
migrateActionOnClick(action)
|
|
|
action.sanitizeJustification()
|
|
action.sanitizeJustification()
|
|
|
|
|
+ action.reportUnknownOnClick(cfg)
|
|
|
action.OnClick = sanitizeOnClick(action.OnClick, cfg)
|
|
action.OnClick = sanitizeOnClick(action.OnClick, cfg)
|
|
|
action.PopupOnStart = action.OnClick
|
|
action.PopupOnStart = action.OnClick
|
|
|
|
|
|
|
@@ -454,22 +455,63 @@ func getActionID(action *Action) string {
|
|
|
return action.ID
|
|
return action.ID
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-//gocyclo:ignore
|
|
|
|
|
|
|
+// onClickModes are the onclick values that change how an action behaves.
|
|
|
|
|
+var onClickModes = []string{
|
|
|
|
|
+ "execution-dialog",
|
|
|
|
|
+ "execution-dialog-output-html",
|
|
|
|
|
+ "execution-dialog-stdout-only",
|
|
|
|
|
+ "execution-button",
|
|
|
|
|
+ "history",
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// onClickDefaultAliases are accepted values that mean "use the default behaviour".
|
|
|
|
|
+var onClickDefaultAliases = []string{
|
|
|
|
|
+ "",
|
|
|
|
|
+ "default",
|
|
|
|
|
+ "nothing",
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func isKnownOnClick(value string) bool {
|
|
|
|
|
+ return slices.Contains(onClickModes, value) || slices.Contains(onClickDefaultAliases, value)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
func sanitizeOnClick(raw string, cfg *Config) string {
|
|
func sanitizeOnClick(raw string, cfg *Config) string {
|
|
|
- switch raw {
|
|
|
|
|
- case "execution-dialog":
|
|
|
|
|
|
|
+ if slices.Contains(onClickModes, raw) {
|
|
|
return raw
|
|
return raw
|
|
|
- case "execution-dialog-output-html":
|
|
|
|
|
- return raw
|
|
|
|
|
- case "execution-dialog-stdout-only":
|
|
|
|
|
- return raw
|
|
|
|
|
- case "execution-button":
|
|
|
|
|
- return raw
|
|
|
|
|
- case "history":
|
|
|
|
|
- return raw
|
|
|
|
|
- default:
|
|
|
|
|
- return cfg.DefaultOnClick
|
|
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ return cfg.DefaultOnClick
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (action *Action) reportUnknownOnClick(cfg *Config) {
|
|
|
|
|
+ // On a second sanitize pass, an action's onclick may already hold the
|
|
|
|
|
+ // (separately reported) defaultOnClick value.
|
|
|
|
|
+ if isKnownOnClick(action.OnClick) || action.OnClick == cfg.DefaultOnClick {
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ configissues.ReportSticky(configissues.Issue{
|
|
|
|
|
+ Severity: configissues.SeverityWarning,
|
|
|
|
|
+ Code: configissues.CodeOnClickUnknown,
|
|
|
|
|
+ Message: fmt.Sprintf("Unknown onclick value %q, using defaultOnClick (%q) instead", action.OnClick, cfg.DefaultOnClick),
|
|
|
|
|
+ ActionID: action.ID,
|
|
|
|
|
+ ActionTitle: action.Title,
|
|
|
|
|
+ Source: action.OnClick,
|
|
|
|
|
+ ConfigFile: action.SourceFile,
|
|
|
|
|
+ })
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (cfg *Config) reportUnknownDefaultOnClick() {
|
|
|
|
|
+ if isKnownOnClick(cfg.DefaultOnClick) {
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ configissues.ReportSticky(configissues.Issue{
|
|
|
|
|
+ Severity: configissues.SeverityWarning,
|
|
|
|
|
+ Code: configissues.CodeOnClickUnknown,
|
|
|
|
|
+ Message: fmt.Sprintf("Unknown defaultOnClick value %q, actions will behave as if it were \"nothing\"", cfg.DefaultOnClick),
|
|
|
|
|
+ Source: cfg.DefaultOnClick,
|
|
|
|
|
+ })
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func migrateActionOnClick(action *Action) {
|
|
func migrateActionOnClick(action *Action) {
|
|
@@ -511,6 +553,7 @@ func (cfg *Config) sanitizeOnClickDefaults() {
|
|
|
cfg.DefaultOnClick = "nothing"
|
|
cfg.DefaultOnClick = "nothing"
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ cfg.reportUnknownDefaultOnClick()
|
|
|
cfg.DefaultPopupOnStart = cfg.DefaultOnClick
|
|
cfg.DefaultPopupOnStart = cfg.DefaultOnClick
|
|
|
}
|
|
}
|
|
|
|
|
|