Unverified Commit 027f74aa authored by Vaibhav Sagar's avatar Vaibhav Sagar Committed by GitHub

Merge pull request #967 from Shimuuar/update_display

Implement update_display_data message
parents fd5cbf34 301df38e
...@@ -195,8 +195,9 @@ replyTo config execCount interface req@ExecuteRequest{} replyHeader = do ...@@ -195,8 +195,9 @@ replyTo config execCount interface req@ExecuteRequest{} replyHeader = do
send $ PublishDisplayData send $ PublishDisplayData
outputHeader outputHeader
(displayOutput config x) (displayOutput config x)
Nothing
in run config (getCode req) clearOutput sendOutput in run config (getCode req) clearOutput sendOutput
liftIO . send $ PublishDisplayData outputHeader (displayResult config res) liftIO . send $ PublishDisplayData outputHeader (displayResult config res) Nothing
idleHeader <- dupHeader replyHeader StatusMessage idleHeader <- dupHeader replyHeader StatusMessage
......
...@@ -168,7 +168,7 @@ displayDataParser :: LByteString -> Message ...@@ -168,7 +168,7 @@ displayDataParser :: LByteString -> Message
displayDataParser = requestParser $ \obj -> do displayDataParser = requestParser $ \obj -> do
dataDict :: Object <- obj .: "data" dataDict :: Object <- obj .: "data"
let displayDatas = makeDisplayDatas dataDict let displayDatas = makeDisplayDatas dataDict
return $ PublishDisplayData noHeader displayDatas return $ PublishDisplayData noHeader displayDatas Nothing
requestParser :: FromJSON a => (a -> Parser Message) -> LByteString -> Message requestParser :: FromJSON a => (a -> Parser Message) -> LByteString -> Message
requestParser parser content = requestParser parser content =
......
...@@ -16,6 +16,7 @@ module IHaskell.IPython.Types ( ...@@ -16,6 +16,7 @@ module IHaskell.IPython.Types (
Message(..), Message(..),
MessageHeader(..), MessageHeader(..),
Username, Username,
Transient(..),
MessageType(..), MessageType(..),
CodeReview(..), CodeReview(..),
Width, Width,
...@@ -184,6 +185,7 @@ data MessageType = KernelInfoReplyMessage ...@@ -184,6 +185,7 @@ data MessageType = KernelInfoReplyMessage
| StatusMessage | StatusMessage
| StreamMessage | StreamMessage
| DisplayDataMessage | DisplayDataMessage
| UpdateDisplayDataMessage
| OutputMessage | OutputMessage
| InputMessage | InputMessage
| IsCompleteRequestMessage | IsCompleteRequestMessage
...@@ -217,6 +219,7 @@ showMessageType ExecuteResultMessage = "execute_result" ...@@ -217,6 +219,7 @@ showMessageType ExecuteResultMessage = "execute_result"
showMessageType StatusMessage = "status" showMessageType StatusMessage = "status"
showMessageType StreamMessage = "stream" showMessageType StreamMessage = "stream"
showMessageType DisplayDataMessage = "display_data" showMessageType DisplayDataMessage = "display_data"
showMessageType UpdateDisplayDataMessage = "update_display_data"
showMessageType OutputMessage = "pyout" showMessageType OutputMessage = "pyout"
showMessageType InputMessage = "pyin" showMessageType InputMessage = "pyin"
showMessageType IsCompleteRequestMessage = "is_complete_request" showMessageType IsCompleteRequestMessage = "is_complete_request"
...@@ -251,6 +254,7 @@ instance FromJSON MessageType where ...@@ -251,6 +254,7 @@ instance FromJSON MessageType where
"status" -> return StatusMessage "status" -> return StatusMessage
"stream" -> return StreamMessage "stream" -> return StreamMessage
"display_data" -> return DisplayDataMessage "display_data" -> return DisplayDataMessage
"update_display_data" -> return UpdateDisplayDataMessage
"pyout" -> return OutputMessage "pyout" -> return OutputMessage
"pyin" -> return InputMessage "pyin" -> return InputMessage
"is_complete_request" -> return IsCompleteRequestMessage "is_complete_request" -> return IsCompleteRequestMessage
...@@ -301,6 +305,16 @@ data CodeReview = CodeComplete ...@@ -301,6 +305,16 @@ data CodeReview = CodeComplete
| CodeUnknown | CodeUnknown
deriving Show deriving Show
newtype Transient = Transient
{ transientDisplayId :: UUID
}
deriving (Show, Eq)
instance ToJSON Transient where
toJSON t = object [ "display_id" .= transientDisplayId t
]
-- | A message used to communicate with the IPython frontend. -- | A message used to communicate with the IPython frontend.
data Message = data Message =
-- | A request from a frontend for information about the kernel. -- | A request from a frontend for information about the kernel.
...@@ -384,6 +398,13 @@ data Message = ...@@ -384,6 +398,13 @@ data Message =
PublishDisplayData PublishDisplayData
{ header :: MessageHeader { header :: MessageHeader
, displayData :: [DisplayData] -- ^ A list of data representations. , displayData :: [DisplayData] -- ^ A list of data representations.
, transient :: Maybe Transient
}
|
PublishUpdateDisplayData
{ header :: MessageHeader
, displayData :: [DisplayData] -- ^ A list of data representations.
, transient :: Maybe Transient
} }
| |
PublishOutput PublishOutput
...@@ -544,10 +565,22 @@ instance ToJSON Message where ...@@ -544,10 +565,22 @@ instance ToJSON Message where
object ["execution_state" .= executionState] object ["execution_state" .= executionState]
toJSON PublishStream { streamType = streamType, streamContent = content } = toJSON PublishStream { streamType = streamType, streamContent = content } =
object ["data" .= content, "name" .= streamType] object ["data" .= content, "name" .= streamType]
toJSON PublishDisplayData { displayData = datas } = toJSON r@PublishDisplayData { displayData = datas }
object = object
["metadata" .= object [], "data" .= object (map displayDataToJson datas)] $ case transient r of
Just t -> (("transient" .= toJSON (transient r)) :)
Nothing -> id
$ ["metadata" .= object []
, "data" .= object (map displayDataToJson datas)
]
toJSON r@PublishUpdateDisplayData { displayData = datas }
= object
$ case transient r of
Just t -> (("transient" .= toJSON (transient r)) :)
Nothing -> id
$ ["metadata" .= object []
, "data" .= object (map displayDataToJson datas)
]
toJSON PublishOutput { executionCount = execCount, reprText = reprText } = toJSON PublishOutput { executionCount = execCount, reprText = reprText } =
object object
[ "data" .= object ["text/plain" .= reprText] [ "data" .= object ["text/plain" .= reprText]
......
...@@ -171,7 +171,7 @@ data WidgetDisplay = WidgetDisplay MessageHeader [DisplayData] ...@@ -171,7 +171,7 @@ data WidgetDisplay = WidgetDisplay MessageHeader [DisplayData]
instance ToJSON WidgetDisplay where instance ToJSON WidgetDisplay where
toJSON (WidgetDisplay replyHeader ddata) = toJSON (WidgetDisplay replyHeader ddata) =
let pbval = toJSON $ PublishDisplayData replyHeader ddata let pbval = toJSON $ PublishDisplayData replyHeader ddata Nothing
in toJSON $ IPythonMessage replyHeader pbval DisplayDataMessage in toJSON $ IPythonMessage replyHeader pbval DisplayDataMessage
-- Override toJSON for ClearOutput -- Override toJSON for ClearOutput
......
...@@ -67,7 +67,7 @@ publishResult send replyHeader displayed updateNeeded poutput upager result = do ...@@ -67,7 +67,7 @@ publishResult send replyHeader displayed updateNeeded poutput upager result = do
sendOutput (ManyDisplay manyOuts) = mapM_ sendOutput manyOuts sendOutput (ManyDisplay manyOuts) = mapM_ sendOutput manyOuts
sendOutput (Display outs) = do sendOutput (Display outs) = do
hdr <- dupHeader replyHeader DisplayDataMessage hdr <- dupHeader replyHeader DisplayDataMessage
send $ PublishDisplayData hdr $ map (convertSvgToHtml . prependCss) outs send $ PublishDisplayData hdr (map (convertSvgToHtml . prependCss) outs) Nothing
convertSvgToHtml (DisplayData MimeSvg s) = html $ makeSvgImg $ base64 $ E.encodeUtf8 s convertSvgToHtml (DisplayData MimeSvg s) = html $ makeSvgImg $ base64 $ E.encodeUtf8 s
convertSvgToHtml x = x convertSvgToHtml x = x
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment