JSFiddle - React, Tailwind, and code Playground

HTML

<script src="//graetzer.org/public/globe/three.min.js"></script>
<script src="//graetzer.org/public/globe/Detector.js"></script>
<div class="col-sm-9" id="globe-container">
    <div id="globe-placeholder" style="width:100%;height:300px;background:transparent url('https://graetzer.org/public/globe/loading.gif') no-repeat center center"></div>
</div>

JavaScript

var globe, places, active;

var container = document.getElementById('globe-container');
var placeholder = document.getElementById('globe-placeholder');
if (!Detector.webgl) {
    container.removeChild(placeholder);
    Detector.addGetWebGLMessage({parent:container});
} else {
    var globeImg = document.createElement('IMG');
  globeImg.crossOrigin = "Anonymous";
    globeImg.onload = function() {

        var canvas = document.createElement('canvas');
        canvas.width = globeImg.width;
        canvas.height = globeImg.height;
        var context = canvas.getContext('2d');
        context.drawImage(globeImg, 0, 0);
        var worldMap = context.getImageData(0, 0, globeImg.width, globeImg.height);

        globe = new DAT.Globe(container);
        globe.setData(worldMap, []);
        globe.animate();
        container.removeChild(placeholder);
    };
    globeImg.src = "http://i.imgur.com/f6DSPoL.png";
}

var DAT = DAT || {};

DAT.Globe = function(container, opts) {
  opts = opts || {};

  var camera, scene, renderer, w, h;
  var mesh, atmosphere, point;

  var overRenderer, mouseDown, zoomTouchSpread;

  var curZoomSpeed = 0;
  var zoomSpeed = 50;

  var mouse = {
      x: 0,
      y: 0
    },
    mouseOnDown = {
      x: 0,
      y: 0
    };
  var rotation = {
      x: 0,
      y: 0
    },
    target = {
      x: Math.PI * 3 / 2,
      y: Math.PI / 8.0
    },
    targetOnDown = {
      x: 0,
      y: 0
    };

  var distance = 100000,
    distanceTarget = 100000;
  var PI_HALF = Math.PI / 2;

  function init() {

    var shader, uniforms, material;
    //600 is enough to get the globe in full and have a good render performance
    w = container.clientWidth || 600;
    h = Math.min(600, w) || 600;

    camera = new THREE.PerspectiveCamera(25, w / h, 1, 10000);
    camera.position.z = distance;

    scene = new THREE.Scene();

    var geometry = new THREE.SphereGeometry(200, 40, 30);
    var material = new THREE.MeshBasicMaterial({
      color: 0xffffff
   ...