From 4f893dbb445977a2a0a71d69e8ae9cb7caa0c55c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Hr=C4=8Dek?= Date: Sun, 9 Dec 2018 11:22:43 +0100 Subject: [PATCH] Use elm/file to simplify file export --- dist/index.html | 18 ------------------ elm.json | 4 +++- src/Main.elm | 12 +++++------- src/Ports.elm | 6 +----- 4 files changed, 9 insertions(+), 31 deletions(-) diff --git a/dist/index.html b/dist/index.html index a17519e..1aef01f 100644 --- a/dist/index.html +++ b/dist/index.html @@ -32,24 +32,6 @@ }) }); - /* Port for initiating download of graph export file */ - app.ports.download.subscribe(function(msg) { - /* taken from https://stackoverflow.com/a/33542499/403702 */ - var blob = new Blob([msg.data], { - type: 'text/plain' - }); - if (window.navigator.msSaveOrOpenBlob) { - window.navigator.msSaveBlob(blob, msg.filename); - } else { - var elem = window.document.createElement('a'); - elem.href = window.URL.createObjectURL(blob); - elem.download = msg.filename; - document.body.appendChild(elem); - elem.click(); - document.body.removeChild(elem); - } - }); - /* Port for calling external graphviz library (viz.js). Given graphviz source * String (without layout info) it will generate output in graphviz "plain" format, * enriched by layout information (x,y) of individual nodes. diff --git a/elm.json b/elm.json index 43692fd..b7ee021 100644 --- a/elm.json +++ b/elm.json @@ -8,6 +8,7 @@ "direct": { "elm/browser": "1.0.1", "elm/core": "1.0.2", + "elm/file": "1.0.1", "elm/html": "1.0.0", "elm/json": "1.1.2", "elm/parser": "1.1.0", @@ -18,6 +19,7 @@ }, "indirect": { "avh4/elm-fifo": "1.0.4", + "elm/bytes": "1.0.7", "elm/time": "1.0.0", "elm/url": "1.0.0", "elm/virtual-dom": "1.0.2" @@ -31,4 +33,4 @@ "elm/random": "1.0.0" } } -} +} \ No newline at end of file diff --git a/src/Main.elm b/src/Main.elm index 8aa12c3..421ec0f 100644 --- a/src/Main.elm +++ b/src/Main.elm @@ -4,6 +4,7 @@ import Browser import Browser.Dom import Browser.Events import Export +import File.Download import Graph exposing (NodeId) import GraphUtil import GraphViz.VizJs @@ -229,19 +230,16 @@ update msg model = Download exportFormat -> let - ( fileExtension, graphToString ) = + ( graphToString, fileName ) = case exportFormat of Types.Dot -> - ( "gv", Export.toDot ) + ( Export.toDot, "graph.dot" ) Types.Tgf -> - ( "tgf", Export.toTgf ) + ( Export.toTgf, "graph.tgf" ) in ( model - , Ports.download - { filename = "graph." ++ fileExtension - , data = graphToString model.graph - } + , File.Download.string fileName "text/plain" (graphToString model.graph) ) ReceiveLayoutInfoFromGraphviz jsonVal -> diff --git a/src/Ports.elm b/src/Ports.elm index 1d3e15c..0b341fa 100644 --- a/src/Ports.elm +++ b/src/Ports.elm @@ -1,6 +1,5 @@ port module Ports exposing - ( download - , receiveGraphVizPlain + ( receiveGraphVizPlain , requestBoundingBoxesForContext , requestBoundingBoxesForEverything , requestEdgeTextBoundingBox @@ -76,9 +75,6 @@ port requestBoundingBox : String -> Cmd msg port setBoundingBox : (BBox -> msg) -> Sub msg -port download : { filename : String, data : String } -> Cmd msg - - {-| Request to transform Graphviz dot String to Graphviz plain. The resulting plain output will contain additional info about node layout which we'll parse out and adjust node positions for nicer layout. -}