@@ -31,6 +31,9 @@ type PluginOption struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type PluginSetting struct {
|
type PluginSetting struct {
|
||||||
|
// The key that the setting will be assigned to in the configuration file.
|
||||||
|
Key string `json:"key" yaml:"key"`
|
||||||
|
|
||||||
// The display name for the setting.
|
// The display name for the setting.
|
||||||
DisplayName string `json:"display_name" yaml:"display_name"`
|
DisplayName string `json:"display_name" yaml:"display_name"`
|
||||||
|
|
||||||
@@ -76,8 +79,8 @@ type PluginSettingsSchema struct {
|
|||||||
// Optional text to display below the settings.
|
// Optional text to display below the settings.
|
||||||
Footer string `json:"footer" yaml:"footer"`
|
Footer string `json:"footer" yaml:"footer"`
|
||||||
|
|
||||||
// A mapping of setting keys to schema definitions.
|
// A list of setting definitions.
|
||||||
Settings map[string]*PluginSetting `json:"settings" yaml:"settings"`
|
Settings []*PluginSetting `json:"settings" yaml:"settings"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// The plugin manifest defines the metadata required to load and present your plugin. The manifest
|
// The plugin manifest defines the metadata required to load and present your plugin. The manifest
|
||||||
@@ -93,11 +96,11 @@ type PluginSettingsSchema struct {
|
|||||||
// executable: myplugin
|
// executable: myplugin
|
||||||
// settings_schema:
|
// settings_schema:
|
||||||
// settings:
|
// settings:
|
||||||
// enable_extra_thing:
|
// - key: enable_extra_thing
|
||||||
// type: bool
|
// type: bool
|
||||||
// display_name: Enable Extra Thing
|
// display_name: Enable Extra Thing
|
||||||
// help_text: When true, an extra thing will be enabled!
|
// help_text: When true, an extra thing will be enabled!
|
||||||
// default: false
|
// default: false
|
||||||
type Manifest struct {
|
type Manifest struct {
|
||||||
// The id is a globally unique identifier that represents your plugin. Reverse-DNS notation
|
// The id is a globally unique identifier that represents your plugin. Reverse-DNS notation
|
||||||
// using a name you control is a good option. For example, "com.mycompany.myplugin".
|
// using a name you control is a good option. For example, "com.mycompany.myplugin".
|
||||||
@@ -126,6 +129,8 @@ type Manifest struct {
|
|||||||
type ManifestBackend struct {
|
type ManifestBackend struct {
|
||||||
// The path to your executable binary. This should be relative to the root of your bundle and the
|
// The path to your executable binary. This should be relative to the root of your bundle and the
|
||||||
// location of the manifest file.
|
// location of the manifest file.
|
||||||
|
//
|
||||||
|
// On Windows, this file must have a ".exe" extension.
|
||||||
Executable string `json:"executable" yaml:"executable"`
|
Executable string `json:"executable" yaml:"executable"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -70,8 +70,9 @@ func TestManifestUnmarshal(t *testing.T) {
|
|||||||
SettingsSchema: &PluginSettingsSchema{
|
SettingsSchema: &PluginSettingsSchema{
|
||||||
Header: "theheadertext",
|
Header: "theheadertext",
|
||||||
Footer: "thefootertext",
|
Footer: "thefootertext",
|
||||||
Settings: map[string]*PluginSetting{
|
Settings: []*PluginSetting{
|
||||||
"thesetting": &PluginSetting{
|
&PluginSetting{
|
||||||
|
Key: "thesetting",
|
||||||
DisplayName: "thedisplayname",
|
DisplayName: "thedisplayname",
|
||||||
Type: PLUGIN_CONFIG_TYPE_DROPDOWN,
|
Type: PLUGIN_CONFIG_TYPE_DROPDOWN,
|
||||||
HelpText: "thehelptext",
|
HelpText: "thehelptext",
|
||||||
@@ -100,16 +101,16 @@ settings_schema:
|
|||||||
header: theheadertext
|
header: theheadertext
|
||||||
footer: thefootertext
|
footer: thefootertext
|
||||||
settings:
|
settings:
|
||||||
thesetting:
|
- key: thesetting
|
||||||
display_name: thedisplayname
|
display_name: thedisplayname
|
||||||
type: dropdown
|
type: dropdown
|
||||||
help_text: thehelptext
|
help_text: thehelptext
|
||||||
regenerate_help_text: theregeneratehelptext
|
regenerate_help_text: theregeneratehelptext
|
||||||
placeholder: theplaceholder
|
placeholder: theplaceholder
|
||||||
options:
|
options:
|
||||||
- display_name: theoptiondisplayname
|
- display_name: theoptiondisplayname
|
||||||
value: thevalue
|
value: thevalue
|
||||||
default: thedefault
|
default: thedefault
|
||||||
`), &yamlResult))
|
`), &yamlResult))
|
||||||
assert.Equal(t, expected, yamlResult)
|
assert.Equal(t, expected, yamlResult)
|
||||||
|
|
||||||
@@ -125,22 +126,23 @@ settings_schema:
|
|||||||
"settings_schema": {
|
"settings_schema": {
|
||||||
"header": "theheadertext",
|
"header": "theheadertext",
|
||||||
"footer": "thefootertext",
|
"footer": "thefootertext",
|
||||||
"settings": {
|
"settings": [
|
||||||
"thesetting": {
|
{
|
||||||
"display_name": "thedisplayname",
|
"key": "thesetting",
|
||||||
"type": "dropdown",
|
"display_name": "thedisplayname",
|
||||||
"help_text": "thehelptext",
|
"type": "dropdown",
|
||||||
"regenerate_help_text": "theregeneratehelptext",
|
"help_text": "thehelptext",
|
||||||
"placeholder": "theplaceholder",
|
"regenerate_help_text": "theregeneratehelptext",
|
||||||
"options": [
|
"placeholder": "theplaceholder",
|
||||||
{
|
"options": [
|
||||||
"display_name": "theoptiondisplayname",
|
{
|
||||||
"value": "thevalue"
|
"display_name": "theoptiondisplayname",
|
||||||
}
|
"value": "thevalue"
|
||||||
],
|
}
|
||||||
"default": "thedefault"
|
],
|
||||||
}
|
"default": "thedefault"
|
||||||
}
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}`), &jsonResult))
|
}`), &jsonResult))
|
||||||
assert.Equal(t, expected, jsonResult)
|
assert.Equal(t, expected, jsonResult)
|
||||||
@@ -175,8 +177,9 @@ func TestManifestJson(t *testing.T) {
|
|||||||
SettingsSchema: &PluginSettingsSchema{
|
SettingsSchema: &PluginSettingsSchema{
|
||||||
Header: "theheadertext",
|
Header: "theheadertext",
|
||||||
Footer: "thefootertext",
|
Footer: "thefootertext",
|
||||||
Settings: map[string]*PluginSetting{
|
Settings: []*PluginSetting{
|
||||||
"thesetting": &PluginSetting{
|
&PluginSetting{
|
||||||
|
Key: "thesetting",
|
||||||
DisplayName: "thedisplayname",
|
DisplayName: "thedisplayname",
|
||||||
Type: PLUGIN_CONFIG_TYPE_DROPDOWN,
|
Type: PLUGIN_CONFIG_TYPE_DROPDOWN,
|
||||||
HelpText: "thehelptext",
|
HelpText: "thehelptext",
|
||||||
@@ -239,8 +242,9 @@ func TestManifestClientManifest(t *testing.T) {
|
|||||||
SettingsSchema: &PluginSettingsSchema{
|
SettingsSchema: &PluginSettingsSchema{
|
||||||
Header: "theheadertext",
|
Header: "theheadertext",
|
||||||
Footer: "thefootertext",
|
Footer: "thefootertext",
|
||||||
Settings: map[string]*PluginSetting{
|
Settings: []*PluginSetting{
|
||||||
"thesetting": &PluginSetting{
|
&PluginSetting{
|
||||||
|
Key: "thesetting",
|
||||||
DisplayName: "thedisplayname",
|
DisplayName: "thedisplayname",
|
||||||
Type: PLUGIN_CONFIG_TYPE_DROPDOWN,
|
Type: PLUGIN_CONFIG_TYPE_DROPDOWN,
|
||||||
HelpText: "thehelptext",
|
HelpText: "thehelptext",
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user