PLT-6706: add /code command (#6936)
* add /code command * return an error for empty /code message
Этот коммит содержится в:
44
app/command_code.go
Обычный файл
44
app/command_code.go
Обычный файл
@@ -0,0 +1,44 @@
|
||||
// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
|
||||
// See License.txt for license information.
|
||||
|
||||
package app
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/mattermost/platform/model"
|
||||
goi18n "github.com/nicksnyder/go-i18n/i18n"
|
||||
)
|
||||
|
||||
type CodeProvider struct {
|
||||
}
|
||||
|
||||
const (
|
||||
CMD_CODE = "code"
|
||||
)
|
||||
|
||||
func init() {
|
||||
RegisterCommandProvider(&CodeProvider{})
|
||||
}
|
||||
|
||||
func (me *CodeProvider) GetTrigger() string {
|
||||
return CMD_CODE
|
||||
}
|
||||
|
||||
func (me *CodeProvider) GetCommand(T goi18n.TranslateFunc) *model.Command {
|
||||
return &model.Command{
|
||||
Trigger: CMD_CODE,
|
||||
AutoComplete: true,
|
||||
AutoCompleteDesc: T("api.command_code.desc"),
|
||||
AutoCompleteHint: T("api.command_code.hint"),
|
||||
DisplayName: T("api.command_code.name"),
|
||||
}
|
||||
}
|
||||
|
||||
func (me *CodeProvider) DoCommand(args *model.CommandArgs, message string) *model.CommandResponse {
|
||||
if len(message) == 0 {
|
||||
return &model.CommandResponse{Text: args.T("api.command_code.message.app_error"), ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL}
|
||||
}
|
||||
rmsg := " " + strings.Join(strings.Split(message, "\n"), "\n ")
|
||||
return &model.CommandResponse{ResponseType: model.COMMAND_RESPONSE_TYPE_IN_CHANNEL, Text: rmsg}
|
||||
}
|
||||
26
app/command_code_test.go
Обычный файл
26
app/command_code_test.go
Обычный файл
@@ -0,0 +1,26 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/mattermost/platform/model"
|
||||
)
|
||||
|
||||
func TestCodeProviderDoCommand(t *testing.T) {
|
||||
cp := CodeProvider{}
|
||||
args := &model.CommandArgs{
|
||||
T: func(s string, args ...interface{}) string { return s },
|
||||
}
|
||||
|
||||
for msg, expected := range map[string]string{
|
||||
"": "api.command_code.message.app_error",
|
||||
"foo": " foo",
|
||||
"foo\nbar": " foo\n bar",
|
||||
"foo\nbar\n": " foo\n bar\n ",
|
||||
} {
|
||||
actual := cp.DoCommand(args, msg).Text
|
||||
if actual != expected {
|
||||
t.Errorf("expected `%v`, got `%v`", expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
16
i18n/en.json
16
i18n/en.json
@@ -919,6 +919,22 @@
|
||||
"id": "api.command_shortcuts.nav.unread_prev",
|
||||
"translation": "ALT+SHIFT+UP: Previous channel or direct message in left hand sidebar with unread messages\n"
|
||||
},
|
||||
{
|
||||
"id": "api.command_code.desc",
|
||||
"translation": "Display text as a code block"
|
||||
},
|
||||
{
|
||||
"id": "api.command_code.hint",
|
||||
"translation": "[text]"
|
||||
},
|
||||
{
|
||||
"id": "api.command_code.name",
|
||||
"translation": "code"
|
||||
},
|
||||
{
|
||||
"id": "api.command_code.message.app_error",
|
||||
"translation": "A message must be provided with the /code command."
|
||||
},
|
||||
{
|
||||
"id": "api.command_shrug.desc",
|
||||
"translation": "Adds ¯\\_(ツ)_/¯ to your message"
|
||||
|
||||
Ссылка в новой задаче
Block a user