• Edit
  • Download
  • <!DOCTYPE html>
    <html>
    
    <head>
      <meta charset="utf-8">
      <title>ZingSoft Demo</title>
    
      <script nonce="undefined" src="https://cdn.zingchart.com/zingchart.min.js"></script>
      <style>
        html,
        body {
          height: 100%;
          width: 100%;
          margin: 0;
          padding: 0;
        }
    
        #myChart {
          height: 100%;
          width: 100%;
          min-height: 150px;
        }
    
        .zc-ref {
          display: none;
        }
      </style>
    </head>
    
    <body>
      <div id="myChart"><a class="zc-ref" href="https://www.zingchart.com">Powered by ZingChart</a></div>
    
      <script>
        ZC.LICENSE = ["569d52cefae586f634c54f86dc99e6a9", "b55b025e438fa8a98e32482b5f768ff5"]; // must load maps and first map we are going to render
        zingchart.loadModules('maps,maps-usa');
    
        var arrayOfColors = ['#EF9A9A #E57373', '#F48FB1 #F06292', '#B39DDB #9575CD', '#90CAF9 #64B5F6', '#80DEEA #4DD0E1', '#80CBC4 #4DB6AC', '#A5D6A7 #81C784', '#E6EE9C #DCE775', '#FFE082 #FFD54F', '#FFAB91 #FF8A65'];
        var colorIndex = 0;
        var listOfStates = ["al", "ak", "az", "ar", "ca", "co", "ct", "de", "dc", "fl", "ga", "hi", "id", "il", "in", "ia", "ks", "ky", "la", "me", "md", "ma", "mi", "mn", "ms", "mo", "mt", "ne", "nv", "nh", "nj", "nm", "ny", "nc", "nd", "oh", "ok", "or", "pa", "ri", "sc", "sd", "tn", "tx", "ut", "vt", "va", "wa", "wv", "wi", "wy"];
    
        /* 
         *  need this function to render the first map load with random colors
         */
        var objectStates = function(arrayOfStates) {
          var objectOfStates = {};
          for (var i = 0; i < arrayOfStates.length; i++) {
            var itemId = arrayOfStates[i].toUpperCase();
            colorIndexCheck();
            objectOfStates[itemId] = {
              'background-color': arrayOfColors[colorIndex++]
            }
          }
    
          return objectOfStates;
        }(listOfStates);
    
        console.log('---- object form of states ----', objectStates);
    
        // initial config for first chart
        var myConfig = {
          shapes: [{
            type: 'zingchart.maps',
            options: {
              name: 'usa',
    
              zooming: false,
              panning: false,
              scrolling: false,
    
              style: {
                controls: {
                  visible: false
                },
                fillType: 'radial',
                cursor: 'pointer',
                hoverState: {
                  alpha: 0.3,
                  backgroundColor: 'white',
                },
                items: objectStates, //include specific shape regions with unique styles
                tooltip: {
                  alpha: 0.8,
                  backgroundColor: 'white',
                  borderColor: 'white',
                  borderRadius: 3,
                  fontColor: 'black',
                  fontFamily: 'Georgia',
                  fontSize: 12,
                  textAlpha: 1
                }
              }
            }
          }]
        };
    
        zingchart.render({
          id: 'myChart',
          data: myConfig,
          height: '100%',
          width: '100%'
        });
    
    
        // use this function to assign random colors 
        zingchart.bind('myChart', 'dataparse', function(e, oGraph) {
          console.log(arguments)
    
          // if graphset exists
          if (oGraph && oGraph.graphset[0]) {
            // if shapes exist
            if (oGraph.graphset[0].shapes) {
              oGraph.graphset[0].shapes = oGraph.graphset[0].shapes.map(function(curVal) {
                if (curVal && curVal['map-item']) {
                  colorIndexCheck();
                  curVal['background-color'] = arrayOfColors[colorIndex++];
                }
    
                return curVal;
              });
            }
          }
    
          return oGraph;
        });
    
        //drilldown chart configuration
        var drilldownConfig = {
          shapes: [{ //Drilldown maps.
              type: 'zingchart.maps',
              options: {
                name: '',
    
                zooming: false,
                panning: false,
                scrolling: false,
    
                style: {
                  controls: {
                    visible: false
                  },
                  backgroundColor: 'pink',
                  hoverState: {
                    alpha: 0.3,
                    backgroundColor: 'white',
                  },
                  tooltip: {
                    alpha: 0.8,
                    backgroundColor: 'white',
                    borderColor: 'white',
                    borderRadius: 3,
                    fontColor: 'black',
                    fontFamily: 'Georgia',
                    fontSize: 12,
                    textAlpha: 1
                  }
                }
              }
            },
            { //Button to go back to main map.
              id: 'back_button',
              type: 'rectangle',
              height: 25,
              width: 40,
              x: 20,
              y: 20,
    
              backgroundColor: '#C4C4C4',
              borderRadius: 3,
              cursor: 'hand',
              hoverState: {
                alpha: 0.3,
                backgroundColor: 'white'
              },
              label: {
                text: 'Back',
              }
            }
          ]
        };
    
        // stringify the maps to load them into page using loadModules()
        var stringifyMapList = listOfStates.reduce(function(acc, curVal, index) {
          if (index === 1)
            acc = 'maps-usa_' + acc;
          return acc + ',' + 'maps-usa_' + curVal;
        });
        console.log('---stringified map modules ----', stringifyMapList);
    
        // for maps that exist in our library. Pre-load them later on
        zingchart.loadModules(stringifyMapList);
    
        /*
         * shape click is when we render a new chart or load the original chart
         */
        zingchart.bind('myChart', 'shape_click', function(e) {
          var newMapId = 'usa_' + String(e.shapeid).toLowerCase();
          var shapeId = e.shapeid;
    
          // if shape is our back button and not the map
          if (shapeId == 'back_button') {
            // since we are using setdata, reload will reload the original chartJSON
            zingchart.exec('myChart', 'reload');
            return;
          }
    
          if (hasDrilldownData(newMapId)) {
            drilldownConfig.shapes[0].options.name = newMapId;
            zingchart.exec('myChart', 'setdata', {
              data: drilldownConfig
            });
          }
        });
    
        // used in the shape_click event to determine if we should drilldown
        function hasDrilldownData(newMapId) {
          var drillDownCountries = listOfStates.map(function(curVal) {
            return 'usa_' + curVal;
          });
          for (var i = 0; i < drillDownCountries.length; i++) {
            if (newMapId === drillDownCountries[i])
              return true;
          }
    
          return false;
        }
    
        // update colorindex for assigning random colors
        function colorIndexCheck() {
          if (colorIndex >= arrayOfColors.length) {
            colorIndex = 0;
          }
        }
      </script>
    </body>
    
    </html>
    <!DOCTYPE html>
    <html>
    
    <head>
      <meta charset="utf-8">
      <title>ZingSoft Demo</title>
    
      <script src="https://cdn.zingchart.com/zingchart.min.js"></script>
    </head>
    
    <body>
      <div id="myChart"><a class="zc-ref" href="https://www.zingchart.com">Powered by ZingChart</a></div>
    
    </body>
    
    </html>
    html,
    body {
      height: 100%;
      width: 100%;
      margin: 0;
      padding: 0;
    }
    
    #myChart {
      height: 100%;
      width: 100%;
      min-height: 150px;
    }
    
    .zc-ref {
      display: none;
    }
    // must load maps and first map we are going to render
    zingchart.loadModules('maps,maps-usa');
    
    var arrayOfColors = ['#EF9A9A #E57373', '#F48FB1 #F06292', '#B39DDB #9575CD', '#90CAF9 #64B5F6', '#80DEEA #4DD0E1', '#80CBC4 #4DB6AC', '#A5D6A7 #81C784', '#E6EE9C #DCE775', '#FFE082 #FFD54F', '#FFAB91 #FF8A65'];
    var colorIndex = 0;
    var listOfStates = ["al", "ak", "az", "ar", "ca", "co", "ct", "de", "dc", "fl", "ga", "hi", "id", "il", "in", "ia", "ks", "ky", "la", "me", "md", "ma", "mi", "mn", "ms", "mo", "mt", "ne", "nv", "nh", "nj", "nm", "ny", "nc", "nd", "oh", "ok", "or", "pa", "ri", "sc", "sd", "tn", "tx", "ut", "vt", "va", "wa", "wv", "wi", "wy"];
    
    /* 
     *  need this function to render the first map load with random colors
     */
    var objectStates = function(arrayOfStates) {
      var objectOfStates = {};
      for (var i = 0; i < arrayOfStates.length; i++) {
        var itemId = arrayOfStates[i].toUpperCase();
        colorIndexCheck();
        objectOfStates[itemId] = {
          'background-color': arrayOfColors[colorIndex++]
        }
      }
    
      return objectOfStates;
    }(listOfStates);
    
    console.log('---- object form of states ----', objectStates);
    
    // initial config for first chart
    var myConfig = {
      shapes: [{
        type: 'zingchart.maps',
        options: {
          name: 'usa',
    
          zooming: false,
          panning: false,
          scrolling: false,
    
          style: {
            controls: {
              visible: false
            },
            fillType: 'radial',
            cursor: 'pointer',
            hoverState: {
              alpha: 0.3,
              backgroundColor: 'white',
            },
            items: objectStates, //include specific shape regions with unique styles
            tooltip: {
              alpha: 0.8,
              backgroundColor: 'white',
              borderColor: 'white',
              borderRadius: 3,
              fontColor: 'black',
              fontFamily: 'Georgia',
              fontSize: 12,
              textAlpha: 1
            }
          }
        }
      }]
    };
    
    zingchart.render({
      id: 'myChart',
      data: myConfig,
      height: '100%',
      width: '100%'
    });
    
    
    // use this function to assign random colors 
    zingchart.bind('myChart', 'dataparse', function(e, oGraph) {
      console.log(arguments)
    
      // if graphset exists
      if (oGraph && oGraph.graphset[0]) {
        // if shapes exist
        if (oGraph.graphset[0].shapes) {
          oGraph.graphset[0].shapes = oGraph.graphset[0].shapes.map(function(curVal) {
            if (curVal && curVal['map-item']) {
              colorIndexCheck();
              curVal['background-color'] = arrayOfColors[colorIndex++];
            }
    
            return curVal;
          });
        }
      }
    
      return oGraph;
    });
    
    //drilldown chart configuration
    var drilldownConfig = {
      shapes: [{ //Drilldown maps.
          type: 'zingchart.maps',
          options: {
            name: '',
    
            zooming: false,
            panning: false,
            scrolling: false,
    
            style: {
              controls: {
                visible: false
              },
              backgroundColor: 'pink',
              hoverState: {
                alpha: 0.3,
                backgroundColor: 'white',
              },
              tooltip: {
                alpha: 0.8,
                backgroundColor: 'white',
                borderColor: 'white',
                borderRadius: 3,
                fontColor: 'black',
                fontFamily: 'Georgia',
                fontSize: 12,
                textAlpha: 1
              }
            }
          }
        },
        { //Button to go back to main map.
          id: 'back_button',
          type: 'rectangle',
          height: 25,
          width: 40,
          x: 20,
          y: 20,
    
          backgroundColor: '#C4C4C4',
          borderRadius: 3,
          cursor: 'hand',
          hoverState: {
            alpha: 0.3,
            backgroundColor: 'white'
          },
          label: {
            text: 'Back',
          }
        }
      ]
    };
    
    // stringify the maps to load them into page using loadModules()
    var stringifyMapList = listOfStates.reduce(function(acc, curVal, index) {
      if (index === 1)
        acc = 'maps-usa_' + acc;
      return acc + ',' + 'maps-usa_' + curVal;
    });
    console.log('---stringified map modules ----', stringifyMapList);
    
    // for maps that exist in our library. Pre-load them later on
    zingchart.loadModules(stringifyMapList);
    
    /*
     * shape click is when we render a new chart or load the original chart
     */
    zingchart.bind('myChart', 'shape_click', function(e) {
      var newMapId = 'usa_' + String(e.shapeid).toLowerCase();
      var shapeId = e.shapeid;
    
      // if shape is our back button and not the map
      if (shapeId == 'back_button') {
        // since we are using setdata, reload will reload the original chartJSON
        zingchart.exec('myChart', 'reload');
        return;
      }
    
      if (hasDrilldownData(newMapId)) {
        drilldownConfig.shapes[0].options.name = newMapId;
        zingchart.exec('myChart', 'setdata', {
          data: drilldownConfig
        });
      }
    });
    
    // used in the shape_click event to determine if we should drilldown
    function hasDrilldownData(newMapId) {
      var drillDownCountries = listOfStates.map(function(curVal) {
        return 'usa_' + curVal;
      });
      for (var i = 0; i < drillDownCountries.length; i++) {
        if (newMapId === drillDownCountries[i])
          return true;
      }
    
      return false;
    }
    
    // update colorindex for assigning random colors
    function colorIndexCheck() {
      if (colorIndex >= arrayOfColors.length) {
        colorIndex = 0;
      }
    }