all files / fc-er/ router.js

86.08% Statements 68/79
60.38% Branches 32/53
95% Functions 19/20
100% Lines 48/48
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117     874×   874×               11× 11× 11×     11× 11×                   874×   874×   874× 874× 874×         871×                 10×         864×         862×                                 860×   860× 860×                  
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; Eif ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { Eif (protoProps) defineProperties(Constructor.prototype, protoProps); Iif (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
 
function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
 
function _classCallCheck(instance, Constructor) { Iif (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
function _possibleConstructorReturn(self, call) { Iif (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
 
function _inherits(subClass, superClass) { Iif (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); Eif (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
 
Eif (typeof define !== 'function') {
    var define = require('amdefine')(module);
}
 
define(function (require) {
    'use strict';
 
    var EventTarget = require('fc-mini-event/EventTarget');
    var URL = require('./URL');
    var locator = require('./locator');
 
    var executeRoute = function executeRoute(e) {
        var url = e.url;
        Eif (typeof url === 'string') {
            url = URL.parse(e.url);
        }
 
        var path = url.getPath();
        for (var i = 0; i < this.routes.length; i++) {
            var route = this.routes[i];
 
            if (route.rule instanceof RegExp && route.rule.test(path) || route.rule === path) {
                route.handler.call(this, url);
                return;
            }
        }
 
        Eif (this.backup) {
            this.backup(url);
        }
 
        this.getEventBus().fire('route', { url: url, router: this });
    };
 
    var Router = function (_EventTarget) {
        _inherits(Router, _EventTarget);
 
        function Router() {
            _classCallCheck(this, Router);
 
            var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(Router).call(this));
 
            _this.routes = [];
            _this.backup = null;
            return _this;
        }
 
        _createClass(Router, [{
            key: 'setErContext',
            value: function setErContext(erContext) {
                this.erContext = erContext;
            }
        }, {
            key: 'getErContext',
            value: function getErContext() {
                return this.erContext;
            }
        }, {
            key: 'add',
            value: function add(rule, handler) {
                this.routes.push({ rule: rule, handler: handler });
            }
        }, {
            key: 'setBackup',
            value: function setBackup(handler) {
                this.backup = handler;
            }
        }, {
            key: 'getLocator',
            value: function getLocator() {
                return this.erContext && this.erContext.getLocator();
            }
        }, {
            key: 'setLocator',
            value: function setLocator(locator) {
                this.erContext && this.erContext.setLocator(locator);
            }
        }, {
            key: 'getEventBus',
            value: function getEventBus() {
                return this.erContext && this.erContext.getEventBus();
            }
        }, {
            key: 'setEventBus',
            value: function setEventBus(eventBus) {
                this.erContext && this.erContext.setEventBus(eventBus);
            }
        }, {
            key: 'start',
            value: function start() {
                var locator = this.getLocator();
 
                Eif (locator) {
                    locator.on('redirect', executeRoute, this);
                }
            }
        }]);
 
        return Router;
    }(EventTarget);
 
    var instance = new Router();
    instance.Router = Router;
 
    return instance;
});
//# sourceMappingURL=data:application/json;base64,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QUFrQixNQUFsQixDQS9Fc0I7O0FBaUZ0QixXQUFPLFFBQVAsQ0FqRnNCO0NBQW5CLENBQVAiLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicpIHt2YXIgZGVmaW5lID0gcmVxdWlyZSgnYW1kZWZpbmUnKShtb2R1bGUpfVxuXG5kZWZpbmUoZnVuY3Rpb24gKHJlcXVpcmUpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBjb25zdCBFdmVudFRhcmdldCA9IHJlcXVpcmUoJ2ZjLW1pbmktZXZlbnQvRXZlbnRUYXJnZXQnKTtcbiAgICBjb25zdCBVUkwgPSByZXF1aXJlKCcuL1VSTCcpO1xuICAgIGNvbnN0IGxvY2F0b3IgPSByZXF1aXJlKCcuL2xvY2F0b3InKTtcblxuICAgIGNvbnN0IGV4ZWN1dGVSb3V0ZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGxldCB1cmwgPSBlLnVybDtcbiAgICAgICAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB1cmwgPSBVUkwucGFyc2UoZS51cmwpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGF0aCA9IHVybC5nZXRQYXRoKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3V0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlID0gdGhpcy5yb3V0ZXNbaV07XG5cbiAgICAgICAgICAgIGlmICgocm91dGUucnVsZSBpbnN0YW5jZW9mIFJlZ0V4cCAmJiByb3V0ZS5ydWxlLnRlc3QocGF0aCkpIHx8IHJvdXRlLnJ1bGUgPT09IHBhdGgpIHtcbiAgICAgICAgICAgICAgICByb3V0ZS5oYW5kbGVyLmNhbGwodGhpcywgdXJsKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5iYWNrdXApIHtcbiAgICAgICAgICAgIHRoaXMuYmFja3VwKHVybCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdldEV2ZW50QnVzKCkuZmlyZSgncm91dGUnLCB7dXJsLCByb3V0ZXI6IHRoaXN9KTtcbiAgICB9O1xuXG4gICAgY2xhc3MgUm91dGVyIGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICB0aGlzLnJvdXRlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5iYWNrdXAgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0RXJDb250ZXh0KGVyQ29udGV4dCkge1xuICAgICAgICAgICAgdGhpcy5lckNvbnRleHQgPSBlckNvbnRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICBnZXRFckNvbnRleHQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lckNvbnRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICBhZGQocnVsZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXMucHVzaCh7cnVsZSwgaGFuZGxlcn0pO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0QmFja3VwKGhhbmRsZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYmFja3VwID0gaGFuZGxlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldExvY2F0b3IoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lckNvbnRleHQgJiYgdGhpcy5lckNvbnRleHQuZ2V0TG9jYXRvcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0TG9jYXRvcihsb2NhdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmVyQ29udGV4dCAmJiB0aGlzLmVyQ29udGV4dC5zZXRMb2NhdG9yKGxvY2F0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0RXZlbnRCdXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lckNvbnRleHQgJiYgdGhpcy5lckNvbnRleHQuZ2V0RXZlbnRCdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldEV2ZW50QnVzKGV2ZW50QnVzKSB7XG4gICAgICAgICAgICB0aGlzLmVyQ29udGV4dCAmJiB0aGlzLmVyQ29udGV4dC5zZXRFdmVudEJ1cyhldmVudEJ1cyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFydCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0b3IgPSB0aGlzLmdldExvY2F0b3IoKTtcblxuICAgICAgICAgICAgaWYgKGxvY2F0b3IpIHtcbiAgICAgICAgICAgICAgICBsb2NhdG9yLm9uKCdyZWRpcmVjdCcsIGV4ZWN1dGVSb3V0ZSwgdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBSb3V0ZXIoKTtcbiAgICBpbnN0YW5jZS5Sb3V0ZXIgPSBSb3V0ZXI7XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG59KTtcbiJdfQ==