Tabs in Popup Window

2503
7
11-21-2016 02:32 PM
SarojThapa1
Occasional Contributor III

I am trying to create two tabs in Info Window and display pie charts. The second tab displays the pie chart, but I could not create and load a pie chart in the first tab. 

Thanks.

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
    <title>Pie Chart</title>
    <link rel="stylesheet" href="https://js.arcgis.com/3.18/dijit/themes/claro/claro.css">
    <link rel="stylesheet" href="https://js.arcgis.com/3.18/esri/css/esri.css">
    <style>
        html, body, #map {
            height: 100%;
            width: 100%;
            margin: 0;
            padding: 0;
        }
        .chart {
            width:200px;
            height:200px;
            padding:0 !important;
        }
    </style>
    <script src="https://js.arcgis.com/3.18/"></script>
    <script>
        var map;
        // Try other themes: Julie, CubanShirts, PrimaryColors, Charged, BlueDusk, Bahamation, Harmony, Shrooms, Minty, Tom
        var theme = "PrimaryColors";
        require([
            "esri/map", "esri/layers/FeatureLayer",
            "esri/dijit/InfoWindow", "esri/InfoTemplate",
            "esri/symbols/SimpleFillSymbol", "esri/renderers/SimpleRenderer",
            "dijit/layout/ContentPane", "dijit/layout/TabContainer",
            "dojox/charting/Chart2D", "dojox/charting/plot2d/Pie",
            "dojox/charting/action2d/Highlight", "dojox/charting/action2d/MoveSlice", "dojox/charting/action2d/Tooltip",
            "dojox/charting/themes/" + theme,
            "dojo/dom-construct", "dojo/dom-class",
            "dojo/number", "dojo/domReady!"
        ], function(
                Map, FeatureLayer,
                InfoWindow, InfoTemplate,
                SimpleFillSymbol, SimpleRenderer,
                ContentPane, TabContainer,
                Chart2D, Pie,
                Highlight, MoveSlice, Tooltip,
                dojoxTheme,
                domConstruct, domClass,
                number, parser
        ) {
            // Use the info window instead of the popup.
            var infoWindow = new InfoWindow(null, domConstruct.create("div"));
            infoWindow.startup();

            map = new Map("map", {
                basemap: "topo",
                center: [-113.405, 43.521],
                infoWindow: infoWindow,
                zoom: 5
            });
            map.infoWindow.resize(275, 275);

            var template = new esri.InfoTemplate();
            template.setTitle("<b> ${Instl_Name}</b>");
            template.setContent(getWindowContent);

            var layer = new FeatureLayer("RESTUrl/FeatureServer/0", {
                mode: FeatureLayer.MODE_ONDEMAND,
                infoTemplate: template,
                outFields: ["*"]
            });

            map.addLayer(layer);

            function getWindowContent(graphic) {
                // Make a tab container.
                var tc = new TabContainer({
                    style: "width:100%;height:100%;"
                }, domConstruct.create("div"));

                // Display attribute information.
                var cp1 = new ContentPane({
                    title: "Collection"
                });
                tc.addChild(cp1);

                //Codes to create a tab for the first pie chart


                // Display a dojo pie chart for the complete/incomplete percentage.
                var cp2 = new ContentPane({
                    title: "Processing"
                });

                tc.addChild(cp2);

                // Create the chart that will display in the second tab.
                var c = domConstruct.create("div", {
                    id: "demoChart"
                }, domConstruct.create("div"));
                var chart = new Chart2D(c);
                domClass.add(chart, "chart");

                // Apply a color theme to the chart.
                chart.setTheme(dojoxTheme);
                chart.addPlot("default", {
                    type: "Pie",
                    radius: 70,
                    htmlLabels: true
                });
                tc.watch("selectedChildWidget", function(name, oldVal, newVal){
                    if ( newVal.title === "Processing" ) {
                        chart.resize(180,180);
                    }
                });

                // Calculate percent complete/ incomplete.
                var total = 100;
                var complete_processing = number.round(graphic.attributes.Data_Development);
                var incomplete = total - complete_processing;
                chart.addSeries("% Complete", [{
                    y: incomplete,
                    tooltip: incomplete,
                    text: "% Incomplete",
                    color: "red"
                }, {

                    y: complete_processing,
                    tooltip: complete_processing,
                    text: "% Complete",
                    color: "green"
                }]);
                //highlight the chart and display tooltips when you mouse over a slice.
                new Highlight(chart, "default");
                new Tooltip(chart, "default");
                new MoveSlice(chart, "default");

                cp2.set("content", chart.node);
                return tc.domNode;
            }
        });
    </script>
</head>

<body class="claro">
<div id="map"></div>
</body>
</html>
0 Kudos
7 Replies
by Anonymous User
Not applicable

Did you ever get this solved? I want to acheived tabbed pop-ups as well saroj1983

0 Kudos
SarojThapa1
Occasional Contributor III

Andrew,

I got the tabbed pop-ups working. What are you trying to display in the tabs of the tabcontainer?

0 Kudos
by Anonymous User
Not applicable

saroj thapa‌ I'm looking to, essentially, replicate this behavior: ArcGIS Web Application 

Our current application has some complex nested pop-ups Virtual Charlotte, Charlotte GIS  (if you zoom in, click on a parcel, click 'More' you'll see the types of tabs we're working with. The app was built in C#, the developer left and we're trying to refresh via the JS API esri offers. 

0 Kudos
by Anonymous User
Not applicable

In the sample app, there's both the 'size' and the 'attribute' tabs. I'd look to basically have a main tab, then secondary and tertiary tabs about the item's proximity.

0 Kudos
SarojThapa1
Occasional Contributor III

Andrew,

Check this one out.

dijit/layout/TabContainer — The Dojo Toolkit - Reference Guide 

You should be able to follow the Tabcontainer samples and achieve what you are trying to achieve. The samples are well documented. Let me know if you need additional help.

by Anonymous User
Not applicable

Thanks saroj1983‌! I'll give this a go right now. Off hand, do you know where this would be configured within an Esri Web App Builder Application file structure?

0 Kudos
SarojThapa1
Occasional Contributor III

Andrew, 

I do not use Web App Builder. Esri has a few repos on web app builder in github. Ask this question on geonet as a new question. Hopefully, someone will help you.

Good luck.

0 Kudos