Add markdown sending.
This commit is contained in:
parent
c483e6ac6c
commit
eb9e82483b
20
src/Main.elm
20
src/Main.elm
|
@ -11,6 +11,7 @@ import Scylla.Route exposing (Route(..), RoomId)
|
|||
import Scylla.UserData exposing (..)
|
||||
import Scylla.Notification exposing (..)
|
||||
import Scylla.Storage exposing (..)
|
||||
import Scylla.Markdown exposing (..)
|
||||
import Url exposing (Url)
|
||||
import Url.Parser exposing (parse)
|
||||
import Url.Builder
|
||||
|
@ -90,6 +91,17 @@ update msg model = case msg of
|
|||
FileUploadComplete rid mime ur -> updateFileUploadComplete model rid mime ur
|
||||
SendImageResponse _ -> (model, Cmd.none)
|
||||
SendFileResponse _ -> (model, Cmd.none)
|
||||
ReceiveMarkdown md -> updateMarkdown model md
|
||||
|
||||
updateMarkdown : Model -> MarkdownResponse -> (Model, Cmd Msg)
|
||||
updateMarkdown m { roomId, text, markdown } =
|
||||
let
|
||||
storeValueCmd = setStoreValuePort ("scylla.loginInfo", Json.Encode.string
|
||||
<| encodeLoginInfo
|
||||
<| LoginInfo (Maybe.withDefault "" m.token) m.apiUrl m.loginUsername (m.transactionId + 1))
|
||||
sendMessageCmd = sendMarkdownMessage m.apiUrl (Maybe.withDefault "" m.token) (m.transactionId + 1) roomId text markdown
|
||||
in
|
||||
({ m | transactionId = m.transactionId + 1 }, Cmd.batch [ storeValueCmd, sendMessageCmd ])
|
||||
|
||||
updateFileUploadComplete : Model -> RoomId -> String -> (Result Http.Error String) -> (Model, Cmd Msg)
|
||||
updateFileUploadComplete m rid mime ur =
|
||||
|
@ -224,14 +236,11 @@ updateSendRoomText m r =
|
|||
combinedCmd = case message of
|
||||
Nothing -> Cmd.none
|
||||
Just s -> Cmd.batch
|
||||
[ sendTextMessage m.apiUrl token m.transactionId r s
|
||||
[ requestMarkdownPort { roomId = r, text = s }
|
||||
, sendTypingIndicator m.apiUrl token r m.loginUsername False typingTimeout
|
||||
, setStoreValuePort ("scylla.loginInfo", Json.Encode.string
|
||||
<| encodeLoginInfo
|
||||
<| LoginInfo (Maybe.withDefault "" m.token) m.apiUrl m.loginUsername (m.transactionId + 1))
|
||||
]
|
||||
in
|
||||
({ m | roomText = Dict.insert r "" m.roomText, transactionId = m.transactionId + 1 }, combinedCmd)
|
||||
({ m | roomText = Dict.insert r "" m.roomText }, combinedCmd)
|
||||
|
||||
updateTryUrl : Model -> Browser.UrlRequest -> (Model, Cmd Msg)
|
||||
updateTryUrl m ur = case ur of
|
||||
|
@ -315,6 +324,7 @@ subscriptions m =
|
|||
[ onNotificationClickPort OpenRoom
|
||||
, receiveStoreValuePort ReceiveStoreData
|
||||
, typingTimer
|
||||
, receiveMarkdownPort ReceiveMarkdown
|
||||
]
|
||||
|
||||
onUrlRequest : Browser.UrlRequest -> Msg
|
||||
|
|
|
@ -76,6 +76,14 @@ sendMessage apiUrl token transactionId room msg contents = request
|
|||
, tracker = Nothing
|
||||
}
|
||||
|
||||
sendMarkdownMessage : ApiUrl -> ApiToken -> Int -> RoomId -> String -> String -> Cmd Msg
|
||||
sendMarkdownMessage apiUrl token transactionId room message md = sendMessage apiUrl token transactionId room SendRoomTextResponse
|
||||
[ ("msgtype", string "m.text")
|
||||
, ("body", string message)
|
||||
, ("formatted_body", string md)
|
||||
, ("format", string "org.matrix.custom.html")
|
||||
]
|
||||
|
||||
sendTextMessage : ApiUrl -> ApiToken -> Int -> RoomId -> String -> Cmd Msg
|
||||
sendTextMessage apiUrl token transactionId room message = sendMessage apiUrl token transactionId room SendRoomTextResponse
|
||||
[ ("msgtype", string "m.text")
|
||||
|
|
15
src/Scylla/Markdown.elm
Normal file
15
src/Scylla/Markdown.elm
Normal file
|
@ -0,0 +1,15 @@
|
|||
port module Scylla.Markdown exposing (..)
|
||||
|
||||
type alias MarkdownRequest =
|
||||
{ roomId : String
|
||||
, text : String
|
||||
}
|
||||
|
||||
type alias MarkdownResponse =
|
||||
{ roomId : String
|
||||
, text : String
|
||||
, markdown : String
|
||||
}
|
||||
|
||||
port requestMarkdownPort : MarkdownRequest -> Cmd msg
|
||||
port receiveMarkdownPort : (MarkdownResponse -> msg) -> Sub msg
|
|
@ -5,6 +5,7 @@ import Scylla.Login exposing (LoginResponse, Username, Password)
|
|||
import Scylla.UserData exposing (UserData)
|
||||
import Scylla.Route exposing (Route(..), RoomId)
|
||||
import Scylla.Storage exposing (..)
|
||||
import Scylla.Markdown exposing (..)
|
||||
import Browser.Navigation as Nav
|
||||
import Browser.Dom exposing (Viewport)
|
||||
import Url.Builder
|
||||
|
@ -61,6 +62,7 @@ type Msg =
|
|||
| FileUploadComplete RoomId String (Result Http.Error String)
|
||||
| SendImageResponse (Result Http.Error ())
|
||||
| SendFileResponse (Result Http.Error ())
|
||||
| ReceiveMarkdown MarkdownResponse
|
||||
|
||||
displayName : Model -> Username -> String
|
||||
displayName m s = Maybe.withDefault (senderName s) <| Maybe.andThen .displayName <| Dict.get s m.userData
|
||||
|
|
9
static/js/markdown.js
Normal file
9
static/js/markdown.js
Normal file
|
@ -0,0 +1,9 @@
|
|||
function setupNotificationPorts(app) {
|
||||
app.ports.requestMarkdownPort.subscribe(function(data) {
|
||||
app.ports.receiveMarkdownPort.send({
|
||||
"roomId" : data.roomId,
|
||||
"text" : data.text,
|
||||
"markdown" : marked(data.text)
|
||||
});
|
||||
})
|
||||
}
|
Loading…
Reference in New Issue
Block a user