Reusable Accessible Mapping Platform

API Docs for: 2.0.0
Show:

File: src\js\RAMP\Modules\navigation.js

/*global define, dojoConfig */

/**
* Navigation submodule
*
* @module RAMP
* @submodule Navigation
* @main Navigation
*/

/**
* Navigation class.
*
* This module provide function to initialize navigation widget using settings stored in
* global configuration object.
*
* NOTE: jquery.ui.navigation.js is required to create the object
*
* @class Navigation
* @static
* @uses dojo/_base/declare
* @uses dojo/topic
* @uses GlobalStorage
* @uses EventManager
*/

define([
//Dojo
    "dojo/_base/declare", "dojo/topic",

//RAMP
    "ramp/globalStorage", "ramp/eventManager"
],

function (
// Dojo
    declare, topic,
// RAMP
    GlobalStorage, EventManager) {
    "use strict";
    var nav;

    /**
    * Listen to internal events and republish for other modules' benefit
    *
    * @method initTopics
    * @private
    */
    function initTopics() {
        nav
            .on("navigation:panClick", function (e, direction) {
                topic.publish(EventManager.Navigation.PAN, {
                    direction: direction
                });
            })
            .on("navigation:zoomClick", function (e, in_out) {
                var newLvl = (in_out === "zoomIn") ? 1 : -1;
                topic.publish(EventManager.Navigation.ZOOM_STEP, {
                    level: newLvl
                });
            })
            .on("navigation:zoomSliderChange", function (e, newVal) {
                topic.publish(EventManager.Navigation.ZOOM, {
                    level: newVal
                });
            })
            .on("navigation:fullExtentClick", function () {
                topic.publish(EventManager.Navigation.FULL_EXTENT);
            });
    }

    /**
    * Listen to map evens and adjust the navigation widget accordingly
    *
    * @method  initListeners
    * @private
    */
    function initListeners() {
        function toggleTransition() {
            nav.navigation("toggleTransition");
        }

        topic.subscribe(EventManager.Map.EXTENT_CHANGE, function (event) {
            nav.navigation("setSliderVal", event.lod.level);
        });

        /* Keep track of when the map is in transition, the slider will throw
        errors if the value is changed during a map transition. */
        topic.subscribe(EventManager.Map.ZOOM_START, toggleTransition);
        topic.subscribe(EventManager.Map.ZOOM_END, toggleTransition);
        topic.subscribe(EventManager.Map.PAN_START, toggleTransition);
        topic.subscribe(EventManager.Map.PAN_END, toggleTransition);
    }

    return {
        /**
        * Initialize navigaion widget for pan and zooming using global configuration object
        *
        * @method init
        * @param {Number} currentLevel
        */
        init: function (currentLevel) {
            // Note: JKW added currentlevel
            GlobalStorage.config.navWidget.sliderVal = currentLevel; // reference to line 134 of jquery.ui.navigations.js

            var cssPath = GlobalStorage.config.navWidget.cssPath;
            // update cssPath of the widget so it points to the proper folder: build or src
            GlobalStorage.config.navWidget.cssPath = dojoConfig.cssFolderPath + dojoConfig.buildState + cssPath;
            GlobalStorage.config.navWidget.skin += dojoConfig.extensionPrefix;
            //GlobalStorage.config.navWidget.locale = dojoConfig.locale;

            nav = $("#" + GlobalStorage.config.divNames.navigation).navigation(GlobalStorage.config.navWidget);
            // NOTE: JKW Document the change. Refactor,
            nav.navigation("setSliderVal", currentLevel);

            initTopics();
            initListeners();
        }
    };
});