angular2
Version:
Angular 2 - a web framework for modern web apps
56 lines • 9.06 kB
JavaScript
"use strict";
var core_1 = require('angular2/core');
var lang_1 = require('angular2/src/facade/lang');
var recognize_1 = require('./recognize');
var segments_1 = require('./segments');
var lifecycle_reflector_1 = require('./lifecycle_reflector');
var RouterOutletMap = (function () {
function RouterOutletMap() {
/** @internal */
this._outlets = {};
}
RouterOutletMap.prototype.registerOutlet = function (name, outlet) { this._outlets[name] = outlet; };
return RouterOutletMap;
}());
exports.RouterOutletMap = RouterOutletMap;
var Router = (function () {
function Router(_componentType, _componentResolver, _urlParser, _routerOutletMap) {
this._componentType = _componentType;
this._componentResolver = _componentResolver;
this._urlParser = _urlParser;
this._routerOutletMap = _routerOutletMap;
}
Router.prototype.navigateByUrl = function (url) {
var _this = this;
var urlSegmentTree = this._urlParser.parse(url.substring(1));
return recognize_1.recognize(this._componentResolver, this._componentType, urlSegmentTree)
.then(function (currTree) {
var prevRoot = lang_1.isPresent(_this.prevTree) ? _this.prevTree.root : null;
_loadSegments(currTree, currTree.root, _this.prevTree, prevRoot, _this, _this._routerOutletMap);
_this.prevTree = currTree;
});
};
return Router;
}());
exports.Router = Router;
function _loadSegments(currTree, curr, prevTree, prev, router, parentOutletMap) {
var outlet = parentOutletMap._outlets[curr.outlet];
var outletMap;
if (segments_1.equalSegments(curr, prev)) {
outletMap = outlet.outletMap;
}
else {
outletMap = new RouterOutletMap();
var resolved = core_1.ReflectiveInjector.resolve([core_1.provide(RouterOutletMap, { useValue: outletMap }), core_1.provide(segments_1.RouteSegment, { useValue: curr })]);
var ref = outlet.load(segments_1.routeSegmentComponentFactory(curr), resolved, outletMap);
if (lifecycle_reflector_1.hasLifecycleHook("routerOnActivate", ref.instance)) {
ref.instance.routerOnActivate(curr, prev, currTree, prevTree);
}
}
if (lang_1.isPresent(currTree.firstChild(curr))) {
var cc = currTree.firstChild(curr);
var pc = lang_1.isBlank(prevTree) ? null : prevTree.firstChild(prev);
_loadSegments(currTree, cc, prevTree, pc, router, outletMap);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGlmZmluZ19wbHVnaW5fd3JhcHBlci1vdXRwdXRfcGF0aC1CUkplcjFKOS50bXAvYW5ndWxhcjIvc3JjL2FsdF9yb3V0ZXIvcm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxxQkFBNkQsZUFBZSxDQUFDLENBQUE7QUFFN0UscUJBQXVDLDBCQUEwQixDQUFDLENBQUE7QUFFbEUsMEJBQXdCLGFBQWEsQ0FBQyxDQUFBO0FBQ3RDLHlCQUE4RSxZQUFZLENBQUMsQ0FBQTtBQUMzRixvQ0FBK0IsdUJBQXVCLENBQUMsQ0FBQTtBQUV2RDtJQUFBO1FBQ0UsZ0JBQWdCO1FBQ2hCLGFBQVEsR0FBbUMsRUFBRSxDQUFDO0lBRWhELENBQUM7SUFEQyx3Q0FBYyxHQUFkLFVBQWUsSUFBWSxFQUFFLE1BQW9CLElBQVUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzVGLHNCQUFDO0FBQUQsQ0FBQyxBQUpELElBSUM7QUFKWSx1QkFBZSxrQkFJM0IsQ0FBQTtBQUVEO0lBRUUsZ0JBQW9CLGNBQW9CLEVBQVUsa0JBQXFDLEVBQ25FLFVBQTJCLEVBQVUsZ0JBQWlDO1FBRHRFLG1CQUFjLEdBQWQsY0FBYyxDQUFNO1FBQVUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQUNuRSxlQUFVLEdBQVYsVUFBVSxDQUFpQjtRQUFVLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7SUFBRyxDQUFDO0lBRTlGLDhCQUFhLEdBQWIsVUFBYyxHQUFXO1FBQXpCLGlCQVNDO1FBUkMsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdELE1BQU0sQ0FBQyxxQkFBUyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQzthQUN6RSxJQUFJLENBQUMsVUFBQSxRQUFRO1lBQ1osSUFBSSxRQUFRLEdBQUcsZ0JBQVMsQ0FBQyxLQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ3BFLGFBQWEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFJLEVBQ3RELEtBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3JDLEtBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUNILGFBQUM7QUFBRCxDQUFDLEFBZkQsSUFlQztBQWZZLGNBQU0sU0FlbEIsQ0FBQTtBQUVELHVCQUF1QixRQUE0QixFQUFFLElBQWtCLEVBQ2hELFFBQTRCLEVBQUUsSUFBa0IsRUFBRSxNQUFjLEVBQ2hFLGVBQWdDO0lBQ3JELElBQUksTUFBTSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRW5ELElBQUksU0FBUyxDQUFDO0lBQ2QsRUFBRSxDQUFDLENBQUMsd0JBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO0lBQy9CLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNOLFNBQVMsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ2xDLElBQUksUUFBUSxHQUFHLHlCQUFrQixDQUFDLE9BQU8sQ0FDckMsQ0FBQyxjQUFPLENBQUMsZUFBZSxFQUFFLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBQyxDQUFDLEVBQUUsY0FBTyxDQUFDLHVCQUFZLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEcsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyx1Q0FBNEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDL0UsRUFBRSxDQUFDLENBQUMsc0NBQWdCLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RCxHQUFHLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7SUFDSCxDQUFDO0lBRUQsRUFBRSxDQUFDLENBQUMsZ0JBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxFQUFFLEdBQUcsY0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlELGFBQWEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtwcm92aWRlLCBSZWZsZWN0aXZlSW5qZWN0b3IsIENvbXBvbmVudFJlc29sdmVyfSBmcm9tICdhbmd1bGFyMi9jb3JlJztcbmltcG9ydCB7Um91dGVyT3V0bGV0fSBmcm9tICcuL2RpcmVjdGl2ZXMvcm91dGVyX291dGxldCc7XG5pbXBvcnQge1R5cGUsIGlzQmxhbmssIGlzUHJlc2VudH0gZnJvbSAnYW5ndWxhcjIvc3JjL2ZhY2FkZS9sYW5nJztcbmltcG9ydCB7Um91dGVyVXJsUGFyc2VyfSBmcm9tICcuL3JvdXRlcl91cmxfcGFyc2VyJztcbmltcG9ydCB7cmVjb2duaXplfSBmcm9tICcuL3JlY29nbml6ZSc7XG5pbXBvcnQge2VxdWFsU2VnbWVudHMsIHJvdXRlU2VnbWVudENvbXBvbmVudEZhY3RvcnksIFJvdXRlU2VnbWVudCwgVHJlZX0gZnJvbSAnLi9zZWdtZW50cyc7XG5pbXBvcnQge2hhc0xpZmVjeWNsZUhvb2t9IGZyb20gJy4vbGlmZWN5Y2xlX3JlZmxlY3Rvcic7XG5cbmV4cG9ydCBjbGFzcyBSb3V0ZXJPdXRsZXRNYXAge1xuICAvKiogQGludGVybmFsICovXG4gIF9vdXRsZXRzOiB7W25hbWU6IHN0cmluZ106IFJvdXRlck91dGxldH0gPSB7fTtcbiAgcmVnaXN0ZXJPdXRsZXQobmFtZTogc3RyaW5nLCBvdXRsZXQ6IFJvdXRlck91dGxldCk6IHZvaWQgeyB0aGlzLl9vdXRsZXRzW25hbWVdID0gb3V0bGV0OyB9XG59XG5cbmV4cG9ydCBjbGFzcyBSb3V0ZXIge1xuICBwcml2YXRlIHByZXZUcmVlOiBUcmVlPFJvdXRlU2VnbWVudD47XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NvbXBvbmVudFR5cGU6IFR5cGUsIHByaXZhdGUgX2NvbXBvbmVudFJlc29sdmVyOiBDb21wb25lbnRSZXNvbHZlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdXJsUGFyc2VyOiBSb3V0ZXJVcmxQYXJzZXIsIHByaXZhdGUgX3JvdXRlck91dGxldE1hcDogUm91dGVyT3V0bGV0TWFwKSB7fVxuXG4gIG5hdmlnYXRlQnlVcmwodXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgdXJsU2VnbWVudFRyZWUgPSB0aGlzLl91cmxQYXJzZXIucGFyc2UodXJsLnN1YnN0cmluZygxKSk7XG4gICAgcmV0dXJuIHJlY29nbml6ZSh0aGlzLl9jb21wb25lbnRSZXNvbHZlciwgdGhpcy5fY29tcG9uZW50VHlwZSwgdXJsU2VnbWVudFRyZWUpXG4gICAgICAgIC50aGVuKGN1cnJUcmVlID0+IHtcbiAgICAgICAgICBsZXQgcHJldlJvb3QgPSBpc1ByZXNlbnQodGhpcy5wcmV2VHJlZSkgPyB0aGlzLnByZXZUcmVlLnJvb3QgOiBudWxsO1xuICAgICAgICAgIF9sb2FkU2VnbWVudHMoY3VyclRyZWUsIGN1cnJUcmVlLnJvb3QsIHRoaXMucHJldlRyZWUsIHByZXZSb290LCB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyT3V0bGV0TWFwKTtcbiAgICAgICAgICB0aGlzLnByZXZUcmVlID0gY3VyclRyZWU7XG4gICAgICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9sb2FkU2VnbWVudHMoY3VyclRyZWU6IFRyZWU8Um91dGVTZWdtZW50PiwgY3VycjogUm91dGVTZWdtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICBwcmV2VHJlZTogVHJlZTxSb3V0ZVNlZ21lbnQ+LCBwcmV2OiBSb3V0ZVNlZ21lbnQsIHJvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRPdXRsZXRNYXA6IFJvdXRlck91dGxldE1hcCk6IHZvaWQge1xuICBsZXQgb3V0bGV0ID0gcGFyZW50T3V0bGV0TWFwLl9vdXRsZXRzW2N1cnIub3V0bGV0XTtcblxuICBsZXQgb3V0bGV0TWFwO1xuICBpZiAoZXF1YWxTZWdtZW50cyhjdXJyLCBwcmV2KSkge1xuICAgIG91dGxldE1hcCA9IG91dGxldC5vdXRsZXRNYXA7XG4gIH0gZWxzZSB7XG4gICAgb3V0bGV0TWFwID0gbmV3IFJvdXRlck91dGxldE1hcCgpO1xuICAgIGxldCByZXNvbHZlZCA9IFJlZmxlY3RpdmVJbmplY3Rvci5yZXNvbHZlKFxuICAgICAgICBbcHJvdmlkZShSb3V0ZXJPdXRsZXRNYXAsIHt1c2VWYWx1ZTogb3V0bGV0TWFwfSksIHByb3ZpZGUoUm91dGVTZWdtZW50LCB7dXNlVmFsdWU6IGN1cnJ9KV0pO1xuICAgIGxldCByZWYgPSBvdXRsZXQubG9hZChyb3V0ZVNlZ21lbnRDb21wb25lbnRGYWN0b3J5KGN1cnIpLCByZXNvbHZlZCwgb3V0bGV0TWFwKTtcbiAgICBpZiAoaGFzTGlmZWN5Y2xlSG9vayhcInJvdXRlck9uQWN0aXZhdGVcIiwgcmVmLmluc3RhbmNlKSkge1xuICAgICAgcmVmLmluc3RhbmNlLnJvdXRlck9uQWN0aXZhdGUoY3VyciwgcHJldiwgY3VyclRyZWUsIHByZXZUcmVlKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNQcmVzZW50KGN1cnJUcmVlLmZpcnN0Q2hpbGQoY3VycikpKSB7XG4gICAgbGV0IGNjID0gY3VyclRyZWUuZmlyc3RDaGlsZChjdXJyKTtcbiAgICBsZXQgcGMgPSBpc0JsYW5rKHByZXZUcmVlKSA/IG51bGwgOiBwcmV2VHJlZS5maXJzdENoaWxkKHByZXYpO1xuICAgIF9sb2FkU2VnbWVudHMoY3VyclRyZWUsIGNjLCBwcmV2VHJlZSwgcGMsIHJvdXRlciwgb3V0bGV0TWFwKTtcbiAgfVxufSJdfQ==
;