Source: main.js

/**
 * Entry point for the application
 * @module app/main
 * @author David Kristiansen <david.kristiansen@nscc.ca>
 * @copyright Nova Scotia Community College 2017
 */
define([
        "dojo/ready",
        "dojo/on",
        "dojo/dom",
        "dijit/registry",
        "dojo/topic",
        "dojo/keys",
        "dojo/cookie",

        "dijit/TooltipDialog",
        "dijit/popup",

        "app/widget/DisclaimerWindow",
        "app/Layout",
        "app/widget/MapWidget",
        "app/DataController",
        "app/SidebarController"
    ],
    function (
        ready,
        on,
        dom,
        registry,
        topic,
        keys,
        cookie,

        TooltipDialog,
        popup,

        DisclaimerWindow,
        Layout,
        MapWidget,
        DC,
        SidebarController
    ) {
        var app = {};
        if (cookie("disclaimer") != "accepted") {
            app.disclaimer = new DisclaimerWindow({
                title: "Disclaimer",
                style: "width: 500px"
            });

            app.disclaimer.show();
        }
        app.layout = new Layout({
            title: "Maritime Coastal Flood Risk Map",
            //            description: "Click or select a Lidar Coverage Area to zoom in",
            sidebarContent: "",
            mapContent: "<div id='homebutton'></div> <img id='loadingImg' src='https://js.arcgis.com/3.19/esri/themes/calcite/images/loadingIndicator/loading-dark.gif' /><div id='fldControls'><div id='sliderTitle'><div id='sliderVTxt'>Flood Level</div></div><span id='sliderSpan'><div id='twlSlider'><div id='rulesNode'></div><div id='labelsNode'></div></div></span></div>",
            footerContent: "Created by AGRG of the NSCC &copy;2017"
        }, dom.byId("main"));

        app.mapWidget = new MapWidget({
            navigationMode: 'css-tranforms',
            extent: {
                "xmin": -67.42191601562364,
                "ymin": 43.559155856810165,
                "xmax": -59.12723828124905,
                "ymax": 46.9227486438679,
                "spatialReference": {
                    "wkid": 4326
                }
            },
            basemap: 'topo',
            geocoder: true
        });

        app.Data = new DC("");

        app.Data.startup();
        app.layout.startup();
        app.mapWidget.startup();

        app.Data.on("load", function () {
            app.sidebarController = new SidebarController({
                map: app.mapWidget.map,
                data: app.Data
            });
            app.sidebarController.startup();
        });
        app.mapWidget.map.on("load", function () {
            app.mapWidget.map.graphics.enableMouseEvents();
            var onBoardingDialog = new TooltipDialog({
                id: 'onBoadingTooltip',
                content: "<p class='onboardingTxt'>Choose a Lidar Coverage Area to get started!</p>",
                onMouseLeave: function () {
                    popup.close(onBoardingDialog);
                }
            });
            popup.open({
                popup: onBoardingDialog,
                orient: ["after-centered", "after", "below-alt"],
                around: dom.byId('btnZoom')
            });
        });

        app.mapWidget.map.on('key-up', function (evt) {
            if (evt.altKey && evt.keyCode === 67) {
                topic.publish("ChartDemo");
            }
            if (evt.altKey && evt.keyCode === 76) {
                topic.publish("nor'easter");
            }
            if (evt.keyCode === 104) { //up on numpad with numlock
                //change flood level
                console.log("Go get 'em kid!");
            }
            if (evt.keyCode === 98) { //down on numpad with numlock
                //change flood level down
            }
        });

        topic.subscribe("selection", function (val) {
            var selectFlood = val.toFixed(1) * 100; //convert value into flood layer 10 cm unit
            selectFlood = selectFlood.toFixed();
            if (val >= 0) {
                registry.byId("twlSlider").set("value", selectFlood);
            } else {
                registry.byId("twlSlider").set("value", 0);
            }

        });
        return app;
    });