Reusable Accessible Mapping Platform

API Docs for: 4.0.0
Show:

File: src\js\RAMP\Utils\functionMangler.js

/* global define, console */

/**
* Utility module containing useful static classes.
*
* @module Utils
*/

/**
* ??? Description
*
*
* @class FunctionMangler
* @static
* @uses dojo/on
* @uses dojo/_base/lang
* @uses dojo/topic
* @uses Util
*/

define([
/* Dojo */
        "dojo/topic", "dojo/_base/lang", "dojo/on",

/* Utils */
        "utils/util"
],

    function (
    /* Dojo */
        topic, dojoLang, dojoOn,

    /* Utils */
        UtilMisc) {
        "use strict";

        /**
        * [_initDojoPrototype description] Adds following extensions:
        * - `topic.subscrive(name, listener, scope)` - An extension of dojoLang.subscribe that allows the callback function to be
        * hitched with the given scope.
        * - `dojoOn(target, type, listener, scope)` -
        *
        *
        * @method _initDojoPrototype
        * @private
        */
        function _initDojoPrototype() {
            var originalOn = dojoOn;
            dojoOn = function (target, type, listener, scope) {
                if (UtilMisc.isUndefined(scope)) {
                    return originalOn(target, type, listener);
                } else {
                    return originalOn(target, type, dojoLang.hitch(scope, listener));
                }
            };

            var originalSubscribe = topic.subscribe;
            topic.subscribe = function (eventName, listener) {
                if (UtilMisc.isUndefined(eventName)) {
                    console.error("Trying to subscribe to an undefined event");
                    console.trace();
                } else {
                    return originalSubscribe(eventName, listener);
                }
            };
        }

        return {
            /**
            * [load description]
            *
            * @method load
            * @param  {[type]} id      [description]
            * @param  {[type]} require [description]
            * @param  {[type]} load    [description]
            * @return {[type]}         [description]
            */
            load: function (id, require, load) {
                _initDojoPrototype();

                load();
            }
        };
    });