Source: svg-extras.js

(function (global) {
    'use strict';

    if (!EventEmitter) {
        throw new Error('Svg-extras requires https://github.com/primus/eventemitter3');
    }

    if (!inherit) {
        throw new Error('Svg-extras requires https://github.com/dfilatov/inherit');
    }

    var isTouchDevice = 'ontouchstart' in document.documentElement;

    /**
     * svgext namespace
     * @namespace svgext
     */
    global.svgext = {
        /**
         * Touch device flag
         *
         * @type {Boolean}
         * @private
         */
        _isTouchDevice: isTouchDevice,

        /**
         * Runs events only in a new request animation frame
         *
         * @param {String} type Event name
         * @param {String} callback Event listener
         * @param {DOMElement} [domNode]
         * @private
         * @returns {Function} detach function
         */
        _throttleEventListener: function (type, callback, domNode) {
            var running = false,
                detached = false;

            domNode = domNode || window;
            var handler = function (e) {
                if (running) {
                    return false;
                }
                running = true;
                requestAnimationFrame(function () {
                    if (!detached) {
                        callback(e);
                    }
                    running = false;
                });
            };

            domNode.addEventListener(type, handler, false);

            return function () {
                detached = true;
                domNode.removeEventListener(type, handler);
            };
        },

        /**
         * Defines default svgext settings structure
         *
         * @name svgext.default
         * @prop {resolution} control
         * @prop {Object} borderedRect
         * @prop {Number} borderedRect.borderOffset
         */
        default: {
            control: {
                width: 12,
                height: 12
            },
            borderedRect: {
                borderOffset: 14
            }
        }
    };
}(window));