rails-angularjs2 2.0.0.pre.alpha.30 → 2.0.0.pre.alpha.31

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,70 @@
1
1
  "format register";
2
+ System.register("angular2/src/router/lifecycle_annotations_impl", ["angular2/src/facade/lang"], function($__export) {
3
+ "use strict";
4
+ var __moduleName = "angular2/src/router/lifecycle_annotations_impl";
5
+ var __decorate,
6
+ __metadata,
7
+ CONST,
8
+ CONST_EXPR,
9
+ RouteLifecycleHook,
10
+ CanActivate,
11
+ canReuse,
12
+ canDeactivate,
13
+ onActivate,
14
+ onReuse,
15
+ onDeactivate;
16
+ return {
17
+ setters: [function($__m) {
18
+ CONST = $__m.CONST;
19
+ CONST_EXPR = $__m.CONST_EXPR;
20
+ }],
21
+ execute: function() {
22
+ __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {
23
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
24
+ return Reflect.decorate(decorators, target, key, desc);
25
+ switch (arguments.length) {
26
+ case 2:
27
+ return decorators.reduceRight(function(o, d) {
28
+ return (d && d(o)) || o;
29
+ }, target);
30
+ case 3:
31
+ return decorators.reduceRight(function(o, d) {
32
+ return (d && d(target, key)), void 0;
33
+ }, void 0);
34
+ case 4:
35
+ return decorators.reduceRight(function(o, d) {
36
+ return (d && d(target, key, o)) || o;
37
+ }, desc);
38
+ }
39
+ };
40
+ __metadata = (this && this.__metadata) || function(k, v) {
41
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
42
+ return Reflect.metadata(k, v);
43
+ };
44
+ RouteLifecycleHook = (($traceurRuntime.createClass)(function(name) {
45
+ this.name = name;
46
+ }, {}, {}));
47
+ $__export("RouteLifecycleHook", RouteLifecycleHook);
48
+ $__export("RouteLifecycleHook", RouteLifecycleHook = __decorate([CONST(), __metadata('design:paramtypes', [String])], RouteLifecycleHook));
49
+ CanActivate = (($traceurRuntime.createClass)(function(fn) {
50
+ this.fn = fn;
51
+ }, {}, {}));
52
+ $__export("CanActivate", CanActivate);
53
+ $__export("CanActivate", CanActivate = __decorate([CONST(), __metadata('design:paramtypes', [Function])], CanActivate));
54
+ canReuse = CONST_EXPR(new RouteLifecycleHook("canReuse"));
55
+ $__export("canReuse", canReuse);
56
+ canDeactivate = CONST_EXPR(new RouteLifecycleHook("canDeactivate"));
57
+ $__export("canDeactivate", canDeactivate);
58
+ onActivate = CONST_EXPR(new RouteLifecycleHook("onActivate"));
59
+ $__export("onActivate", onActivate);
60
+ onReuse = CONST_EXPR(new RouteLifecycleHook("onReuse"));
61
+ $__export("onReuse", onReuse);
62
+ onDeactivate = CONST_EXPR(new RouteLifecycleHook("onDeactivate"));
63
+ $__export("onDeactivate", onDeactivate);
64
+ }
65
+ };
66
+ });
67
+
2
68
  System.register("angular2/src/router/instruction", ["angular2/src/facade/collection", "angular2/src/facade/lang"], function($__export) {
3
69
  "use strict";
4
70
  var __moduleName = "angular2/src/router/instruction";
@@ -8,9 +74,6 @@ System.register("angular2/src/router/instruction", ["angular2/src/facade/collect
8
74
  normalizeBlank,
9
75
  RouteParams,
10
76
  Instruction;
11
- function shouldReuseComponent(instr1, instr2) {
12
- return instr1.component == instr2.component && StringMapWrapper.equals(instr1.params(), instr2.params());
13
- }
14
77
  return {
15
78
  setters: [function($__m) {
16
79
  StringMapWrapper = $__m.StringMapWrapper;
@@ -48,28 +111,42 @@ System.register("angular2/src/router/instruction", ["angular2/src/facade/collect
48
111
  }
49
112
  }
50
113
  }
51
- return ($traceurRuntime.createClass)(Instruction, {
52
- params: function() {
114
+ return ($traceurRuntime.createClass)(Instruction, {params: function() {
53
115
  if (isBlank(this._params)) {
54
116
  this._params = this._recognizer.parseParams(this.capturedUrl);
55
117
  }
56
118
  return this._params;
57
- },
58
- hasChild: function() {
59
- return isPresent(this.child);
60
- },
61
- reuseComponentsFrom: function(oldInstruction) {
62
- var nextInstruction = this;
63
- while (nextInstruction.reuse = shouldReuseComponent(nextInstruction, oldInstruction) && isPresent(oldInstruction = oldInstruction.child) && isPresent(nextInstruction = nextInstruction.child))
64
- ;
65
- }
66
- }, {});
119
+ }}, {});
67
120
  }());
68
121
  $__export("Instruction", Instruction);
69
122
  }
70
123
  };
71
124
  });
72
125
 
126
+ System.register("angular2/src/router/lifecycle_annotations", ["angular2/src/util/decorators", "angular2/src/router/lifecycle_annotations_impl"], function($__export) {
127
+ "use strict";
128
+ var __moduleName = "angular2/src/router/lifecycle_annotations";
129
+ var makeDecorator,
130
+ CanActivateAnnotation,
131
+ CanActivate;
132
+ return {
133
+ setters: [function($__m) {
134
+ makeDecorator = $__m.makeDecorator;
135
+ }, function($__m) {
136
+ CanActivateAnnotation = $__m.CanActivate;
137
+ $__export("canReuse", $__m.canReuse);
138
+ $__export("canDeactivate", $__m.canDeactivate);
139
+ $__export("onActivate", $__m.onActivate);
140
+ $__export("onReuse", $__m.onReuse);
141
+ $__export("onDeactivate", $__m.onDeactivate);
142
+ }],
143
+ execute: function() {
144
+ CanActivate = makeDecorator(CanActivateAnnotation);
145
+ $__export("CanActivate", CanActivate);
146
+ }
147
+ };
148
+ });
149
+
73
150
  System.register("angular2/src/router/location_strategy", ["angular2/src/facade/lang"], function($__export) {
74
151
  "use strict";
75
152
  var __moduleName = "angular2/src/router/location_strategy";
@@ -289,7 +366,8 @@ System.register("angular2/src/router/hash_location_strategy", ["angular2/src/dom
289
366
  return '';
290
367
  },
291
368
  path: function() {
292
- return this._location.hash;
369
+ var path = this._location.hash;
370
+ return path.length > 0 ? path.substring(1) : path;
293
371
  },
294
372
  pushState: function(state, title, url) {
295
373
  this._history.pushState(state, title, '#' + url);
@@ -609,6 +687,7 @@ System.register("angular2/src/router/path_recognizer", ["angular2/src/facade/lan
609
687
  IMPLEMENTS,
610
688
  escapeRegex,
611
689
  Segment,
690
+ TouchMap,
612
691
  ContinuationSegment,
613
692
  StaticSegment,
614
693
  DynamicSegment,
@@ -623,6 +702,17 @@ System.register("angular2/src/router/path_recognizer", ["angular2/src/facade/lan
623
702
  return obj.toString();
624
703
  }
625
704
  }
705
+ function parseAndAssignMatrixParams(keyValueMap, matrixString) {
706
+ if (matrixString[0] == ';') {
707
+ matrixString = matrixString.substring(1);
708
+ }
709
+ matrixString.split(';').forEach((function(entry) {
710
+ var tuple = entry.split('=');
711
+ var key = tuple[0];
712
+ var value = tuple.length > 1 ? tuple[1] : true;
713
+ keyValueMap[key] = value;
714
+ }));
715
+ }
626
716
  function parsePathString(route) {
627
717
  if (StringWrapper.startsWith(route, "/")) {
628
718
  route = StringWrapper.substring(route, 1);
@@ -699,16 +789,44 @@ System.register("angular2/src/router/path_recognizer", ["angular2/src/facade/lan
699
789
  };
700
790
  Segment = (function() {
701
791
  function Segment() {}
702
- return ($traceurRuntime.createClass)(Segment, {}, {});
792
+ return ($traceurRuntime.createClass)(Segment, {generate: function(params) {
793
+ return '';
794
+ }}, {});
703
795
  }());
704
796
  $__export("Segment", Segment);
797
+ TouchMap = (function() {
798
+ function TouchMap(map) {
799
+ var $__0 = this;
800
+ this.map = StringMapWrapper.create();
801
+ this.keys = StringMapWrapper.create();
802
+ if (isPresent(map)) {
803
+ StringMapWrapper.forEach(map, (function(value, key) {
804
+ $__0.map[key] = isPresent(value) ? value.toString() : null;
805
+ $__0.keys[key] = true;
806
+ }));
807
+ }
808
+ }
809
+ return ($traceurRuntime.createClass)(TouchMap, {
810
+ get: function(key) {
811
+ StringMapWrapper.delete(this.keys, key);
812
+ return this.map[key];
813
+ },
814
+ getUnused: function() {
815
+ var $__0 = this;
816
+ var unused = StringMapWrapper.create();
817
+ var keys = StringMapWrapper.keys(this.keys);
818
+ ListWrapper.forEach(keys, (function(key) {
819
+ unused[key] = StringMapWrapper.get($__0.map, key);
820
+ }));
821
+ return unused;
822
+ }
823
+ }, {});
824
+ }());
705
825
  ContinuationSegment = (function($__super) {
706
826
  function ContinuationSegment() {
707
827
  $traceurRuntime.superConstructor(ContinuationSegment).apply(this, arguments);
708
828
  }
709
- return ($traceurRuntime.createClass)(ContinuationSegment, {generate: function(params) {
710
- return '';
711
- }}, {}, $__super);
829
+ return ($traceurRuntime.createClass)(ContinuationSegment, {}, {}, $__super);
712
830
  }(Segment));
713
831
  StaticSegment = (function($__super) {
714
832
  function StaticSegment(string) {
@@ -716,6 +834,7 @@ System.register("angular2/src/router/path_recognizer", ["angular2/src/facade/lan
716
834
  this.string = string;
717
835
  this.name = '';
718
836
  this.regex = escapeRegex(string);
837
+ this.regex += '(;[^\/]+)?';
719
838
  }
720
839
  return ($traceurRuntime.createClass)(StaticSegment, {generate: function(params) {
721
840
  return this.string;
@@ -725,10 +844,10 @@ System.register("angular2/src/router/path_recognizer", ["angular2/src/facade/lan
725
844
  this.name = name;
726
845
  this.regex = "([^/]+)";
727
846
  }, {generate: function(params) {
728
- if (!StringMapWrapper.contains(params, this.name)) {
847
+ if (!StringMapWrapper.contains(params.map, this.name)) {
729
848
  throw new BaseException(("Route generator for '" + this.name + "' was not included in parameters passed."));
730
849
  }
731
- return normalizeString(StringMapWrapper.get(params, this.name));
850
+ return normalizeString(params.get(this.name));
732
851
  }}, {}));
733
852
  DynamicSegment = __decorate([IMPLEMENTS(Segment), __metadata('design:paramtypes', [String])], DynamicSegment);
734
853
  StarSegment = (function() {
@@ -737,11 +856,11 @@ System.register("angular2/src/router/path_recognizer", ["angular2/src/facade/lan
737
856
  this.regex = "(.+)";
738
857
  }
739
858
  return ($traceurRuntime.createClass)(StarSegment, {generate: function(params) {
740
- return normalizeString(StringMapWrapper.get(params, this.name));
859
+ return normalizeString(params.get(this.name));
741
860
  }}, {});
742
861
  }());
743
- paramMatcher = RegExpWrapper.create("^:([^\/]+)$");
744
- wildcardMatcher = RegExpWrapper.create("^\\*([^\/]+)$");
862
+ paramMatcher = /^:([^\/]+)$/g;
863
+ wildcardMatcher = /^\*([^\/]+)$/g;
745
864
  PathRecognizer = (function() {
746
865
  function PathRecognizer(path, handler) {
747
866
  var $__0 = this;
@@ -768,9 +887,20 @@ System.register("angular2/src/router/path_recognizer", ["angular2/src/facade/lan
768
887
  }
769
888
  return ($traceurRuntime.createClass)(PathRecognizer, {
770
889
  parseParams: function(url) {
890
+ var segmentsLimit = this.segments.length - 1;
891
+ var containsStarSegment = segmentsLimit >= 0 && this.segments[segmentsLimit] instanceof StarSegment;
892
+ var matrixString;
893
+ if (!containsStarSegment) {
894
+ var matches = RegExpWrapper.firstMatch(RegExpWrapper.create('^(.*\/[^\/]+?)(;[^\/]+)?\/?$'), url);
895
+ if (isPresent(matches)) {
896
+ url = matches[1];
897
+ matrixString = matches[2];
898
+ }
899
+ url = StringWrapper.replaceAll(url, /(;[^\/]+)(?=(\/|\Z))/g, '');
900
+ }
771
901
  var params = StringMapWrapper.create();
772
902
  var urlPart = url;
773
- for (var i = 0; i < this.segments.length; i++) {
903
+ for (var i = 0; i <= segmentsLimit; i++) {
774
904
  var segment = this.segments[i];
775
905
  if (segment instanceof ContinuationSegment) {
776
906
  continue;
@@ -778,15 +908,37 @@ System.register("angular2/src/router/path_recognizer", ["angular2/src/facade/lan
778
908
  var match = RegExpWrapper.firstMatch(RegExpWrapper.create('/' + segment.regex), urlPart);
779
909
  urlPart = StringWrapper.substring(urlPart, match[0].length);
780
910
  if (segment.name.length > 0) {
781
- StringMapWrapper.set(params, segment.name, match[1]);
911
+ params[segment.name] = match[1];
782
912
  }
783
913
  }
914
+ if (isPresent(matrixString) && matrixString.length > 0 && matrixString[0] == ';') {
915
+ parseAndAssignMatrixParams(params, matrixString);
916
+ }
784
917
  return params;
785
918
  },
786
919
  generate: function(params) {
787
- return ListWrapper.join(ListWrapper.map(this.segments, (function(segment) {
788
- return segment.generate(params);
789
- })), '/');
920
+ var paramTokens = new TouchMap(params);
921
+ var applyLeadingSlash = false;
922
+ var url = '';
923
+ for (var i = 0; i < this.segments.length; i++) {
924
+ var segment = this.segments[i];
925
+ var s = segment.generate(paramTokens);
926
+ applyLeadingSlash = applyLeadingSlash || (segment instanceof ContinuationSegment);
927
+ if (s.length > 0) {
928
+ url += (i > 0 ? '/' : '') + s;
929
+ }
930
+ }
931
+ var unusedParams = paramTokens.getUnused();
932
+ StringMapWrapper.forEach(unusedParams, (function(value, key) {
933
+ url += ';' + key;
934
+ if (isPresent(value)) {
935
+ url += '=' + value;
936
+ }
937
+ }));
938
+ if (applyLeadingSlash) {
939
+ url += '/';
940
+ }
941
+ return url;
790
942
  },
791
943
  resolveComponentType: function() {
792
944
  return this.handler.resolveComponentType();
@@ -798,209 +950,38 @@ System.register("angular2/src/router/path_recognizer", ["angular2/src/facade/lan
798
950
  };
799
951
  });
800
952
 
801
- System.register("angular2/src/router/router", ["angular2/src/facade/async", "angular2/src/facade/collection", "angular2/src/facade/lang"], function($__export) {
953
+ System.register("angular2/src/router/route_lifecycle_reflector", ["angular2/src/facade/lang", "angular2/src/router/lifecycle_annotations_impl", "angular2/src/reflection/reflection"], function($__export) {
802
954
  "use strict";
803
- var __moduleName = "angular2/src/router/router";
804
- var PromiseWrapper,
805
- EventEmitter,
806
- ObservableWrapper,
807
- ListWrapper,
808
- isBlank,
809
- isString,
810
- StringWrapper,
811
- isPresent,
812
- isArray,
813
- BaseException,
814
- _resolveToTrue,
815
- _resolveToFalse,
816
- Router,
817
- RootRouter,
818
- ChildRouter,
819
- SLASH;
820
- function splitAndFlattenLinkParams(linkParams) {
821
- return ListWrapper.reduce(linkParams, (function(accumulation, item) {
822
- if (isString(item)) {
823
- return ListWrapper.concat(accumulation, StringWrapper.split(item, SLASH));
955
+ var __moduleName = "angular2/src/router/route_lifecycle_reflector";
956
+ var Type,
957
+ CanActivate,
958
+ reflector;
959
+ function hasLifecycleHook(e, type) {
960
+ if (!(type instanceof Type))
961
+ return false;
962
+ return e.name in type.prototype;
963
+ }
964
+ function getCanActivateHook(type) {
965
+ var annotations = reflector.annotations(type);
966
+ for (var i = 0; i < annotations.length; i += 1) {
967
+ var annotation = annotations[i];
968
+ if (annotation instanceof CanActivate) {
969
+ return annotation.fn;
824
970
  }
825
- accumulation.push(item);
826
- return accumulation;
827
- }), []);
971
+ }
972
+ return null;
828
973
  }
974
+ $__export("hasLifecycleHook", hasLifecycleHook);
975
+ $__export("getCanActivateHook", getCanActivateHook);
829
976
  return {
830
977
  setters: [function($__m) {
831
- PromiseWrapper = $__m.PromiseWrapper;
832
- EventEmitter = $__m.EventEmitter;
833
- ObservableWrapper = $__m.ObservableWrapper;
978
+ Type = $__m.Type;
834
979
  }, function($__m) {
835
- ListWrapper = $__m.ListWrapper;
980
+ CanActivate = $__m.CanActivate;
836
981
  }, function($__m) {
837
- isBlank = $__m.isBlank;
838
- isString = $__m.isString;
839
- StringWrapper = $__m.StringWrapper;
840
- isPresent = $__m.isPresent;
841
- isArray = $__m.isArray;
842
- BaseException = $__m.BaseException;
982
+ reflector = $__m.reflector;
843
983
  }],
844
984
  execute: function() {
845
- _resolveToTrue = PromiseWrapper.resolve(true);
846
- _resolveToFalse = PromiseWrapper.resolve(false);
847
- Router = (function() {
848
- function Router(registry, _pipeline, parent, hostComponent) {
849
- this.registry = registry;
850
- this._pipeline = _pipeline;
851
- this.parent = parent;
852
- this.hostComponent = hostComponent;
853
- this.navigating = false;
854
- this.previousUrl = null;
855
- this._currentInstruction = null;
856
- this._currentNavigation = _resolveToTrue;
857
- this._outlet = null;
858
- this._subject = new EventEmitter();
859
- }
860
- return ($traceurRuntime.createClass)(Router, {
861
- childRouter: function(hostComponent) {
862
- return new ChildRouter(this, hostComponent);
863
- },
864
- registerOutlet: function(outlet) {
865
- this._outlet = outlet;
866
- if (isPresent(this._currentInstruction)) {
867
- return outlet.activate(this._currentInstruction);
868
- }
869
- return _resolveToTrue;
870
- },
871
- config: function(config) {
872
- var $__0 = this;
873
- if (isArray(config)) {
874
- config.forEach((function(configObject) {
875
- $__0.registry.config($__0.hostComponent, configObject);
876
- }));
877
- } else {
878
- this.registry.config(this.hostComponent, config);
879
- }
880
- return this.renavigate();
881
- },
882
- navigate: function(url) {
883
- var $__0 = this;
884
- if (this.navigating) {
885
- return this._currentNavigation;
886
- }
887
- this.lastNavigationAttempt = url;
888
- return this._currentNavigation = this.recognize(url).then((function(matchedInstruction) {
889
- if (isBlank(matchedInstruction)) {
890
- return _resolveToFalse;
891
- }
892
- if (isPresent($__0._currentInstruction)) {
893
- matchedInstruction.reuseComponentsFrom($__0._currentInstruction);
894
- }
895
- $__0._startNavigating();
896
- var result = $__0.commit(matchedInstruction).then((function(_) {
897
- $__0._finishNavigating();
898
- ObservableWrapper.callNext($__0._subject, matchedInstruction.accumulatedUrl);
899
- }));
900
- return PromiseWrapper.catchError(result, (function(err) {
901
- $__0._finishNavigating();
902
- throw err;
903
- }));
904
- }));
905
- },
906
- _startNavigating: function() {
907
- this.navigating = true;
908
- },
909
- _finishNavigating: function() {
910
- this.navigating = false;
911
- },
912
- subscribe: function(onNext) {
913
- ObservableWrapper.subscribe(this._subject, onNext);
914
- },
915
- commit: function(instruction) {
916
- this._currentInstruction = instruction;
917
- if (isPresent(this._outlet)) {
918
- return this._outlet.activate(instruction);
919
- }
920
- return _resolveToTrue;
921
- },
922
- deactivate: function() {
923
- if (isPresent(this._outlet)) {
924
- return this._outlet.deactivate();
925
- }
926
- return _resolveToTrue;
927
- },
928
- recognize: function(url) {
929
- return this.registry.recognize(url, this.hostComponent);
930
- },
931
- renavigate: function() {
932
- var destination = isBlank(this.previousUrl) ? this.lastNavigationAttempt : this.previousUrl;
933
- if (isBlank(destination)) {
934
- return this._currentNavigation;
935
- }
936
- return this.navigate(destination);
937
- },
938
- generate: function(linkParams) {
939
- var normalizedLinkParams = splitAndFlattenLinkParams(linkParams);
940
- var first = ListWrapper.first(normalizedLinkParams);
941
- var rest = ListWrapper.slice(normalizedLinkParams, 1);
942
- var router = this;
943
- if (first == '') {
944
- while (isPresent(router.parent)) {
945
- router = router.parent;
946
- }
947
- } else if (first == '..') {
948
- router = router.parent;
949
- while (ListWrapper.first(rest) == '..') {
950
- rest = ListWrapper.slice(rest, 1);
951
- router = router.parent;
952
- if (isBlank(router)) {
953
- throw new BaseException(("Link \"" + ListWrapper.toJSON(linkParams) + "\" has too many \"../\" segments."));
954
- }
955
- }
956
- } else if (first != '.') {
957
- throw new BaseException(("Link \"" + ListWrapper.toJSON(linkParams) + "\" must start with \"/\", \"./\", or \"../\""));
958
- }
959
- if (rest[rest.length - 1] == '') {
960
- ListWrapper.removeLast(rest);
961
- }
962
- if (rest.length < 1) {
963
- var msg = ("Link \"" + ListWrapper.toJSON(linkParams) + "\" must include a route name.");
964
- throw new BaseException(msg);
965
- }
966
- var url = '';
967
- if (isPresent(router.parent) && isPresent(router.parent._currentInstruction)) {
968
- url = router.parent._currentInstruction.capturedUrl;
969
- }
970
- return url + '/' + this.registry.generate(rest, router.hostComponent);
971
- }
972
- }, {});
973
- }());
974
- $__export("Router", Router);
975
- RootRouter = (function($__super) {
976
- function RootRouter(registry, pipeline, location, hostComponent) {
977
- var $__0;
978
- $traceurRuntime.superConstructor(RootRouter).call(this, registry, pipeline, null, hostComponent);
979
- this._location = location;
980
- this._location.subscribe(($__0 = this, function(change) {
981
- return $__0.navigate(change['url']);
982
- }));
983
- this.registry.configFromComponent(hostComponent);
984
- this.navigate(location.path());
985
- }
986
- return ($traceurRuntime.createClass)(RootRouter, {commit: function(instruction) {
987
- var $__0 = this;
988
- return $traceurRuntime.superGet(this, RootRouter.prototype, "commit").call(this, instruction).then((function(_) {
989
- $__0._location.go(instruction.accumulatedUrl);
990
- }));
991
- }}, {}, $__super);
992
- }(Router));
993
- $__export("RootRouter", RootRouter);
994
- ChildRouter = (function($__super) {
995
- function ChildRouter(parent, hostComponent) {
996
- $traceurRuntime.superConstructor(ChildRouter).call(this, parent.registry, parent._pipeline, parent, hostComponent);
997
- this.parent = parent;
998
- }
999
- return ($traceurRuntime.createClass)(ChildRouter, {navigate: function(url) {
1000
- return this.parent.navigate(url);
1001
- }}, {}, $__super);
1002
- }(Router));
1003
- SLASH = new RegExp('/');
1004
985
  }
1005
986
  };
1006
987
  });
@@ -1213,6 +1194,284 @@ System.register("angular2/src/router/route_recognizer", ["angular2/src/facade/la
1213
1194
  };
1214
1195
  });
1215
1196
 
1197
+ System.register("angular2/src/router/router", ["angular2/src/facade/async", "angular2/src/facade/collection", "angular2/src/facade/lang", "angular2/src/router/route_lifecycle_reflector"], function($__export) {
1198
+ "use strict";
1199
+ var __moduleName = "angular2/src/router/router";
1200
+ var PromiseWrapper,
1201
+ EventEmitter,
1202
+ ObservableWrapper,
1203
+ ListWrapper,
1204
+ isBlank,
1205
+ isString,
1206
+ StringWrapper,
1207
+ isPresent,
1208
+ isArray,
1209
+ BaseException,
1210
+ getCanActivateHook,
1211
+ _resolveToTrue,
1212
+ _resolveToFalse,
1213
+ Router,
1214
+ RootRouter,
1215
+ ChildRouter,
1216
+ SLASH;
1217
+ function splitAndFlattenLinkParams(linkParams) {
1218
+ return ListWrapper.reduce(linkParams, (function(accumulation, item) {
1219
+ if (isString(item)) {
1220
+ return ListWrapper.concat(accumulation, StringWrapper.split(item, SLASH));
1221
+ }
1222
+ accumulation.push(item);
1223
+ return accumulation;
1224
+ }), []);
1225
+ }
1226
+ function canActivateOne(nextInstruction, currentInstruction) {
1227
+ var next = _resolveToTrue;
1228
+ if (isPresent(nextInstruction.child)) {
1229
+ next = canActivateOne(nextInstruction.child, isPresent(currentInstruction) ? currentInstruction.child : null);
1230
+ }
1231
+ return next.then((function(res) {
1232
+ if (res == false) {
1233
+ return false;
1234
+ }
1235
+ if (nextInstruction.reuse) {
1236
+ return true;
1237
+ }
1238
+ var hook = getCanActivateHook(nextInstruction.component);
1239
+ if (isPresent(hook)) {
1240
+ return hook(nextInstruction, currentInstruction);
1241
+ }
1242
+ return true;
1243
+ }));
1244
+ }
1245
+ return {
1246
+ setters: [function($__m) {
1247
+ PromiseWrapper = $__m.PromiseWrapper;
1248
+ EventEmitter = $__m.EventEmitter;
1249
+ ObservableWrapper = $__m.ObservableWrapper;
1250
+ }, function($__m) {
1251
+ ListWrapper = $__m.ListWrapper;
1252
+ }, function($__m) {
1253
+ isBlank = $__m.isBlank;
1254
+ isString = $__m.isString;
1255
+ StringWrapper = $__m.StringWrapper;
1256
+ isPresent = $__m.isPresent;
1257
+ isArray = $__m.isArray;
1258
+ BaseException = $__m.BaseException;
1259
+ }, function($__m) {
1260
+ getCanActivateHook = $__m.getCanActivateHook;
1261
+ }],
1262
+ execute: function() {
1263
+ _resolveToTrue = PromiseWrapper.resolve(true);
1264
+ _resolveToFalse = PromiseWrapper.resolve(false);
1265
+ Router = (function() {
1266
+ function Router(registry, _pipeline, parent, hostComponent) {
1267
+ this.registry = registry;
1268
+ this._pipeline = _pipeline;
1269
+ this.parent = parent;
1270
+ this.hostComponent = hostComponent;
1271
+ this.navigating = false;
1272
+ this._currentInstruction = null;
1273
+ this._currentNavigation = _resolveToTrue;
1274
+ this._outlet = null;
1275
+ this._subject = new EventEmitter();
1276
+ }
1277
+ return ($traceurRuntime.createClass)(Router, {
1278
+ childRouter: function(hostComponent) {
1279
+ return new ChildRouter(this, hostComponent);
1280
+ },
1281
+ registerOutlet: function(outlet) {
1282
+ this._outlet = outlet;
1283
+ if (isPresent(this._currentInstruction)) {
1284
+ return outlet.commit(this._currentInstruction);
1285
+ }
1286
+ return _resolveToTrue;
1287
+ },
1288
+ config: function(config) {
1289
+ var $__0 = this;
1290
+ if (isArray(config)) {
1291
+ config.forEach((function(configObject) {
1292
+ $__0.registry.config($__0.hostComponent, configObject);
1293
+ }));
1294
+ } else {
1295
+ this.registry.config(this.hostComponent, config);
1296
+ }
1297
+ return this.renavigate();
1298
+ },
1299
+ navigate: function(url) {
1300
+ var $__0 = this;
1301
+ return this._currentNavigation = this._currentNavigation.then((function(_) {
1302
+ $__0.lastNavigationAttempt = url;
1303
+ $__0._startNavigating();
1304
+ return $__0._afterPromiseFinishNavigating($__0.recognize(url).then((function(matchedInstruction) {
1305
+ if (isBlank(matchedInstruction)) {
1306
+ return false;
1307
+ }
1308
+ return $__0._reuse(matchedInstruction).then((function(_) {
1309
+ return $__0._canActivate(matchedInstruction);
1310
+ })).then((function(result) {
1311
+ if (!result) {
1312
+ return false;
1313
+ }
1314
+ return $__0._canDeactivate(matchedInstruction).then((function(result) {
1315
+ if (result) {
1316
+ return $__0.commit(matchedInstruction).then((function(_) {
1317
+ $__0._emitNavigationFinish(matchedInstruction.accumulatedUrl);
1318
+ return true;
1319
+ }));
1320
+ }
1321
+ }));
1322
+ }));
1323
+ })));
1324
+ }));
1325
+ },
1326
+ _emitNavigationFinish: function(url) {
1327
+ ObservableWrapper.callNext(this._subject, url);
1328
+ },
1329
+ _afterPromiseFinishNavigating: function(promise) {
1330
+ var $__0 = this;
1331
+ return PromiseWrapper.catchError(promise.then((function(_) {
1332
+ return $__0._finishNavigating();
1333
+ })), (function(err) {
1334
+ $__0._finishNavigating();
1335
+ throw err;
1336
+ }));
1337
+ },
1338
+ _reuse: function(instruction) {
1339
+ var $__0 = this;
1340
+ if (isBlank(this._outlet)) {
1341
+ return _resolveToFalse;
1342
+ }
1343
+ return this._outlet.canReuse(instruction).then((function(result) {
1344
+ instruction.reuse = result;
1345
+ if (isPresent($__0._outlet.childRouter) && isPresent(instruction.child)) {
1346
+ return $__0._outlet.childRouter._reuse(instruction.child);
1347
+ }
1348
+ }));
1349
+ },
1350
+ _canActivate: function(instruction) {
1351
+ return canActivateOne(instruction, this._currentInstruction);
1352
+ },
1353
+ _canDeactivate: function(instruction) {
1354
+ var $__0 = this;
1355
+ if (isBlank(this._outlet)) {
1356
+ return _resolveToTrue;
1357
+ }
1358
+ var next;
1359
+ if (isPresent(instruction) && instruction.reuse) {
1360
+ next = _resolveToTrue;
1361
+ } else {
1362
+ next = this._outlet.canDeactivate(instruction);
1363
+ }
1364
+ return next.then((function(result) {
1365
+ if (result == false) {
1366
+ return false;
1367
+ }
1368
+ if (isPresent($__0._outlet.childRouter)) {
1369
+ return $__0._outlet.childRouter._canDeactivate(isPresent(instruction) ? instruction.child : null);
1370
+ }
1371
+ return true;
1372
+ }));
1373
+ },
1374
+ commit: function(instruction) {
1375
+ this._currentInstruction = instruction;
1376
+ if (isPresent(this._outlet)) {
1377
+ return this._outlet.commit(instruction);
1378
+ }
1379
+ return _resolveToTrue;
1380
+ },
1381
+ _startNavigating: function() {
1382
+ this.navigating = true;
1383
+ },
1384
+ _finishNavigating: function() {
1385
+ this.navigating = false;
1386
+ },
1387
+ subscribe: function(onNext) {
1388
+ ObservableWrapper.subscribe(this._subject, onNext);
1389
+ },
1390
+ deactivate: function(instruction) {
1391
+ if (isPresent(this._outlet)) {
1392
+ return this._outlet.deactivate(instruction);
1393
+ }
1394
+ return _resolveToTrue;
1395
+ },
1396
+ recognize: function(url) {
1397
+ return this.registry.recognize(url, this.hostComponent);
1398
+ },
1399
+ renavigate: function() {
1400
+ if (isBlank(this.lastNavigationAttempt)) {
1401
+ return this._currentNavigation;
1402
+ }
1403
+ return this.navigate(this.lastNavigationAttempt);
1404
+ },
1405
+ generate: function(linkParams) {
1406
+ var normalizedLinkParams = splitAndFlattenLinkParams(linkParams);
1407
+ var first = ListWrapper.first(normalizedLinkParams);
1408
+ var rest = ListWrapper.slice(normalizedLinkParams, 1);
1409
+ var router = this;
1410
+ if (first == '') {
1411
+ while (isPresent(router.parent)) {
1412
+ router = router.parent;
1413
+ }
1414
+ } else if (first == '..') {
1415
+ router = router.parent;
1416
+ while (ListWrapper.first(rest) == '..') {
1417
+ rest = ListWrapper.slice(rest, 1);
1418
+ router = router.parent;
1419
+ if (isBlank(router)) {
1420
+ throw new BaseException(("Link \"" + ListWrapper.toJSON(linkParams) + "\" has too many \"../\" segments."));
1421
+ }
1422
+ }
1423
+ } else if (first != '.') {
1424
+ throw new BaseException(("Link \"" + ListWrapper.toJSON(linkParams) + "\" must start with \"/\", \"./\", or \"../\""));
1425
+ }
1426
+ if (rest[rest.length - 1] == '') {
1427
+ ListWrapper.removeLast(rest);
1428
+ }
1429
+ if (rest.length < 1) {
1430
+ var msg = ("Link \"" + ListWrapper.toJSON(linkParams) + "\" must include a route name.");
1431
+ throw new BaseException(msg);
1432
+ }
1433
+ var url = '';
1434
+ if (isPresent(router.parent) && isPresent(router.parent._currentInstruction)) {
1435
+ url = router.parent._currentInstruction.capturedUrl;
1436
+ }
1437
+ return url + '/' + this.registry.generate(rest, router.hostComponent);
1438
+ }
1439
+ }, {});
1440
+ }());
1441
+ $__export("Router", Router);
1442
+ RootRouter = (function($__super) {
1443
+ function RootRouter(registry, pipeline, location, hostComponent) {
1444
+ var $__0;
1445
+ $traceurRuntime.superConstructor(RootRouter).call(this, registry, pipeline, null, hostComponent);
1446
+ this._location = location;
1447
+ this._location.subscribe(($__0 = this, function(change) {
1448
+ return $__0.navigate(change['url']);
1449
+ }));
1450
+ this.registry.configFromComponent(hostComponent);
1451
+ this.navigate(location.path());
1452
+ }
1453
+ return ($traceurRuntime.createClass)(RootRouter, {commit: function(instruction) {
1454
+ var $__0 = this;
1455
+ return $traceurRuntime.superGet(this, RootRouter.prototype, "commit").call(this, instruction).then((function(_) {
1456
+ $__0._location.go(instruction.accumulatedUrl);
1457
+ }));
1458
+ }}, {}, $__super);
1459
+ }(Router));
1460
+ $__export("RootRouter", RootRouter);
1461
+ ChildRouter = (function($__super) {
1462
+ function ChildRouter(parent, hostComponent) {
1463
+ $traceurRuntime.superConstructor(ChildRouter).call(this, parent.registry, parent._pipeline, parent, hostComponent);
1464
+ this.parent = parent;
1465
+ }
1466
+ return ($traceurRuntime.createClass)(ChildRouter, {navigate: function(url) {
1467
+ return this.parent.navigate(url);
1468
+ }}, {}, $__super);
1469
+ }(Router));
1470
+ SLASH = new RegExp('/');
1471
+ }
1472
+ };
1473
+ });
1474
+
1216
1475
  System.register("angular2/src/router/route_registry", ["angular2/src/router/route_recognizer", "angular2/src/router/instruction", "angular2/src/facade/collection", "angular2/src/facade/async", "angular2/src/facade/lang", "angular2/src/router/route_config_impl", "angular2/src/reflection/reflection", "angular2/di"], function($__export) {
1217
1476
  "use strict";
1218
1477
  var __moduleName = "angular2/src/router/route_registry";
@@ -1413,7 +1672,11 @@ System.register("angular2/src/router/route_registry", ["angular2/src/router/rout
1413
1672
  return handler.resolveComponentType().then((function(componentType) {
1414
1673
  $__0.configFromComponent(componentType);
1415
1674
  if (partialMatch.unmatchedUrl.length == 0) {
1416
- return new Instruction(componentType, partialMatch.matchedUrl, recognizer);
1675
+ if (recognizer.terminal) {
1676
+ return new Instruction(componentType, partialMatch.matchedUrl, recognizer);
1677
+ } else {
1678
+ return null;
1679
+ }
1417
1680
  }
1418
1681
  return $__0.recognize(partialMatch.unmatchedUrl, componentType).then((function(childInstruction) {
1419
1682
  if (isBlank(childInstruction)) {
@@ -1461,13 +1724,15 @@ System.register("angular2/src/router/route_registry", ["angular2/src/router/rout
1461
1724
  };
1462
1725
  });
1463
1726
 
1464
- System.register("angular2/src/router/router_outlet", ["angular2/src/facade/async", "angular2/src/facade/lang", "angular2/src/core/annotations/decorators", "angular2/core", "angular2/di", "angular2/src/router/router", "angular2/src/router/instruction"], function($__export) {
1727
+ System.register("angular2/src/router/router_outlet", ["angular2/src/facade/async", "angular2/src/facade/collection", "angular2/src/facade/lang", "angular2/src/core/annotations/decorators", "angular2/core", "angular2/di", "angular2/src/router/router", "angular2/src/router/instruction", "angular2/src/router/lifecycle_annotations", "angular2/src/router/route_lifecycle_reflector"], function($__export) {
1465
1728
  "use strict";
1466
1729
  var __moduleName = "angular2/src/router/router_outlet";
1467
1730
  var __decorate,
1468
1731
  __metadata,
1469
1732
  __param,
1470
1733
  PromiseWrapper,
1734
+ StringMapWrapper,
1735
+ isBlank,
1471
1736
  isPresent,
1472
1737
  Directive,
1473
1738
  Attribute,
@@ -1477,11 +1742,16 @@ System.register("angular2/src/router/router_outlet", ["angular2/src/facade/async
1477
1742
  bind,
1478
1743
  routerMod,
1479
1744
  RouteParams,
1745
+ hookMod,
1746
+ hasLifecycleHook,
1480
1747
  RouterOutlet;
1481
1748
  return {
1482
1749
  setters: [function($__m) {
1483
1750
  PromiseWrapper = $__m.PromiseWrapper;
1484
1751
  }, function($__m) {
1752
+ StringMapWrapper = $__m.StringMapWrapper;
1753
+ }, function($__m) {
1754
+ isBlank = $__m.isBlank;
1485
1755
  isPresent = $__m.isPresent;
1486
1756
  }, function($__m) {
1487
1757
  Directive = $__m.Directive;
@@ -1496,6 +1766,10 @@ System.register("angular2/src/router/router_outlet", ["angular2/src/facade/async
1496
1766
  routerMod = $__m;
1497
1767
  }, function($__m) {
1498
1768
  RouteParams = $__m.RouteParams;
1769
+ }, function($__m) {
1770
+ hookMod = $__m;
1771
+ }, function($__m) {
1772
+ hasLifecycleHook = $__m.hasLifecycleHook;
1499
1773
  }],
1500
1774
  execute: function() {
1501
1775
  __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {
@@ -1529,38 +1803,82 @@ System.register("angular2/src/router/router_outlet", ["angular2/src/facade/async
1529
1803
  this._elementRef = _elementRef;
1530
1804
  this._loader = _loader;
1531
1805
  this._parentRouter = _parentRouter;
1532
- this._childRouter = null;
1806
+ this.childRouter = null;
1533
1807
  this._componentRef = null;
1534
1808
  this._currentInstruction = null;
1535
1809
  this._parentRouter.registerOutlet(this);
1536
1810
  }, {
1537
- activate: function(instruction) {
1811
+ commit: function(instruction) {
1538
1812
  var $__0 = this;
1539
- if ((instruction == this._currentInstruction || instruction.reuse) && isPresent(this._childRouter)) {
1540
- return this._childRouter.commit(instruction.child);
1813
+ var next;
1814
+ if (instruction.reuse) {
1815
+ next = this._reuse(instruction);
1816
+ } else {
1817
+ next = this.deactivate(instruction).then((function(_) {
1818
+ return $__0._activate(instruction);
1819
+ }));
1820
+ }
1821
+ return next.then((function(_) {
1822
+ return $__0._commitChild(instruction);
1823
+ }));
1824
+ },
1825
+ _commitChild: function(instruction) {
1826
+ if (isPresent(this.childRouter)) {
1827
+ return this.childRouter.commit(instruction.child);
1828
+ } else {
1829
+ return PromiseWrapper.resolve(true);
1541
1830
  }
1831
+ },
1832
+ _activate: function(instruction) {
1833
+ var $__0 = this;
1834
+ var previousInstruction = this._currentInstruction;
1542
1835
  this._currentInstruction = instruction;
1543
- this._childRouter = this._parentRouter.childRouter(instruction.component);
1544
- var params = new RouteParams(instruction.params());
1545
- var bindings = Injector.resolve([bind(RouteParams).toValue(params), bind(routerMod.Router).toValue(this._childRouter)]);
1546
- return this.deactivate().then((function(_) {
1547
- return $__0._loader.loadNextToLocation(instruction.component, $__0._elementRef, bindings);
1548
- })).then((function(componentRef) {
1836
+ this.childRouter = this._parentRouter.childRouter(instruction.component);
1837
+ var bindings = Injector.resolve([bind(RouteParams).toValue(new RouteParams(instruction.params())), bind(routerMod.Router).toValue(this.childRouter)]);
1838
+ return this._loader.loadNextToLocation(instruction.component, this._elementRef, bindings).then((function(componentRef) {
1549
1839
  $__0._componentRef = componentRef;
1550
- return $__0._childRouter.commit(instruction.child);
1840
+ if (hasLifecycleHook(hookMod.onActivate, instruction.component)) {
1841
+ return $__0._componentRef.instance.onActivate(instruction, previousInstruction);
1842
+ }
1551
1843
  }));
1552
1844
  },
1553
- deactivate: function() {
1845
+ canDeactivate: function(nextInstruction) {
1846
+ if (isBlank(this._currentInstruction)) {
1847
+ return PromiseWrapper.resolve(true);
1848
+ }
1849
+ if (hasLifecycleHook(hookMod.canDeactivate, this._currentInstruction.component)) {
1850
+ return PromiseWrapper.resolve(this._componentRef.instance.canDeactivate(nextInstruction, this._currentInstruction));
1851
+ }
1852
+ return PromiseWrapper.resolve(true);
1853
+ },
1854
+ canReuse: function(nextInstruction) {
1855
+ var result;
1856
+ if (isBlank(this._currentInstruction) || this._currentInstruction.component != nextInstruction.component) {
1857
+ result = false;
1858
+ } else if (hasLifecycleHook(hookMod.canReuse, this._currentInstruction.component)) {
1859
+ result = this._componentRef.instance.canReuse(nextInstruction, this._currentInstruction);
1860
+ } else {
1861
+ result = nextInstruction == this._currentInstruction || StringMapWrapper.equals(nextInstruction.params(), this._currentInstruction.params());
1862
+ }
1863
+ return PromiseWrapper.resolve(result);
1864
+ },
1865
+ _reuse: function(instruction) {
1866
+ var previousInstruction = this._currentInstruction;
1867
+ this._currentInstruction = instruction;
1868
+ return PromiseWrapper.resolve(hasLifecycleHook(hookMod.onReuse, this._currentInstruction.component) ? this._componentRef.instance.onReuse(instruction, previousInstruction) : true);
1869
+ },
1870
+ deactivate: function(nextInstruction) {
1554
1871
  var $__0 = this;
1555
- return (isPresent(this._childRouter) ? this._childRouter.deactivate() : PromiseWrapper.resolve(true)).then((function(_) {
1872
+ return (isPresent(this.childRouter) ? this.childRouter.deactivate(isPresent(nextInstruction) ? nextInstruction.child : null) : PromiseWrapper.resolve(true)).then((function(_) {
1873
+ if (isPresent($__0._componentRef) && isPresent($__0._currentInstruction) && hasLifecycleHook(hookMod.onDeactivate, $__0._currentInstruction.component)) {
1874
+ return $__0._componentRef.instance.onDeactivate(nextInstruction, $__0._currentInstruction);
1875
+ }
1876
+ })).then((function(_) {
1556
1877
  if (isPresent($__0._componentRef)) {
1557
1878
  $__0._componentRef.dispose();
1558
1879
  $__0._componentRef = null;
1559
1880
  }
1560
1881
  }));
1561
- },
1562
- canDeactivate: function(instruction) {
1563
- return PromiseWrapper.resolve(true);
1564
1882
  }
1565
1883
  }, {}));
1566
1884
  $__export("RouterOutlet", RouterOutlet);
@@ -1569,7 +1887,7 @@ System.register("angular2/src/router/router_outlet", ["angular2/src/facade/async
1569
1887
  };
1570
1888
  });
1571
1889
 
1572
- System.register("angular2/router", ["angular2/src/router/router", "angular2/src/router/router_outlet", "angular2/src/router/router_link", "angular2/src/router/instruction", "angular2/src/router/route_registry", "angular2/src/router/location_strategy", "angular2/src/router/hash_location_strategy", "angular2/src/router/html5_location_strategy", "angular2/src/router/location", "angular2/src/router/pipeline", "angular2/src/router/route_config_decorator", "angular2/src/core/application_tokens", "angular2/di", "angular2/src/facade/lang"], function($__export) {
1890
+ System.register("angular2/router", ["angular2/src/router/router", "angular2/src/router/router_outlet", "angular2/src/router/router_link", "angular2/src/router/instruction", "angular2/src/router/route_registry", "angular2/src/router/location_strategy", "angular2/src/router/hash_location_strategy", "angular2/src/router/html5_location_strategy", "angular2/src/router/location", "angular2/src/router/pipeline", "angular2/src/router/route_config_decorator", "angular2/src/router/lifecycle_annotations", "angular2/src/core/application_tokens", "angular2/di", "angular2/src/facade/lang"], function($__export) {
1573
1891
  "use strict";
1574
1892
  var __moduleName = "angular2/router";
1575
1893
  var LocationStrategy,
@@ -1628,6 +1946,8 @@ System.register("angular2/router", ["angular2/src/router/router", "angular2/src/
1628
1946
  if (!$__exportNames[p])
1629
1947
  $__export(p, $__m[p]);
1630
1948
  });
1949
+ }, function($__m) {
1950
+ $__export("CanActivate", $__m.CanActivate);
1631
1951
  }, function($__m) {
1632
1952
  appComponentTypeToken = $__m.appComponentTypeToken;
1633
1953
  }, function($__m) {