Call Graph

Elm can’t reflect on its compiled code at runtime; this build-time static analysis route is the idiomatic way to make an Elm app “answer its own call graph.” The miniBill/elm-review-call-graph rule gives you the graph, and elm-review’s “data extractor” mode makes it machine-readable for your app. package , elm-radio , blog

extract

npx elm-review --report=json --extract

# 1) Produce DOT from the extractor output npx elm-review --report=json --extract \ | jq -r ' .extracts.ExtractCallGraph | to_entries | [ .[] | .key as $from | (.value[]? // empty) | [$from, .] ] | unique | ["digraph CallGraph {"," rankdir=LR;"," node [shape=box];"] + (map(" \"" + .[0] + "\" -> \"" + .[1] + "\";")) + ["}"] | .[] ' > call-graph.dot # 2) (optional) Render to SVG dot -Tsvg call-graph.dot > public/call-graph.svg

svg

dot

We use the Graphviz plugin to render the `call-graph.dot` file, which you can find below.

wiki-plugin-graphviz

digraph CallGraph { rankdir=LR; node [shape=box]; "Boxing.boxContainer" -> "Boxing.boxItems"; "Boxing.boxContainer" -> "Boxing.transferContent"; "Boxing.boxContainer" -> "Model.getDisplayMode"; "Boxing.boxItems" -> "Dict.get"; "Boxing.boxItems" -> "Dict.values"; "Boxing.boxItems" -> "List.foldr"; "Boxing.boxItems" -> "Model.getMapIfExists"; "Boxing.boxItems" -> "Model.hideItem_"; "Boxing.isAbort" -> "Basics.False"; "Boxing.isAbort" -> "Basics.True"; "Boxing.setUnboxed" -> "Model.Container"; "Boxing.setUnboxed" -> "Model.MapAssoc"; "Boxing.setUnboxed" -> "Model.MapTopic"; "Boxing.setUnboxed" -> "Model.Unboxed"; "Boxing.targetAssocItem" -> "Basics.False"; "Boxing.targetAssocItem" -> "Dict.get"; "Boxing.targetAssocItem" -> "Model.AssocProps"; "Boxing.targetAssocItem" -> "Model.MapAssoc"; "Boxing.targetAssocItem" -> "Model.MapItem"; "Boxing.transferContent" -> "Model.getMap"; "Boxing.transferContent" -> "Model.updateMaps"; "Boxing.unboxAssoc" -> "Boxing.targetAssocItem"; "Boxing.unboxAssoc" -> "Dict.insert"; "Boxing.unboxContainer" -> "Boxing.transferContent"; "Boxing.unboxContainer" -> "Boxing.unboxItems"; "Boxing.unboxContainer" -> "Model.getDisplayMode"; "Boxing.unboxItems" -> "Basics.not"; "Boxing.unboxItems" -> "Boxing.unboxAssoc"; "Boxing.unboxItems" -> "Boxing.unboxTopic"; "Boxing.unboxItems" -> "Dict.values"; "Boxing.unboxItems" -> "List.filter"; "Boxing.unboxItems" -> "List.foldr"; "Boxing.unboxItems" -> "Model.getMapIfExists"; "Boxing.unboxItems" -> "Model.isMapTopic"; "Boxing.unboxItems" -> "Model.isVisible"; "Boxing.unboxTopic" -> "Basics.False"; "Boxing.unboxTopic" -> "Basics.not"; "Boxing.unboxTopic" -> "Boxing.isAbort"; "Boxing.unboxTopic" -> "Boxing.setUnboxed"; "Boxing.unboxTopic" -> "Boxing.targetAssocItem"; "Boxing.unboxTopic" -> "Dict.get"; "Boxing.unboxTopic" -> "Dict.insert"; "Boxing.unboxTopic" -> "Model.hasMap"; "Boxing.unboxTopic" -> "Utils.info"; "Config.newTopicPos" -> "Model.Point"; "Config.topicDetailSize" -> "Config.contentFontSize"; "Config.topicDetailSize" -> "Config.topicBorderWidth"; "Config.topicDetailSize" -> "Config.topicDetailPadding"; "Config.topicDetailSize" -> "Config.topicHeight"; "Config.topicDetailSize" -> "Config.topicLineHeight"; "Config.topicDetailSize" -> "Config.topicWidth"; "Config.topicDetailSize" -> "Model.Size"; "Config.topicH2" -> "Config.topicHeight"; "Config.topicSize" -> "Config.topicHeight"; "Config.topicSize" -> "Config.topicWidth"; "Config.topicSize" -> "Model.Size"; "Config.topicW2" -> "Config.topicWidth"; "Config.whiteBoxRange" -> "Model.Size"; "IconMenu.closeButtonStyle" -> "Html.Attributes.style"; "IconMenu.closeIconMenu" -> "Basics.False"; "IconMenu.iconButtonStyle" -> "Html.Attributes.style"; "IconMenu.iconListStyle" -> "Html.Attributes.style"; "IconMenu.iconMenuStyle" -> "Html.Attributes.style"; "IconMenu.openIconMenu" -> "Basics.True"; "IconMenu.setIcon" -> "Model.getSingleSelection"; "IconMenu.setIcon" -> "Model.updateTopicInfo"; "IconMenu.topicIconStyle" -> "Config.topicIconSize"; "IconMenu.topicIconStyle" -> "Config.topicSize"; "IconMenu.topicIconStyle" -> "Html.Attributes.style"; "IconMenu.topicIconStyle" -> "String.fromFloat"; "IconMenu.updateIconMenu" -> "IconMenu.closeIconMenu"; "IconMenu.updateIconMenu" -> "IconMenu.openIconMenu"; "IconMenu.updateIconMenu" -> "IconMenu.setIcon"; "IconMenu.updateIconMenu" -> "Platform.Cmd.none"; "IconMenu.updateIconMenu" -> "Storage.storeModel"; "IconMenu.viewIcon" -> "Dict.get"; "IconMenu.viewIcon" -> "FeatherIcons.icons"; "IconMenu.viewIcon" -> "FeatherIcons.toHtml"; "IconMenu.viewIcon" -> "FeatherIcons.withSize"; "IconMenu.viewIcon" -> "Html.text"; "IconMenu.viewIconList" -> "Dict.toList"; "IconMenu.viewIconList" -> "FeatherIcons.icons"; "IconMenu.viewIconList" -> "FeatherIcons.toHtml"; "IconMenu.viewIconList" -> "Html.Attributes.title"; "IconMenu.viewIconList" -> "Html.Events.onClick"; "IconMenu.viewIconList" -> "Html.button"; "IconMenu.viewIconList" -> "IconMenu.iconButtonStyle"; "IconMenu.viewIconList" -> "List.map"; "IconMenu.viewIconList" -> "Maybe.Just"; "IconMenu.viewIconList" -> "Model.IconMenu"; "IconMenu.viewIconList" -> "Model.NoOp"; "IconMenu.viewIconList" -> "Model.SetIcon"; "IconMenu.viewIconList" -> "Utils.stopPropagationOnMousedown"; "IconMenu.viewIconMenu" -> "FeatherIcons.toHtml"; "IconMenu.viewIconMenu" -> "FeatherIcons.withSize"; "IconMenu.viewIconMenu" -> "FeatherIcons.x"; "IconMenu.viewIconMenu" -> "Html.Events.onClick"; "IconMenu.viewIconMenu" -> "Html.button"; "IconMenu.viewIconMenu" -> "Html.div"; "IconMenu.viewIconMenu" -> "IconMenu.closeButtonStyle"; "IconMenu.viewIconMenu" -> "IconMenu.iconListStyle"; "IconMenu.viewIconMenu" -> "IconMenu.iconMenuStyle"; "IconMenu.viewIconMenu" -> "IconMenu.viewIconList"; "IconMenu.viewIconMenu" -> "Model.Close"; "IconMenu.viewIconMenu" -> "Model.IconMenu"; "IconMenu.viewTopicIcon" -> "Config.topicIconSize"; "IconMenu.viewTopicIcon" -> "Dict.get"; "IconMenu.viewTopicIcon" -> "FeatherIcons.icons"; "IconMenu.viewTopicIcon" -> "FeatherIcons.toHtml"; "IconMenu.viewTopicIcon" -> "FeatherIcons.withSize"; "IconMenu.viewTopicIcon" -> "Html.text"; "IconMenu.viewTopicIcon" -> "IconMenu.topicIconStyle"; "IconMenu.viewTopicIcon" -> "Model.getTopicInfo"; "Main.adjustMapRect" -> "Model.Rectangle"; "Main.adjustMapRect" -> "Model.updateMapRect"; "Main.appStyle" -> "Config.mainFont"; "Main.appStyle" -> "Html.Attributes.style"; "Main.back" -> "Main.adjustMapRect"; "Main.back" -> "MapAutoSize.autoSize"; "Main.back" -> "Utils.logError"; "Main.buttonStyle" -> "Config.mainFont"; "Main.buttonStyle" -> "Config.toolbarFontSize"; "Main.buttonStyle" -> "Html.Attributes.style"; "Main.buttonStyle" -> "String.fromInt"; "Main.createAssocAndAddToMap" -> "Model.AssocProps"; "Main.createAssocAndAddToMap" -> "Model.MapAssoc"; "Main.createAssocAndAddToMap" -> "Model.addItemToMap"; "Main.createAssocAndAddToMap" -> "Model.createAssoc"; "Main.createDefaultAssoc" -> "Main.createAssocAndAddToMap"; "Main.createMapIfNeeded" -> "Basics.False"; "Main.createMapIfNeeded" -> "Basics.True"; "Main.createMapIfNeeded" -> "Dict.empty"; "Main.createMapIfNeeded" -> "Dict.insert"; "Main.createMapIfNeeded" -> "Model.BlackBox"; "Main.createMapIfNeeded" -> "Model.Container"; "Main.createMapIfNeeded" -> "Model.Map"; "Main.createMapIfNeeded" -> "Model.Rectangle"; "Main.createMapIfNeeded" -> "Model.hasMap"; "Main.createMapIfNeeded" -> "Model.setDisplayMode"; "Main.createTopicAndAddToMap" -> "Config.newTopicPos"; "Main.createTopicAndAddToMap" -> "Config.topicDefaultText"; "Main.createTopicAndAddToMap" -> "Config.topicDetailSize"; "Main.createTopicAndAddToMap" -> "Maybe.Nothing"; "Main.createTopicAndAddToMap" -> "Model.LabelOnly"; "Main.createTopicAndAddToMap" -> "Model.MapTopic"; "Main.createTopicAndAddToMap" -> "Model.Monad"; "Main.createTopicAndAddToMap" -> "Model.Point"; "Main.createTopicAndAddToMap" -> "Model.TopicProps"; "Main.createTopicAndAddToMap" -> "Model.addItemToMap"; "Main.createTopicAndAddToMap" -> "Model.createTopic"; "Main.createTopicAndAddToMap" -> "Model.getMap"; "Main.createTopicAndAddToMap" -> "Model.select"; "Main.delete" -> "List.foldr"; "Main.delete" -> "List.map"; "Main.delete" -> "MapAutoSize.autoSize"; "Main.delete" -> "Model.deleteItem"; "Main.delete" -> "Tuple.first"; "Main.displayModeStyle" -> "Html.Attributes.style"; "Main.dragSub" -> "Browser.Events.onMouseMove"; "Main.dragSub" -> "Browser.Events.onMouseUp"; "Main.dragSub" -> "Json.Decode.field"; "Main.dragSub" -> "Json.Decode.float"; "Main.dragSub" -> "Json.Decode.map"; "Main.dragSub" -> "Json.Decode.map2"; "Main.dragSub" -> "Json.Decode.succeed"; "Main.dragSub" -> "Model.Mouse"; "Main.dragSub" -> "Model.Move"; "Main.dragSub" -> "Model.Point"; "Main.dragSub" -> "Model.Up"; "Main.dragSub" -> "Platform.Sub.batch"; "Main.endEdit" -> "MapAutoSize.autoSize"; "Main.endEdit" -> "Model.NoEdit"; "Main.focus" -> "Browser.Dom.focus"; "Main.focus" -> "Model.NoOp"; "Main.focus" -> "String.fromInt"; "Main.focus" -> "Task.attempt"; "Main.focus" -> "Utils.logError"; "Main.focus" -> "Utils.toString"; "Main.footerStyle" -> "Config.footerFontSize"; "Main.footerStyle" -> "Html.Attributes.style"; "Main.footerStyle" -> "String.fromInt"; "Main.fullscreen" -> "Main.adjustMapRect"; "Main.fullscreen" -> "Main.createMapIfNeeded"; "Main.fullscreen" -> "Model.getSingleSelection"; "Main.fullscreen" -> "Tuple.first"; "Main.getMapName" -> "Config.homeMapName"; "Main.getMapName" -> "Model.activeMap"; "Main.getMapName" -> "Model.getTopicInfo"; "Main.getMapName" -> "Model.getTopicLabel"; "Main.getMapName" -> "Model.isHome"; "Main.hide" -> "List.foldr"; "Main.hide" -> "MapAutoSize.autoSize"; "Main.hide" -> "Model.hideItem"; "Main.init" -> "Basics.True"; "Main.init" -> "Json.Decode.decodeValue"; "Main.init" -> "Json.Decode.null"; "Main.init" -> "Model.defaultModel"; "Main.init" -> "Platform.Cmd.none"; "Main.init" -> "Storage.modelDecoder"; "Main.init" -> "String.fromInt"; "Main.init" -> "String.length"; "Main.init" -> "Utils.info"; "Main.init" -> "Utils.logError"; "Main.init" -> "Utils.toString"; "Main.linkStyle" -> "Html.Attributes.style"; "Main.main" -> "Browser.document"; "Main.main" -> "Main.init"; "Main.main" -> "Main.subscriptions"; "Main.main" -> "Main.update"; "Main.main" -> "Main.view"; "Main.mapNavStyle" -> "Html.Attributes.style"; "Main.mapTitleStyle" -> "Html.Attributes.style"; "Main.measureStyle" -> "Config.contentFontSize"; "Main.measureStyle" -> "Config.mainFont"; "Main.measureStyle" -> "Config.topicBorderWidth"; "Main.measureStyle" -> "Config.topicDetailMaxWidth"; "Main.measureStyle" -> "Config.topicDetailPadding"; "Main.measureStyle" -> "Config.topicLineHeight"; "Main.measureStyle" -> "Config.topicSize"; "Main.measureStyle" -> "Html.Attributes.style"; "Main.measureStyle" -> "String.fromFloat"; "Main.measureStyle" -> "String.fromInt"; "Main.measureText" -> "Browser.Dom.getElement"; "Main.measureText" -> "Model.Edit"; "Main.measureText" -> "Model.NoOp"; "Main.measureText" -> "Model.SetTopicSize"; "Main.measureText" -> "Model.Size"; "Main.measureText" -> "Task.attempt"; "Main.measureText" -> "Utils.logError"; "Main.measureText" -> "Utils.toString"; "Main.mouseDecoder" -> "Json.Decode.andThen"; "Main.mouseDecoder" -> "Json.Decode.at"; "Main.mouseDecoder" -> "Json.Decode.map"; "Main.mouseDecoder" -> "Json.Decode.map3"; "Main.mouseDecoder" -> "Json.Decode.oneOf"; "Main.mouseDecoder" -> "Json.Decode.string"; "Main.mouseDecoder" -> "Model.Mouse"; "Main.mouseDecoder" -> "Utils.strToIntDecoder"; "Main.mouseDown" -> "IconMenu.closeIconMenu"; "Main.mouseDown" -> "Search.closeResultMenu"; "Main.mouseDownOnItem" -> "Model.Mouse"; "Main.mouseDownOnItem" -> "Model.Time"; "Main.mouseDownOnItem" -> "Model.WaitForStartTime"; "Main.mouseDownOnItem" -> "Model.select"; "Main.mouseDownOnItem" -> "Task.perform"; "Main.mouseDownOnItem" -> "Time.now"; "Main.mouseDownSub" -> "Browser.Events.onMouseDown"; "Main.mouseDownSub" -> "Json.Decode.andThen"; "Main.mouseDownSub" -> "Json.Decode.at"; "Main.mouseDownSub" -> "Json.Decode.field"; "Main.mouseDownSub" -> "Json.Decode.float"; "Main.mouseDownSub" -> "Json.Decode.map"; "Main.mouseDownSub" -> "Json.Decode.map2"; "Main.mouseDownSub" -> "Json.Decode.map4"; "Main.mouseDownSub" -> "Json.Decode.oneOf"; "Main.mouseDownSub" -> "Json.Decode.string"; "Main.mouseDownSub" -> "Json.Decode.succeed"; "Main.mouseDownSub" -> "Model.Down"; "Main.mouseDownSub" -> "Model.DownItem"; "Main.mouseDownSub" -> "Model.Mouse"; "Main.mouseDownSub" -> "Model.Point"; "Main.mouseDownSub" -> "Utils.strToIntDecoder"; "Main.mouseMove" -> "Main.performDrag"; "Main.mouseMove" -> "Model.Mouse"; "Main.mouseMove" -> "Model.Time"; "Main.mouseMove" -> "Model.WaitForEndTime"; "Main.mouseMove" -> "Platform.Cmd.none"; "Main.mouseMove" -> "Task.perform"; "Main.mouseMove" -> "Time.now"; "Main.mouseMove" -> "Utils.logError"; "Main.mouseMove" -> "Utils.toString"; "Main.mouseOut" -> "Maybe.Nothing"; "Main.mouseOut" -> "Model.Drag"; "Main.mouseOver" -> "Maybe.Just"; "Main.mouseOver" -> "Maybe.Nothing"; "Main.mouseOver" -> "Model.Drag"; "Main.mouseOver" -> "Utils.logError"; "Main.mouseUp" -> "Main.createDefaultAssoc"; "Main.mouseUp" -> "Main.point"; "Main.mouseUp" -> "Model.MoveTopicToMap"; "Main.mouseUp" -> "Model.NoDrag"; "Main.mouseUp" -> "Platform.Cmd.none"; "Main.mouseUp" -> "Random.generate"; "Main.mouseUp" -> "String.fromInt"; "Main.mouseUp" -> "Utils.info"; "Main.mouseUp" -> "Utils.logError"; "Main.mouseUp" -> "Utils.toString"; "Main.moveTopicToMap" -> "Config.topicH2"; "Main.moveTopicToMap" -> "Config.topicW2"; "Main.moveTopicToMap" -> "Config.whiteBoxPadding"; "Main.moveTopicToMap" -> "Main.createMapIfNeeded"; "Main.moveTopicToMap" -> "MapAutoSize.autoSize"; "Main.moveTopicToMap" -> "Maybe.Just"; "Main.moveTopicToMap" -> "Maybe.andThen"; "Main.moveTopicToMap" -> "Model.MapTopic"; "Main.moveTopicToMap" -> "Model.Point"; "Main.moveTopicToMap" -> "Model.addItemToMap"; "Main.moveTopicToMap" -> "Model.getTopicProps"; "Main.moveTopicToMap" -> "Model.hideItem"; "Main.moveTopicToMap" -> "Model.select"; "Main.moveTopicToMap" -> "Model.setTopicPos"; "Main.onTextInput" -> "Model.updateTopicInfo"; "Main.onTextInput" -> "Utils.logError"; "Main.onTextareaInput" -> "Main.measureText"; "Main.onTextareaInput" -> "Model.updateTopicInfo"; "Main.onTextareaInput" -> "Platform.Cmd.none"; "Main.onTextareaInput" -> "Utils.logError"; "Main.performDrag" -> "MapAutoSize.autoSize"; "Main.performDrag" -> "Model.Drag"; "Main.performDrag" -> "Model.Point"; "Main.performDrag" -> "Model.setTopicPosByDelta"; "Main.performDrag" -> "Utils.logError"; "Main.performDrag" -> "Utils.toString"; "Main.point" -> "Config.topicH2"; "Main.point" -> "Config.topicW2"; "Main.point" -> "Config.whiteBoxPadding"; "Main.point" -> "Config.whiteBoxRange"; "Main.point" -> "Model.Point"; "Main.point" -> "Random.float"; "Main.point" -> "Random.map2"; "Main.setDetailDisplayIfMonade" -> "Model.Detail"; "Main.setDetailDisplayIfMonade" -> "Model.Monad"; "Main.setDetailDisplayIfMonade" -> "Model.updateTopicProps"; "Main.startEdit" -> "Main.focus"; "Main.startEdit" -> "Main.setDetailDisplayIfMonade"; "Main.startEdit" -> "MapAutoSize.autoSize"; "Main.startEdit" -> "Model.ItemEdit"; "Main.startEdit" -> "Model.getSingleSelection"; "Main.subscriptions" -> "Main.dragSub"; "Main.subscriptions" -> "Main.mouseDownSub"; "Main.subscriptions" -> "Platform.Sub.none"; "Main.switchDisplay" -> "Boxing.boxContainer"; "Main.switchDisplay" -> "Boxing.unboxContainer"; "Main.switchDisplay" -> "MapAutoSize.autoSize"; "Main.switchDisplay" -> "Model.getSingleSelection"; "Main.switchDisplay" -> "Model.setDisplayMode"; "Main.timeArrived" -> "Config.assocDelayMillis"; "Main.timeArrived" -> "Maybe.Nothing"; "Main.timeArrived" -> "Model.Drag"; "Main.timeArrived" -> "Model.DragEngaged"; "Main.timeArrived" -> "Model.DragTopic"; "Main.timeArrived" -> "Model.DrawAssoc"; "Main.timeArrived" -> "Model.NoDrag"; "Main.timeArrived" -> "Model.getTopicPos"; "Main.timeArrived" -> "Time.posixToMillis"; "Main.timeArrived" -> "Utils.logError"; "Main.toolbarStyle" -> "Config.toolbarFontSize"; "Main.toolbarStyle" -> "Html.Attributes.style"; "Main.toolbarStyle" -> "String.fromInt"; "Main.update" -> "IconMenu.updateIconMenu"; "Main.update" -> "Main.createTopicAndAddToMap"; "Main.update" -> "Main.delete"; "Main.update" -> "Main.hide"; "Main.update" -> "Main.moveTopicToMap"; "Main.update" -> "Main.switchDisplay"; "Main.update" -> "Main.updateEdit"; "Main.update" -> "Main.updateMouse"; "Main.update" -> "Main.updateNav"; "Main.update" -> "Model.activeMap"; "Main.update" -> "Platform.Cmd.none"; "Main.update" -> "Search.updateSearch"; "Main.update" -> "Storage.storeModel"; "Main.update" -> "Utils.info"; "Main.updateEdit" -> "Main.endEdit"; "Main.updateEdit" -> "Main.onTextInput"; "Main.updateEdit" -> "Main.onTextareaInput"; "Main.updateEdit" -> "Main.startEdit"; "Main.updateEdit" -> "MapAutoSize.autoSize"; "Main.updateEdit" -> "Model.setTopicSize"; "Main.updateEdit" -> "Platform.Cmd.none"; "Main.updateEdit" -> "Storage.storeModel"; "Main.updateEdit" -> "Storage.storeModelWith"; "Main.updateMouse" -> "Main.mouseDown"; "Main.updateMouse" -> "Main.mouseDownOnItem"; "Main.updateMouse" -> "Main.mouseMove"; "Main.updateMouse" -> "Main.mouseOut"; "Main.updateMouse" -> "Main.mouseOver"; "Main.updateMouse" -> "Main.mouseUp"; "Main.updateMouse" -> "Main.timeArrived"; "Main.updateMouse" -> "Platform.Cmd.none"; "Main.updateMouse" -> "Storage.storeModelWith"; "Main.updateNav" -> "Main.back"; "Main.updateNav" -> "Main.fullscreen"; "Main.view" -> "Browser.Document"; "Main.view" -> "Html.Attributes.id"; "Main.view" -> "Html.Events.on"; "Main.view" -> "Html.br"; "Main.view" -> "Html.div"; "Main.view" -> "Html.text"; "Main.view" -> "IconMenu.viewIconMenu"; "Main.view" -> "Main.appStyle"; "Main.view" -> "Main.measureStyle"; "Main.view" -> "Main.mouseDecoder"; "Main.view" -> "Main.viewToolbar"; "Main.view" -> "MapRenderer.viewMap"; "Main.view" -> "Model.Out"; "Main.view" -> "Model.Over"; "Main.view" -> "Model.activeMap"; "Main.view" -> "Search.viewResultMenu"; "Main.viewContainerDisplay" -> "Basics.False"; "Main.viewContainerDisplay" -> "Basics.True"; "Main.viewContainerDisplay" -> "Html.div"; "Main.viewContainerDisplay" -> "Html.text"; "Main.viewContainerDisplay" -> "Main.displayModeStyle"; "Main.viewContainerDisplay" -> "Main.viewRadioButton"; "Main.viewContainerDisplay" -> "Maybe.Nothing"; "Main.viewContainerDisplay" -> "Model.BlackBox"; "Main.viewContainerDisplay" -> "Model.Container"; "Main.viewContainerDisplay" -> "Model.SwitchDisplay"; "Main.viewContainerDisplay" -> "Model.Unboxed"; "Main.viewContainerDisplay" -> "Model.WhiteBox"; "Main.viewContainerDisplay" -> "Model.getDisplayMode"; "Main.viewContainerDisplay" -> "Model.getSingleSelection"; "Main.viewFooter" -> "Config.date"; "Main.viewFooter" -> "Config.version"; "Main.viewFooter" -> "Html.Attributes.href"; "Main.viewFooter" -> "Html.a"; "Main.viewFooter" -> "Html.div"; "Main.viewFooter" -> "Html.text"; "Main.viewFooter" -> "Main.footerStyle"; "Main.viewFooter" -> "Main.linkStyle"; "Main.viewMapNav" -> "Html.Attributes.disabled"; "Main.viewMapNav" -> "Html.Events.onClick"; "Main.viewMapNav" -> "Html.button"; "Main.viewMapNav" -> "Html.div"; "Main.viewMapNav" -> "Html.span"; "Main.viewMapNav" -> "Html.text"; "Main.viewMapNav" -> "IconMenu.viewIcon"; "Main.viewMapNav" -> "Main.getMapName"; "Main.viewMapNav" -> "Main.mapNavStyle"; "Main.viewMapNav" -> "Main.mapTitleStyle"; "Main.viewMapNav" -> "Model.Back"; "Main.viewMapNav" -> "Model.Nav"; "Main.viewMapNav" -> "Model.isHome"; "Main.viewMonadDisplay" -> "Basics.False"; "Main.viewMonadDisplay" -> "Basics.True"; "Main.viewMonadDisplay" -> "Html.div"; "Main.viewMonadDisplay" -> "Html.text"; "Main.viewMonadDisplay" -> "Main.displayModeStyle"; "Main.viewMonadDisplay" -> "Main.viewRadioButton"; "Main.viewMonadDisplay" -> "Maybe.Nothing"; "Main.viewMonadDisplay" -> "Model.Detail"; "Main.viewMonadDisplay" -> "Model.LabelOnly"; "Main.viewMonadDisplay" -> "Model.Monad"; "Main.viewMonadDisplay" -> "Model.SwitchDisplay"; "Main.viewMonadDisplay" -> "Model.getDisplayMode"; "Main.viewMonadDisplay" -> "Model.getSingleSelection"; "Main.viewRadioButton" -> "Html.Attributes.checked"; "Main.viewRadioButton" -> "Html.Attributes.disabled"; "Main.viewRadioButton" -> "Html.Attributes.name"; "Main.viewRadioButton" -> "Html.Attributes.type_"; "Main.viewRadioButton" -> "Html.Events.onClick"; "Main.viewRadioButton" -> "Html.input"; "Main.viewRadioButton" -> "Html.label"; "Main.viewRadioButton" -> "Html.text"; "Main.viewRadioButton" -> "Model.NoOp"; "Main.viewRadioButton" -> "Utils.stopPropagationOnMousedown"; "Main.viewToolbar" -> "Basics.False"; "Main.viewToolbar" -> "Basics.True"; "Main.viewToolbar" -> "Html.div"; "Main.viewToolbar" -> "Main.toolbarStyle"; "Main.viewToolbar" -> "Main.viewContainerDisplay"; "Main.viewToolbar" -> "Main.viewFooter"; "Main.viewToolbar" -> "Main.viewMapNav"; "Main.viewToolbar" -> "Main.viewMonadDisplay"; "Main.viewToolbar" -> "Main.viewToolbarButton"; "Main.viewToolbar" -> "Model.AddTopic"; "Main.viewToolbar" -> "Model.Delete"; "Main.viewToolbar" -> "Model.Edit"; "Main.viewToolbar" -> "Model.EditStart"; "Main.viewToolbar" -> "Model.Fullscreen"; "Main.viewToolbar" -> "Model.Hide"; "Main.viewToolbar" -> "Model.IconMenu"; "Main.viewToolbar" -> "Model.Nav"; "Main.viewToolbar" -> "Model.Open"; "Main.viewToolbar" -> "Search.viewSearchInput"; "Main.viewToolbarButton" -> "Html.Attributes.disabled"; "Main.viewToolbarButton" -> "Html.Events.onClick"; "Main.viewToolbarButton" -> "Html.button"; "Main.viewToolbarButton" -> "Html.text"; "Main.viewToolbarButton" -> "List.isEmpty"; "Main.viewToolbarButton" -> "Main.buttonStyle"; "Main.viewToolbarButton" -> "Model.NoOp"; "Main.viewToolbarButton" -> "Utils.stopPropagationOnMousedown"; "MapAutoSize.autoSize" -> "MapAutoSize.calcMapRect"; "MapAutoSize.autoSize" -> "Model.activeMap"; "MapAutoSize.autoSize" -> "Tuple.second"; "MapAutoSize.calcItemSize" -> "MapAutoSize.calcMapRect"; "MapAutoSize.calcItemSize" -> "MapAutoSize.detailTopicExtent"; "MapAutoSize.calcItemSize" -> "MapAutoSize.mapExtent"; "MapAutoSize.calcItemSize" -> "MapAutoSize.topicExtent"; "MapAutoSize.calcMapRect" -> "Config.whiteBoxPadding"; "MapAutoSize.calcMapRect" -> "Dict.values"; "MapAutoSize.calcMapRect" -> "List.filter"; "MapAutoSize.calcMapRect" -> "List.foldr"; "MapAutoSize.calcMapRect" -> "MapAutoSize.calcItemSize"; "MapAutoSize.calcMapRect" -> "MapAutoSize.storeMapRect"; "MapAutoSize.calcMapRect" -> "Model.Rectangle"; "MapAutoSize.calcMapRect" -> "Model.getMap"; "MapAutoSize.calcMapRect" -> "Model.isVisible"; "MapAutoSize.detailTopicExtent" -> "Basics.max"; "MapAutoSize.detailTopicExtent" -> "Basics.min"; "MapAutoSize.detailTopicExtent" -> "Config.topicBorderWidth"; "MapAutoSize.detailTopicExtent" -> "Config.topicDetailMaxWidth"; "MapAutoSize.detailTopicExtent" -> "Config.topicH2"; "MapAutoSize.detailTopicExtent" -> "Config.topicSize"; "MapAutoSize.detailTopicExtent" -> "Config.topicW2"; "MapAutoSize.detailTopicExtent" -> "Model.ItemEdit"; "MapAutoSize.detailTopicExtent" -> "Model.Rectangle"; "MapAutoSize.mapExtent" -> "Basics.max"; "MapAutoSize.mapExtent" -> "Basics.min"; "MapAutoSize.mapExtent" -> "Config.topicH2"; "MapAutoSize.mapExtent" -> "Config.topicW2"; "MapAutoSize.mapExtent" -> "Model.Rectangle"; "MapAutoSize.storeMapRect" -> "Model.Point"; "MapAutoSize.storeMapRect" -> "Model.activeMap"; "MapAutoSize.storeMapRect" -> "Model.setTopicPosByDelta"; "MapAutoSize.storeMapRect" -> "Model.updateMaps"; "MapAutoSize.topicExtent" -> "Basics.max"; "MapAutoSize.topicExtent" -> "Basics.min"; "MapAutoSize.topicExtent" -> "Config.topicBorderWidth"; "MapAutoSize.topicExtent" -> "Config.topicH2"; "MapAutoSize.topicExtent" -> "Config.topicW2"; "MapAutoSize.topicExtent" -> "Model.Rectangle"; "MapRenderer.absMapPos" -> "Config.topicH2"; "MapRenderer.absMapPos" -> "Config.topicW2"; "MapRenderer.absMapPos" -> "Maybe.Just"; "MapRenderer.absMapPos" -> "Maybe.andThen"; "MapRenderer.absMapPos" -> "Model.Point"; "MapRenderer.absMapPos" -> "Model.getMap"; "MapRenderer.absMapPos" -> "Model.getTopicPos"; "MapRenderer.absMapPos" -> "Model.isFullscreen"; "MapRenderer.assocGeometry" -> "Maybe.Just"; "MapRenderer.assocGeometry" -> "Maybe.Nothing"; "MapRenderer.assocGeometry" -> "Maybe.map2"; "MapRenderer.assocGeometry" -> "Model.getTopicPos"; "MapRenderer.assocGeometry" -> "Utils.fail"; "MapRenderer.blackBoxStyle" -> "Html.Attributes.style"; "MapRenderer.blackBoxTopic" -> "Html.div"; "MapRenderer.blackBoxTopic" -> "MapRenderer.blackBoxStyle"; "MapRenderer.blackBoxTopic" -> "MapRenderer.ghostTopicStyle"; "MapRenderer.blackBoxTopic" -> "MapRenderer.labelTopicHtml"; "MapRenderer.blackBoxTopic" -> "MapRenderer.mapItemCount"; "MapRenderer.blackBoxTopic" -> "MapRenderer.topicFlexboxStyle"; "MapRenderer.blackBoxTopic" -> "MapRenderer.topicPosStyle"; "MapRenderer.detailTextEditStyle" -> "Config.mainFont"; "MapRenderer.detailTextEditStyle" -> "Config.topicBorderWidth"; "MapRenderer.detailTextEditStyle" -> "Html.Attributes.style"; "MapRenderer.detailTextEditStyle" -> "Model.getTopicSize"; "MapRenderer.detailTextEditStyle" -> "String.fromFloat"; "MapRenderer.detailTextStyle" -> "Config.contentFontSize"; "MapRenderer.detailTextStyle" -> "Config.topicDetailMaxWidth"; "MapRenderer.detailTextStyle" -> "Config.topicDetailPadding"; "MapRenderer.detailTextStyle" -> "Config.topicLineHeight"; "MapRenderer.detailTextStyle" -> "Config.topicRadius"; "MapRenderer.detailTextStyle" -> "Html.Attributes.style"; "MapRenderer.detailTextStyle" -> "MapRenderer.selectionStyle"; "MapRenderer.detailTextStyle" -> "MapRenderer.topicBorderStyle"; "MapRenderer.detailTextStyle" -> "String.fromFloat"; "MapRenderer.detailTextStyle" -> "String.fromInt"; "MapRenderer.detailTextViewStyle" -> "Config.topicSize"; "MapRenderer.detailTextViewStyle" -> "Html.Attributes.style"; "MapRenderer.detailTextViewStyle" -> "String.fromFloat"; "MapRenderer.detailTopic" -> "Html.Attributes.id"; "MapRenderer.detailTopic" -> "Html.Events.onBlur"; "MapRenderer.detailTopic" -> "Html.Events.onInput"; "MapRenderer.detailTopic" -> "Html.div"; "MapRenderer.detailTopic" -> "Html.text"; "MapRenderer.detailTopic" -> "Html.textarea"; "MapRenderer.detailTopic" -> "IconMenu.viewTopicIcon"; "MapRenderer.detailTopic" -> "MapRenderer.detailTextEditStyle"; "MapRenderer.detailTopic" -> "MapRenderer.detailTextStyle"; "MapRenderer.detailTopic" -> "MapRenderer.detailTextViewStyle"; "MapRenderer.detailTopic" -> "MapRenderer.detailTopicIconBoxStyle"; "MapRenderer.detailTopic" -> "MapRenderer.detailTopicStyle"; "MapRenderer.detailTopic" -> "MapRenderer.selectionStyle"; "MapRenderer.detailTopic" -> "MapRenderer.topicIconBoxStyle"; "MapRenderer.detailTopic" -> "Model.Edit"; "MapRenderer.detailTopic" -> "Model.EditEnd"; "MapRenderer.detailTopic" -> "Model.ItemEdit"; "MapRenderer.detailTopic" -> "Model.NoOp"; "MapRenderer.detailTopic" -> "Model.OnTextareaInput"; "MapRenderer.detailTopic" -> "String.fromInt"; "MapRenderer.detailTopic" -> "Utils.multilineHtml"; "MapRenderer.detailTopic" -> "Utils.onEsc"; "MapRenderer.detailTopic" -> "Utils.stopPropagationOnMousedown"; "MapRenderer.detailTopicIconBoxStyle" -> "Config.topicBorderWidth"; "MapRenderer.detailTopicIconBoxStyle" -> "Config.topicSize"; "MapRenderer.detailTopicIconBoxStyle" -> "Html.Attributes.style"; "MapRenderer.detailTopicIconBoxStyle" -> "String.fromFloat"; "MapRenderer.detailTopicStyle" -> "Config.topicH2"; "MapRenderer.detailTopicStyle" -> "Config.topicW2"; "MapRenderer.detailTopicStyle" -> "Html.Attributes.style"; "MapRenderer.detailTopicStyle" -> "String.fromFloat"; "MapRenderer.directLine" -> "MapRenderer.lineStyle"; "MapRenderer.directLine" -> "String.fromFloat"; "MapRenderer.directLine" -> "Svg.Attributes.x1"; "MapRenderer.directLine" -> "Svg.Attributes.x2"; "MapRenderer.directLine" -> "Svg.Attributes.y1"; "MapRenderer.directLine" -> "Svg.Attributes.y2"; "MapRenderer.directLine" -> "Svg.line"; "MapRenderer.effectiveDisplayMode" -> "Maybe.Just"; "MapRenderer.effectiveDisplayMode" -> "Model.Container"; "MapRenderer.effectiveDisplayMode" -> "Model.Detail"; "MapRenderer.effectiveDisplayMode" -> "Model.Monad"; "MapRenderer.effectiveDisplayMode" -> "Model.ResultOpen"; "MapRenderer.effectiveDisplayMode" -> "Model.WhiteBox"; "MapRenderer.gAttr" -> "String.fromFloat"; "MapRenderer.gAttr" -> "Svg.Attributes.transform"; "MapRenderer.ghostTopicStyle" -> "Config.blackBoxOffset"; "MapRenderer.ghostTopicStyle" -> "Config.topicRadius"; "MapRenderer.ghostTopicStyle" -> "Config.topicSize"; "MapRenderer.ghostTopicStyle" -> "Html.Attributes.style"; "MapRenderer.ghostTopicStyle" -> "MapRenderer.selectionStyle"; "MapRenderer.ghostTopicStyle" -> "MapRenderer.topicBorderStyle"; "MapRenderer.ghostTopicStyle" -> "String.fromFloat"; "MapRenderer.ghostTopicStyle" -> "String.fromInt"; "MapRenderer.itemCountStyle" -> "Config.contentFontSize"; "MapRenderer.itemCountStyle" -> "Html.Attributes.style"; "MapRenderer.itemCountStyle" -> "String.fromInt"; "MapRenderer.labelTopic" -> "MapRenderer.labelTopicHtml"; "MapRenderer.labelTopic" -> "MapRenderer.selectionStyle"; "MapRenderer.labelTopic" -> "MapRenderer.topicFlexboxStyle"; "MapRenderer.labelTopic" -> "MapRenderer.topicPosStyle"; "MapRenderer.labelTopicHtml" -> "Html.Attributes.id"; "MapRenderer.labelTopicHtml" -> "Html.Attributes.value"; "MapRenderer.labelTopicHtml" -> "Html.Events.onBlur"; "MapRenderer.labelTopicHtml" -> "Html.Events.onInput"; "MapRenderer.labelTopicHtml" -> "Html.div"; "MapRenderer.labelTopicHtml" -> "Html.input"; "MapRenderer.labelTopicHtml" -> "Html.text"; "MapRenderer.labelTopicHtml" -> "IconMenu.viewTopicIcon"; "MapRenderer.labelTopicHtml" -> "MapRenderer.topicIconBoxStyle"; "MapRenderer.labelTopicHtml" -> "MapRenderer.topicInputStyle"; "MapRenderer.labelTopicHtml" -> "MapRenderer.topicLabelStyle"; "MapRenderer.labelTopicHtml" -> "Model.Edit"; "MapRenderer.labelTopicHtml" -> "Model.EditEnd"; "MapRenderer.labelTopicHtml" -> "Model.ItemEdit"; "MapRenderer.labelTopicHtml" -> "Model.NoOp"; "MapRenderer.labelTopicHtml" -> "Model.OnTextInput"; "MapRenderer.labelTopicHtml" -> "Model.getTopicLabel"; "MapRenderer.labelTopicHtml" -> "String.fromInt"; "MapRenderer.labelTopicHtml" -> "Utils.onEnterOrEsc"; "MapRenderer.labelTopicHtml" -> "Utils.stopPropagationOnMousedown"; "MapRenderer.limboTopic" -> "Config.topicSize"; "MapRenderer.limboTopic" -> "Dict.get"; "MapRenderer.limboTopic" -> "MapRenderer.viewTopic"; "MapRenderer.limboTopic" -> "Model.activeMap"; "MapRenderer.limboTopic" -> "Model.defaultProps"; "MapRenderer.limboTopic" -> "Model.getMapItemById"; "MapRenderer.limboTopic" -> "Model.isItemInMap"; "MapRenderer.limboTopic" -> "Utils.info"; "MapRenderer.lineFunc" -> "MapRenderer.taxiLine"; "MapRenderer.lineStyle" -> "Config.assocColor"; "MapRenderer.lineStyle" -> "Config.assocWith"; "MapRenderer.lineStyle" -> "MapRenderer.lineDasharray"; "MapRenderer.lineStyle" -> "String.fromFloat"; "MapRenderer.lineStyle" -> "Svg.Attributes.fill"; "MapRenderer.lineStyle" -> "Svg.Attributes.stroke"; "MapRenderer.lineStyle" -> "Svg.Attributes.strokeDasharray"; "MapRenderer.lineStyle" -> "Svg.Attributes.strokeWidth"; "MapRenderer.mapInfo" -> "Basics.round"; "MapRenderer.mapInfo" -> "MapRenderer.mapItems"; "MapRenderer.mapInfo" -> "MapRenderer.whiteBoxStyle"; "MapRenderer.mapInfo" -> "Model.Rectangle"; "MapRenderer.mapInfo" -> "Model.getMap"; "MapRenderer.mapInfo" -> "Model.isFullscreen"; "MapRenderer.mapInfo" -> "String.fromInt"; "MapRenderer.mapItemCount" -> "Dict.values"; "MapRenderer.mapItemCount" -> "Html.div"; "MapRenderer.mapItemCount" -> "Html.text"; "MapRenderer.mapItemCount" -> "List.filter"; "MapRenderer.mapItemCount" -> "List.length"; "MapRenderer.mapItemCount" -> "MapRenderer.itemCountStyle"; "MapRenderer.mapItemCount" -> "Model.getMap"; "MapRenderer.mapItemCount" -> "Model.isVisible"; "MapRenderer.mapItemCount" -> "String.fromInt"; "MapRenderer.mapItems" -> "Dict.get"; "MapRenderer.mapItems" -> "Dict.values"; "MapRenderer.mapItems" -> "List.filter"; "MapRenderer.mapItems" -> "List.foldr"; "MapRenderer.mapItems" -> "MapRenderer.viewAssoc"; "MapRenderer.mapItems" -> "MapRenderer.viewTopic"; "MapRenderer.mapItems" -> "Model.isVisible"; "MapRenderer.mapItems" -> "String.fromInt"; "MapRenderer.mapItems" -> "Utils.logError"; "MapRenderer.relPos" -> "MapRenderer.absMapPos"; "MapRenderer.relPos" -> "Maybe.Just"; "MapRenderer.relPos" -> "Maybe.andThen"; "MapRenderer.relPos" -> "Model.Point"; "MapRenderer.selectionStyle" -> "Html.Attributes.style"; "MapRenderer.selectionStyle" -> "List.member"; "MapRenderer.svgStyle" -> "Html.Attributes.style"; "MapRenderer.taxiLine" -> "Basics.abs"; "MapRenderer.taxiLine" -> "Config.assocRadius"; "MapRenderer.taxiLine" -> "MapRenderer.lineStyle"; "MapRenderer.taxiLine" -> "String.fromFloat"; "MapRenderer.taxiLine" -> "String.fromInt"; "MapRenderer.taxiLine" -> "Svg.Attributes.d"; "MapRenderer.taxiLine" -> "Svg.path"; "MapRenderer.topicAttr" -> "Html.Attributes.attribute"; "MapRenderer.topicAttr" -> "Model.isFullscreen"; "MapRenderer.topicAttr" -> "String.fromInt"; "MapRenderer.topicBorderStyle" -> "Basics.False"; "MapRenderer.topicBorderStyle" -> "Config.topicBorderWidth"; "MapRenderer.topicBorderStyle" -> "Html.Attributes.style"; "MapRenderer.topicBorderStyle" -> "String.fromFloat"; "MapRenderer.topicFlexboxStyle" -> "Config.topicRadius"; "MapRenderer.topicFlexboxStyle" -> "Config.topicSize"; "MapRenderer.topicFlexboxStyle" -> "Html.Attributes.style"; "MapRenderer.topicFlexboxStyle" -> "MapRenderer.topicBorderStyle"; "MapRenderer.topicFlexboxStyle" -> "String.fromFloat"; "MapRenderer.topicFlexboxStyle" -> "String.fromInt"; "MapRenderer.topicIconBoxStyle" -> "Config.topicRadius"; "MapRenderer.topicIconBoxStyle" -> "Config.topicSize"; "MapRenderer.topicIconBoxStyle" -> "Html.Attributes.style"; "MapRenderer.topicIconBoxStyle" -> "String.fromFloat"; "MapRenderer.topicIconBoxStyle" -> "String.fromInt"; "MapRenderer.topicInputStyle" -> "Config.contentFontSize"; "MapRenderer.topicInputStyle" -> "Config.mainFont"; "MapRenderer.topicInputStyle" -> "Config.topicLabelWeight"; "MapRenderer.topicInputStyle" -> "Html.Attributes.style"; "MapRenderer.topicInputStyle" -> "String.fromInt"; "MapRenderer.topicLabelStyle" -> "Config.contentFontSize"; "MapRenderer.topicLabelStyle" -> "Config.topicLabelWeight"; "MapRenderer.topicLabelStyle" -> "Html.Attributes.style"; "MapRenderer.topicLabelStyle" -> "String.fromInt"; "MapRenderer.topicLayerStyle" -> "Html.Attributes.style"; "MapRenderer.topicLayerStyle" -> "String.fromFloat"; "MapRenderer.topicPosStyle" -> "Config.topicH2"; "MapRenderer.topicPosStyle" -> "Config.topicW2"; "MapRenderer.topicPosStyle" -> "Html.Attributes.style"; "MapRenderer.topicPosStyle" -> "String.fromFloat"; "MapRenderer.topicStyle" -> "Basics.False"; "MapRenderer.topicStyle" -> "Html.Attributes.style"; "MapRenderer.topicStyle" -> "Maybe.Just"; "MapRenderer.topicStyle" -> "Model.ResultOpen"; "MapRenderer.unboxedTopic" -> "MapRenderer.labelTopic"; "MapRenderer.unboxedTopic" -> "MapRenderer.mapItemCount"; "MapRenderer.viewAssoc" -> "Html.text"; "MapRenderer.viewAssoc" -> "MapRenderer.assocGeometry"; "MapRenderer.viewAssoc" -> "MapRenderer.lineFunc"; "MapRenderer.viewAssoc" -> "Maybe.Just"; "MapRenderer.viewLimboAssoc" -> "MapRenderer.lineFunc"; "MapRenderer.viewLimboAssoc" -> "MapRenderer.relPos"; "MapRenderer.viewLimboAssoc" -> "Maybe.Nothing"; "MapRenderer.viewLimboAssoc" -> "Maybe.map2"; "MapRenderer.viewLimboAssoc" -> "Model.getTopicPos"; "MapRenderer.viewMap" -> "Html.div"; "MapRenderer.viewMap" -> "MapRenderer.gAttr"; "MapRenderer.viewMap" -> "MapRenderer.limboTopic"; "MapRenderer.viewMap" -> "MapRenderer.mapInfo"; "MapRenderer.viewMap" -> "MapRenderer.svgStyle"; "MapRenderer.viewMap" -> "MapRenderer.topicAttr"; "MapRenderer.viewMap" -> "MapRenderer.topicLayerStyle"; "MapRenderer.viewMap" -> "MapRenderer.viewLimboAssoc"; "MapRenderer.viewMap" -> "Svg.Attributes.height"; "MapRenderer.viewMap" -> "Svg.Attributes.width"; "MapRenderer.viewMap" -> "Svg.g"; "MapRenderer.viewMap" -> "Svg.svg"; "MapRenderer.viewTopic" -> "Html.div"; "MapRenderer.viewTopic" -> "MapRenderer.blackBoxTopic"; "MapRenderer.viewTopic" -> "MapRenderer.detailTopic"; "MapRenderer.viewTopic" -> "MapRenderer.effectiveDisplayMode"; "MapRenderer.viewTopic" -> "MapRenderer.labelTopic"; "MapRenderer.viewTopic" -> "MapRenderer.topicAttr"; "MapRenderer.viewTopic" -> "MapRenderer.topicStyle"; "MapRenderer.viewTopic" -> "MapRenderer.unboxedTopic"; "MapRenderer.viewTopic" -> "MapRenderer.whiteBoxTopic"; "MapRenderer.whiteBoxStyle" -> "Config.topicBorderWidth"; "MapRenderer.whiteBoxStyle" -> "Config.topicSize"; "MapRenderer.whiteBoxStyle" -> "Config.whiteBoxRadius"; "MapRenderer.whiteBoxStyle" -> "Html.Attributes.style"; "MapRenderer.whiteBoxStyle" -> "MapRenderer.selectionStyle"; "MapRenderer.whiteBoxStyle" -> "MapRenderer.topicBorderStyle"; "MapRenderer.whiteBoxStyle" -> "String.fromFloat"; "MapRenderer.whiteBoxStyle" -> "String.fromInt"; "MapRenderer.whiteBoxTopic" -> "MapRenderer.labelTopic"; "MapRenderer.whiteBoxTopic" -> "MapRenderer.mapItemCount"; "MapRenderer.whiteBoxTopic" -> "MapRenderer.viewMap"; "Model.activeMap" -> "List.head"; "Model.activeMap" -> "Utils.logError"; "Model.addItemToMap" -> "Basics.False"; "Model.addItemToMap" -> "Dict.insert"; "Model.addItemToMap" -> "Model.MapItem"; "Model.addItemToMap" -> "Model.createAssoc"; "Model.addItemToMap" -> "Model.updateMaps"; "Model.addItemToMap" -> "Utils.info"; "Model.assocMismatch" -> "String.fromInt"; "Model.assocMismatch" -> "Utils.logError"; "Model.assocsOfPlayer" -> "Dict.values"; "Model.assocsOfPlayer" -> "List.filter"; "Model.assocsOfPlayer" -> "List.map"; "Model.assocsOfPlayer" -> "Model.getItemId"; "Model.assocsOfPlayer" -> "Model.hasPlayer"; "Model.assocsOfPlayer" -> "Model.isAssoc"; "Model.createAssoc" -> "Dict.insert"; "Model.createAssoc" -> "Model.Assoc"; "Model.createAssoc" -> "Model.AssocInfo"; "Model.createAssoc" -> "Model.nextId"; "Model.createTopic" -> "Dict.insert"; "Model.createTopic" -> "Model.Topic"; "Model.createTopic" -> "Model.TopicInfo"; "Model.createTopic" -> "Model.nextId"; "Model.defaultModel" -> "Basics.False"; "Model.defaultModel" -> "Dict.empty"; "Model.defaultModel" -> "Dict.singleton"; "Model.defaultModel" -> "Model.Map"; "Model.defaultModel" -> "Model.NoDrag"; "Model.defaultModel" -> "Model.NoEdit"; "Model.defaultModel" -> "Model.Rectangle"; "Model.defaultModel" -> "Model.ResultClosed"; "Model.defaultProps" -> "Model.BlackBox"; "Model.defaultProps" -> "Model.Container"; "Model.defaultProps" -> "Model.LabelOnly"; "Model.defaultProps" -> "Model.Monad"; "Model.defaultProps" -> "Model.Point"; "Model.defaultProps" -> "Model.TopicProps"; "Model.defaultProps" -> "Model.hasMap"; "Model.deleteItem" -> "Dict.map"; "Model.deleteItem" -> "Dict.remove"; "Model.deleteItem" -> "List.foldr"; "Model.deleteItem" -> "Model.assocsOfPlayer"; "Model.getAssocInfo" -> "Dict.get"; "Model.getAssocInfo" -> "Maybe.Just"; "Model.getAssocInfo" -> "Maybe.Nothing"; "Model.getAssocInfo" -> "Model.assocMismatch"; "Model.getAssocInfo" -> "Model.illegalItemId"; "Model.getDisplayMode" -> "Maybe.Just"; "Model.getDisplayMode" -> "Maybe.Nothing"; "Model.getDisplayMode" -> "Model.getTopicProps"; "Model.getDisplayMode" -> "Utils.fail"; "Model.getMap" -> "Maybe.Just"; "Model.getMap" -> "Maybe.Nothing"; "Model.getMap" -> "Model.getMapIfExists"; "Model.getMap" -> "Model.illegalMapId"; "Model.getMapIfExists" -> "Dict.get"; "Model.getMapItem" -> "Dict.get"; "Model.getMapItem" -> "Maybe.Just"; "Model.getMapItem" -> "Maybe.Nothing"; "Model.getMapItem" -> "Model.itemNotInMap"; "Model.getMapItemById" -> "Maybe.andThen"; "Model.getMapItemById" -> "Model.getMap"; "Model.getMapItemById" -> "Model.getMapItem"; "Model.getSingleSelection" -> "Maybe.Just"; "Model.getSingleSelection" -> "Maybe.Nothing"; "Model.getTopicInfo" -> "Dict.get"; "Model.getTopicInfo" -> "Maybe.Just"; "Model.getTopicInfo" -> "Maybe.Nothing"; "Model.getTopicInfo" -> "Model.illegalItemId"; "Model.getTopicInfo" -> "Model.topicMismatch"; "Model.getTopicLabel" -> "List.head"; "Model.getTopicLabel" -> "String.lines"; "Model.getTopicPos" -> "Maybe.Just"; "Model.getTopicPos" -> "Maybe.Nothing"; "Model.getTopicPos" -> "Model.getTopicProps"; "Model.getTopicPos" -> "Utils.fail"; "Model.getTopicProps" -> "Maybe.Just"; "Model.getTopicProps" -> "Maybe.Nothing"; "Model.getTopicProps" -> "Model.getMapItemById"; "Model.getTopicProps" -> "Model.topicMismatch"; "Model.getTopicProps" -> "Utils.fail"; "Model.getTopicSize" -> "Maybe.Just"; "Model.getTopicSize" -> "Maybe.Nothing"; "Model.getTopicSize" -> "Model.getTopicProps"; "Model.getTopicSize" -> "Utils.fail"; "Model.hasMap" -> "Dict.member"; "Model.hasPlayer" -> "Basics.False"; "Model.hasPlayer" -> "Model.getAssocInfo"; "Model.hideItem" -> "Model.hideItem_"; "Model.hideItem" -> "Model.updateMaps"; "Model.hideItem_" -> "Basics.True"; "Model.hideItem_" -> "Dict.update"; "Model.hideItem_" -> "List.foldr"; "Model.hideItem_" -> "Maybe.Just"; "Model.hideItem_" -> "Maybe.Nothing"; "Model.hideItem_" -> "Model.mapAssocsOfPlayer_"; "Model.illegalId" -> "String.fromInt"; "Model.illegalId" -> "Utils.logError"; "Model.illegalItemId" -> "Model.illegalId"; "Model.illegalMapId" -> "Model.illegalId"; "Model.isAssoc" -> "Basics.not"; "Model.isAssoc" -> "Model.isTopic"; "Model.isFullscreen" -> "Model.activeMap"; "Model.isHome" -> "Model.activeMap"; "Model.isItemInMap" -> "Basics.False"; "Model.isItemInMap" -> "Basics.True"; "Model.isItemInMap" -> "Dict.get"; "Model.isItemInMap" -> "Model.getMap"; "Model.isMapAssoc" -> "Basics.not"; "Model.isMapAssoc" -> "Model.isMapTopic"; "Model.isMapTopic" -> "Basics.False"; "Model.isMapTopic" -> "Basics.True"; "Model.isTopic" -> "Basics.False"; "Model.isTopic" -> "Basics.True"; "Model.isVisible" -> "Basics.not"; "Model.itemNotInMap" -> "String.fromInt"; "Model.itemNotInMap" -> "Utils.logError"; "Model.mapAssocsOfPlayer_" -> "Dict.values"; "Model.mapAssocsOfPlayer_" -> "List.filter"; "Model.mapAssocsOfPlayer_" -> "List.map"; "Model.mapAssocsOfPlayer_" -> "Model.hasPlayer"; "Model.mapAssocsOfPlayer_" -> "Model.isMapAssoc"; "Model.setDisplayMode" -> "Model.updateTopicProps"; "Model.setTopicPos" -> "Model.updateTopicProps"; "Model.setTopicPosByDelta" -> "Model.Point"; "Model.setTopicPosByDelta" -> "Model.updateTopicProps"; "Model.setTopicSize" -> "Model.updateTopicProps"; "Model.showItem" -> "Basics.False"; "Model.showItem" -> "Dict.update"; "Model.showItem" -> "Maybe.Just"; "Model.showItem" -> "Maybe.Nothing"; "Model.showItem" -> "Model.updateMaps"; "Model.topicMismatch" -> "String.fromInt"; "Model.topicMismatch" -> "Utils.logError"; "Model.updateMapRect" -> "Model.updateMaps"; "Model.updateMaps" -> "Dict.update"; "Model.updateMaps" -> "Maybe.Just"; "Model.updateMaps" -> "Maybe.Nothing"; "Model.updateMaps" -> "Model.illegalMapId"; "Model.updateTopicInfo" -> "Dict.update"; "Model.updateTopicInfo" -> "Maybe.Just"; "Model.updateTopicInfo" -> "Maybe.Nothing"; "Model.updateTopicInfo" -> "Model.Topic"; "Model.updateTopicInfo" -> "Model.illegalItemId"; "Model.updateTopicInfo" -> "Model.topicMismatch"; "Model.updateTopicProps" -> "Dict.update"; "Model.updateTopicProps" -> "Maybe.Just"; "Model.updateTopicProps" -> "Maybe.Nothing"; "Model.updateTopicProps" -> "Model.MapTopic"; "Model.updateTopicProps" -> "Model.illegalItemId"; "Model.updateTopicProps" -> "Model.topicMismatch"; "Model.updateTopicProps" -> "Model.updateMaps"; "Search.closeResultMenu" -> "Model.ResultClosed"; "Search.isMatch" -> "Basics.not"; "Search.isMatch" -> "String.contains"; "Search.isMatch" -> "String.isEmpty"; "Search.isMatch" -> "String.toLower"; "Search.itemDecoder" -> "Json.Decode.andThen"; "Search.itemDecoder" -> "Json.Decode.at"; "Search.itemDecoder" -> "Json.Decode.map"; "Search.itemDecoder" -> "Json.Decode.string"; "Search.itemDecoder" -> "Model.Search"; "Search.itemDecoder" -> "Utils.strToIntDecoder"; "Search.onOutItem" -> "Maybe.Nothing"; "Search.onOutItem" -> "Model.ResultOpen"; "Search.onOutItem" -> "Utils.logError"; "Search.onOverItem" -> "Maybe.Just"; "Search.onOverItem" -> "Model.ResultOpen"; "Search.onOverItem" -> "Utils.logError"; "Search.onSearchInput" -> "Search.search"; "Search.resultItemStyle" -> "Basics.False"; "Search.resultItemStyle" -> "Html.Attributes.style"; "Search.resultItemStyle" -> "Maybe.Just"; "Search.resultMenuStyle" -> "Config.contentFontSize"; "Search.resultMenuStyle" -> "Html.Attributes.style"; "Search.resultMenuStyle" -> "String.fromInt"; "Search.revealTopic" -> "Config.topicSize"; "Search.revealTopic" -> "Model.MapTopic"; "Search.revealTopic" -> "Model.addItemToMap"; "Search.revealTopic" -> "Model.defaultProps"; "Search.revealTopic" -> "Model.isItemInMap"; "Search.revealTopic" -> "Model.showItem"; "Search.revealTopic" -> "Utils.info"; "Search.search" -> "Dict.foldr"; "Search.search" -> "Maybe.Nothing"; "Search.search" -> "Model.ResultOpen"; "Search.search" -> "Search.isMatch"; "Search.searchInputStyle" -> "Html.Attributes.style"; "Search.updateSearch" -> "Maybe.Nothing"; "Search.updateSearch" -> "Model.ResultOpen"; "Search.updateSearch" -> "Model.activeMap"; "Search.updateSearch" -> "Platform.Cmd.none"; "Search.updateSearch" -> "Search.closeResultMenu"; "Search.updateSearch" -> "Search.onOutItem"; "Search.updateSearch" -> "Search.onOverItem"; "Search.updateSearch" -> "Search.onSearchInput"; "Search.updateSearch" -> "Search.revealTopic"; "Search.updateSearch" -> "Storage.storeModel"; "Search.viewResultMenu" -> "Html.Attributes.attribute"; "Search.viewResultMenu" -> "Html.Events.on"; "Search.viewResultMenu" -> "Html.div"; "Search.viewResultMenu" -> "Html.text"; "Search.viewResultMenu" -> "List.isEmpty"; "Search.viewResultMenu" -> "List.map"; "Search.viewResultMenu" -> "Model.ClickItem"; "Search.viewResultMenu" -> "Model.NoOp"; "Search.viewResultMenu" -> "Model.OutItem"; "Search.viewResultMenu" -> "Model.OverItem"; "Search.viewResultMenu" -> "Model.getTopicInfo"; "Search.viewResultMenu" -> "Search.itemDecoder"; "Search.viewResultMenu" -> "Search.resultItemStyle"; "Search.viewResultMenu" -> "Search.resultMenuStyle"; "Search.viewResultMenu" -> "String.fromInt"; "Search.viewResultMenu" -> "Utils.stopPropagationOnMousedown"; "Search.viewSearchInput" -> "Html.Attributes.value"; "Search.viewSearchInput" -> "Html.Events.onFocus"; "Search.viewSearchInput" -> "Html.Events.onInput"; "Search.viewSearchInput" -> "Html.div"; "Search.viewSearchInput" -> "Html.input"; "Search.viewSearchInput" -> "Html.text"; "Search.viewSearchInput" -> "Model.Search"; "Search.viewSearchInput" -> "Model.SearchFocus"; "Search.viewSearchInput" -> "Model.SearchInput"; "Search.viewSearchInput" -> "Search.searchInputStyle"; "Storage.displayModeDecoder" -> "Json.Decode.fail"; "Storage.displayModeDecoder" -> "Json.Decode.succeed"; "Storage.displayModeDecoder" -> "Model.BlackBox"; "Storage.displayModeDecoder" -> "Model.Container"; "Storage.displayModeDecoder" -> "Model.Detail"; "Storage.displayModeDecoder" -> "Model.LabelOnly"; "Storage.displayModeDecoder" -> "Model.Monad"; "Storage.displayModeDecoder" -> "Model.Unboxed"; "Storage.displayModeDecoder" -> "Model.WhiteBox"; "Storage.encodeDisplayName" -> "Json.Encode.string"; "Storage.encodeItem" -> "Json.Encode.int"; "Storage.encodeItem" -> "Json.Encode.object"; "Storage.encodeItem" -> "Json.Encode.string"; "Storage.encodeItem" -> "Maybe.withDefault"; "Storage.encodeMap" -> "Json.Encode.dict"; "Storage.encodeMap" -> "Json.Encode.float"; "Storage.encodeMap" -> "Json.Encode.int"; "Storage.encodeMap" -> "Json.Encode.object"; "Storage.encodeMap" -> "Storage.encodeMapItem"; "Storage.encodeMap" -> "String.fromInt"; "Storage.encodeMapItem" -> "Json.Encode.bool"; "Storage.encodeMapItem" -> "Json.Encode.float"; "Storage.encodeMapItem" -> "Json.Encode.int"; "Storage.encodeMapItem" -> "Json.Encode.object"; "Storage.encodeMapItem" -> "Storage.encodeDisplayName"; "Storage.encodeModel" -> "Json.Encode.dict"; "Storage.encodeModel" -> "Json.Encode.int"; "Storage.encodeModel" -> "Json.Encode.list"; "Storage.encodeModel" -> "Json.Encode.object"; "Storage.encodeModel" -> "Storage.encodeItem"; "Storage.encodeModel" -> "Storage.encodeMap"; "Storage.encodeModel" -> "String.fromInt"; "Storage.mapDecoder" -> "Json.Decode.andThen"; "Storage.mapDecoder" -> "Json.Decode.bool"; "Storage.mapDecoder" -> "Json.Decode.dict"; "Storage.mapDecoder" -> "Json.Decode.field"; "Storage.mapDecoder" -> "Json.Decode.float"; "Storage.mapDecoder" -> "Json.Decode.int"; "Storage.mapDecoder" -> "Json.Decode.map"; "Storage.mapDecoder" -> "Json.Decode.map2"; "Storage.mapDecoder" -> "Json.Decode.map3"; "Storage.mapDecoder" -> "Json.Decode.map4"; "Storage.mapDecoder" -> "Json.Decode.map5"; "Storage.mapDecoder" -> "Json.Decode.oneOf"; "Storage.mapDecoder" -> "Json.Decode.string"; "Storage.mapDecoder" -> "Json.Decode.succeed"; "Storage.mapDecoder" -> "Model.AssocProps"; "Storage.mapDecoder" -> "Model.Map"; "Storage.mapDecoder" -> "Model.MapAssoc"; "Storage.mapDecoder" -> "Model.MapItem"; "Storage.mapDecoder" -> "Model.MapTopic"; "Storage.mapDecoder" -> "Model.Point"; "Storage.mapDecoder" -> "Model.Rectangle"; "Storage.mapDecoder" -> "Model.Size"; "Storage.mapDecoder" -> "Model.TopicProps"; "Storage.mapDecoder" -> "Storage.displayModeDecoder"; "Storage.mapDecoder" -> "Storage.strToIntDictDecoder"; "Storage.maybeString" -> "Json.Decode.succeed"; "Storage.maybeString" -> "Maybe.Just"; "Storage.maybeString" -> "Maybe.Nothing"; "Storage.modelDecoder" -> "Json.Decode.Pipeline.hardcoded"; "Storage.modelDecoder" -> "Json.Decode.Pipeline.required"; "Storage.modelDecoder" -> "Json.Decode.andThen"; "Storage.modelDecoder" -> "Json.Decode.dict"; "Storage.modelDecoder" -> "Json.Decode.field"; "Storage.modelDecoder" -> "Json.Decode.int"; "Storage.modelDecoder" -> "Json.Decode.list"; "Storage.modelDecoder" -> "Json.Decode.map"; "Storage.modelDecoder" -> "Json.Decode.map3"; "Storage.modelDecoder" -> "Json.Decode.map6"; "Storage.modelDecoder" -> "Json.Decode.oneOf"; "Storage.modelDecoder" -> "Json.Decode.string"; "Storage.modelDecoder" -> "Json.Decode.succeed"; "Storage.modelDecoder" -> "Model.Assoc"; "Storage.modelDecoder" -> "Model.AssocInfo"; "Storage.modelDecoder" -> "Model.Model"; "Storage.modelDecoder" -> "Model.Topic"; "Storage.modelDecoder" -> "Model.TopicInfo"; "Storage.modelDecoder" -> "Model.defaultModel"; "Storage.modelDecoder" -> "Storage.mapDecoder"; "Storage.modelDecoder" -> "Storage.maybeString"; "Storage.modelDecoder" -> "Storage.strToIntDictDecoder"; "Storage.storeModel" -> "Storage.encodeModel"; "Storage.storeModel" -> "Storage.store"; "Storage.storeModelWith" -> "Platform.Cmd.batch"; "Storage.storeModelWith" -> "Storage.encodeModel"; "Storage.storeModelWith" -> "Storage.store"; "Storage.strToIntDict" -> "Dict.empty"; "Storage.strToIntDict" -> "Dict.foldl"; "Storage.strToIntDict" -> "Dict.insert"; "Storage.strToIntDict" -> "Maybe.Just"; "Storage.strToIntDict" -> "Maybe.Nothing"; "Storage.strToIntDict" -> "String.toInt"; "Storage.strToIntDictDecoder" -> "Json.Decode.fail"; "Storage.strToIntDictDecoder" -> "Json.Decode.succeed"; "Storage.strToIntDictDecoder" -> "Storage.strToIntDict"; "Utils.call" -> "Debug.log"; "Utils.call" -> "Utils.toString"; "Utils.fail" -> "Debug.log"; "Utils.fail" -> "Utils.toString"; "Utils.info" -> "Debug.log"; "Utils.keyDecoder" -> "Html.Events.keyCode"; "Utils.keyDecoder" -> "Json.Decode.andThen"; "Utils.keyDecoder" -> "Json.Decode.fail"; "Utils.keyDecoder" -> "Json.Decode.succeed"; "Utils.logError" -> "Debug.log"; "Utils.multilineHtml" -> "Html.br"; "Utils.multilineHtml" -> "Html.text"; "Utils.multilineHtml" -> "List.foldr"; "Utils.multilineHtml" -> "String.lines"; "Utils.onEnterOrEsc" -> "Html.Events.on"; "Utils.onEnterOrEsc" -> "Json.Decode.oneOf"; "Utils.onEnterOrEsc" -> "Utils.keyDecoder"; "Utils.onEsc" -> "Html.Events.on"; "Utils.onEsc" -> "Utils.keyDecoder"; "Utils.stopPropagationOnMousedown" -> "Basics.True"; "Utils.stopPropagationOnMousedown" -> "Html.Events.stopPropagationOn"; "Utils.stopPropagationOnMousedown" -> "Json.Decode.succeed"; "Utils.strToIntDecoder" -> "Json.Decode.fail"; "Utils.strToIntDecoder" -> "Json.Decode.succeed"; "Utils.strToIntDecoder" -> "String.toInt"; "Utils.toString" -> "Debug.toString"; }

Graphviz diagrams now sourced as aspects available throughout the lineup. We expect to refine the translation as we understand the workflows this enables. github

wiki-plugin-graphviz wiki-plugin-solo

A call graph (also known as a call multigraph) is a control-flow graph, which represents calling relationships between subroutines in a computer program. Each node represents a procedure and each edge (f, g) indicates that procedure f calls procedure g. Thus, a cycle in the graph indicates recursive procedure calls. wikipedia

solo

We view the call graph with the Solo Lineup Browser.

Select a node in the CallGraph and click group.

group

New Aspects for Solo

Assets

pages/call-graph