diff --git a/build.sh b/build.sh
index 5f3a6e7f90..2d700e7a9d 100755
--- a/build.sh
+++ b/build.sh
@@ -49,7 +49,6 @@ for PACKAGE in \
platform-browser-dynamic \
platform-server \
http \
- router \
router-deprecated \
upgrade \
compiler-cli
diff --git a/modules/@angular/compiler-cli/test/reflector_host_spec.ts b/modules/@angular/compiler-cli/test/reflector_host_spec.ts
index 47077bcbb2..2a667b9f70 100644
--- a/modules/@angular/compiler-cli/test/reflector_host_spec.ts
+++ b/modules/@angular/compiler-cli/test/reflector_host_spec.ts
@@ -1,7 +1,7 @@
import {beforeEach, ddescribe, describe, expect, iit, it} from '@angular/core/testing/testing_internal';
import * as ts from 'typescript';
-import {ReflectorHost, ReflectorHostContext} from '../src/reflector_host';
+import {ReflectorHost} from '../src/reflector_host';
import {Directory, Entry, MockCompilerHost, MockContext} from './mocks';
@@ -64,11 +64,13 @@ describe('reflector_host', () => {
});
it('should be able to produce a symbol for an exported symbol', () => {
- expect(reflectorHost.findDeclaration('@angular/router', 'foo', 'main.ts')).toBeDefined();
+ expect(reflectorHost.findDeclaration('@angular/router-deprecated', 'foo', 'main.ts'))
+ .toBeDefined();
});
it('should be able to produce a symbol for values space only reference', () => {
- expect(reflectorHost.findDeclaration('@angular/router/src/providers', 'foo', 'main.ts'))
+ expect(
+ reflectorHost.findDeclaration('@angular/router-deprecated/src/providers', 'foo', 'main.ts'))
.toBeDefined();
});
@@ -90,7 +92,7 @@ const FILES: Entry = {
'src': {
'main.ts': `
import * as c from '@angular/core';
- import * as r from '@angular/router';
+ import * as r from '@angular/router-deprecated';
import * as u from './lib/utils';
import * as cs from './lib/collections';
import * as u2 from './lib2/utils2';
@@ -105,7 +107,8 @@ const FILES: Entry = {
'core.d.ts': dummyModule,
'core.metadata.json':
`{"__symbolic":"module", "version": 1, "metadata": {"foo": {"__symbolic": "class"}}}`,
- 'router': {'index.d.ts': dummyModule, 'src': {'providers.d.ts': dummyModule}}
+ 'router-deprecated':
+ {'index.d.ts': dummyModule, 'src': {'providers.d.ts': dummyModule}}
}
}
}
diff --git a/modules/@angular/core/test/dev_mode_spec.ts b/modules/@angular/core/test/dev_mode_spec.ts
index 98da58a32b..d7765815b6 100644
--- a/modules/@angular/core/test/dev_mode_spec.ts
+++ b/modules/@angular/core/test/dev_mode_spec.ts
@@ -1,5 +1,4 @@
import {isDevMode} from '@angular/core';
-
import {beforeEach, ddescribe, describe, expect, iit, inject, it, xdescribe, xit} from '../testing';
export function main() {
diff --git a/modules/@angular/core/test/fake_async_spec.ts b/modules/@angular/core/test/fake_async_spec.ts
index d8e5a21ae7..cca3b7247a 100644
--- a/modules/@angular/core/test/fake_async_spec.ts
+++ b/modules/@angular/core/test/fake_async_spec.ts
@@ -1,7 +1,7 @@
import {beforeEach, ddescribe, describe, expect, iit, inject, it, xit} from '@angular/core/testing/testing_internal';
import {fakeAsync, flushMicrotasks, Log, tick, discardPeriodicTasks,} from '@angular/core/testing';
-import {TimerWrapper, PromiseWrapper} from '../../router/src/facade/async';
-import {BaseException} from '../../router/src/facade/exceptions';
+import {TimerWrapper, PromiseWrapper} from '../../router-deprecated/src/facade/async';
+import {BaseException} from '../../router-deprecated/src/facade/exceptions';
import {Parser} from '../../compiler/src/expression_parser/parser';
export function main() {
diff --git a/modules/@angular/core/test/testing_internal_spec.ts b/modules/@angular/core/test/testing_internal_spec.ts
index 925dd3cd29..da7fc51703 100644
--- a/modules/@angular/core/test/testing_internal_spec.ts
+++ b/modules/@angular/core/test/testing_internal_spec.ts
@@ -1,7 +1,7 @@
import {SpyObject} from '@angular/core/testing/testing_internal';
import {MapWrapper} from '../../platform-browser/src/facade/collection';
-import {RegExpWrapper} from '../../router/src/facade/lang';
+import {RegExpWrapper} from '../../router-deprecated/src/facade/lang';
import {beforeEach, containsRegexp, ddescribe, describe, expect, iit, it, tick} from '../testing';
class TestObj {
diff --git a/modules/@angular/platform-browser-dynamic/test/testing_public_browser_spec.ts b/modules/@angular/platform-browser-dynamic/test/testing_public_browser_spec.ts
index 31c39ce3a1..2f11a57ab8 100644
--- a/modules/@angular/platform-browser-dynamic/test/testing_public_browser_spec.ts
+++ b/modules/@angular/platform-browser-dynamic/test/testing_public_browser_spec.ts
@@ -1,8 +1,7 @@
import {it, iit, xit, describe, ddescribe, xdescribe, expect, beforeEach, beforeEachProviders, inject,} from '@angular/core/testing';
import {async, fakeAsync, flushMicrotasks, Log, tick,} from '@angular/core/testing';
-import {ROUTER_FAKE_PROVIDERS} from '@angular/router/testing';
-import {ROUTER_DIRECTIVES, Routes, Route} from '@angular/router';
+import {ROUTER_DIRECTIVES, Route} from '@angular/router-deprecated';
import {Component, bind} from '@angular/core';
@@ -37,10 +36,6 @@ class BadTemplateUrl {
`one two`,
directives: [ROUTER_DIRECTIVES]
})
-@Routes([
- new Route({path: '/One', component: BadTemplateUrl}),
- new Route({path: '/Two', component: ExternalTemplateComp}),
-])
class TestRouterComponent {
}
@@ -169,15 +164,4 @@ export function main() {
10000); // Long timeout here because this test makes an actual XHR, and is slow on Edge.
});
});
-
- describe('apps with router components', () => {
- beforeEachProviders(() => [ROUTER_FAKE_PROVIDERS]);
-
- it('should build without a problem',
- async(inject([TestComponentBuilder], (tcb: TestComponentBuilder) => {
- tcb.createAsync(TestRouterComponent).then((fixture) => {
- expect(fixture.nativeElement).toHaveText('one two');
- });
- })));
- });
}
diff --git a/modules/@angular/router/index.ts b/modules/@angular/router/index.ts
deleted file mode 100644
index 0e345abe68..0000000000
--- a/modules/@angular/router/index.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * @module
- * @description
- * Maps application URLs into application states, to support deep-linking and navigation.
- */
-
-export {ROUTER_DIRECTIVES} from './src/directives/router_directives';
-export {RouterLink} from './src/directives/router_link';
-export {RouterOutlet} from './src/directives/router_outlet';
-export {CanDeactivate, OnActivate} from './src/interfaces';
-export {Routes} from './src/metadata/decorators';
-export {Route} from './src/metadata/metadata';
-export {Router, RouterOutletMap} from './src/router';
-export {ROUTER_PROVIDERS} from './src/router_providers';
-export {DefaultRouterUrlSerializer, RouterUrlSerializer} from './src/router_url_serializer';
-export {RouteSegment, RouteTree, Tree, UrlSegment, UrlTree} from './src/segments';
diff --git a/modules/@angular/router/package.json b/modules/@angular/router/package.json
deleted file mode 100644
index 1c43c001d5..0000000000
--- a/modules/@angular/router/package.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "name": "@angular/router",
- "version": "0.0.0-PLACEHOLDER",
- "description": "",
- "main": "index.js",
- "jsnext:main": "esm/index.js",
- "typins": "index.d.ts",
- "author": "angular",
- "license": "MIT",
- "peerDependencies": {
- "@angular/core": "0.0.0-PLACEHOLDER",
- "@angular/common": "0.0.0-PLACEHOLDER",
- "@angular/platform-browser": "0.0.0-PLACEHOLDER"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/angular/angular.git"
- }
-}
diff --git a/modules/@angular/router/platform_browser_private.dart b/modules/@angular/router/platform_browser_private.dart
deleted file mode 100644
index 6bdd163a76..0000000000
--- a/modules/@angular/router/platform_browser_private.dart
+++ /dev/null
@@ -1 +0,0 @@
-export './platform-browser.dart' show DomAdapter, setRootDomAdapter;
diff --git a/modules/@angular/router/platform_browser_private.ts b/modules/@angular/router/platform_browser_private.ts
deleted file mode 100644
index 63b9199466..0000000000
--- a/modules/@angular/router/platform_browser_private.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import {__platform_browser_private__ as _} from '@angular/platform-browser';
-
-export type DomAdapter = typeof _.DomAdapter;
-export var getDOM: typeof _.getDOM = _.getDOM;
diff --git a/modules/@angular/router/rollup.config.js b/modules/@angular/router/rollup.config.js
deleted file mode 100644
index 8bc3b06149..0000000000
--- a/modules/@angular/router/rollup.config.js
+++ /dev/null
@@ -1,19 +0,0 @@
-
-export default {
- entry: '../../../dist/packages-dist/router/esm/index.js',
- dest: '../../../dist/packages-dist/router/esm/router.umd.js',
- format: 'umd',
- moduleName: 'ng.router',
- globals: {
- '@angular/core': 'ng.core',
- '@angular/common': 'ng.common',
- '@angular/platform-browser': 'ng.platformBrowser',
- 'rxjs/Subject': 'Rx',
- 'rxjs/observable/PromiseObservable': 'Rx', // this is wrong, but this stuff has changed in rxjs b.6 so we need to fix it when we update.
- 'rxjs/operator/toPromise': 'Rx.Observable.prototype',
- 'rxjs/Observable': 'Rx'
- },
- plugins: [
-// nodeResolve({ jsnext: true, main: true }),
- ]
-}
diff --git a/modules/@angular/router/src/constants.ts b/modules/@angular/router/src/constants.ts
deleted file mode 100644
index 87231d2f15..0000000000
--- a/modules/@angular/router/src/constants.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- * Name of the default outlet outlet.
- * @type {string}
- */
-export const DEFAULT_OUTLET_NAME = '__DEFAULT';
\ No newline at end of file
diff --git a/modules/@angular/router/src/core_private.ts b/modules/@angular/router/src/core_private.ts
deleted file mode 100644
index f05714f384..0000000000
--- a/modules/@angular/router/src/core_private.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import {__core_private__ as _} from '@angular/core';
-
-export var makeDecorator: typeof _.makeDecorator = _.makeDecorator;
-export var reflector: typeof _.reflector = _.reflector;
diff --git a/modules/@angular/router/src/directives/router_directives.ts b/modules/@angular/router/src/directives/router_directives.ts
deleted file mode 100644
index 63e0c83121..0000000000
--- a/modules/@angular/router/src/directives/router_directives.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import {RouterLink} from './router_link';
-import {RouterOutlet} from './router_outlet';
-
-/**
- * A list of directives. To use the router directives like {@link RouterOutlet} and
- * {@link RouterLink}, add this to your `directives` array in the {@link View} decorator of your
- * component.
- *
- * ```
- * import {Component} from '@angular/core';
- * import {ROUTER_DIRECTIVES, Routes} from '@angular/router';
- *
- * @Component({directives: [ROUTER_DIRECTIVES]})
- * @Routes([
- * {...},
- * ])
- * class AppCmp {
- * // ...
- * }
- *
- * bootstrap(AppCmp);
- * ```
- */
-
-export const ROUTER_DIRECTIVES: any[] = /*@ts2dart_const*/[RouterOutlet, RouterLink];
diff --git a/modules/@angular/router/src/directives/router_link.ts b/modules/@angular/router/src/directives/router_link.ts
deleted file mode 100644
index 04cb72a6f8..0000000000
--- a/modules/@angular/router/src/directives/router_link.ts
+++ /dev/null
@@ -1,95 +0,0 @@
-import {LocationStrategy} from '@angular/common';
-import {Directive, HostBinding, HostListener, Input, OnDestroy} from '@angular/core';
-
-import {ObservableWrapper} from '../facade/async';
-import {isArray, isPresent, isString} from '../facade/lang';
-import {Router} from '../router';
-import {RouteSegment} from '../segments';
-
-
-/**
- * The RouterLink directive lets you link to specific parts of your app.
- *
- * Consider the following route configuration:
-
- * ```
- * @Routes([
- * { path: '/user', component: UserCmp }
- * ]);
- * class MyComp {}
- * ```
- *
- * When linking to this `User` route, you can write:
- *
- * ```
- * link to user component
- * ```
- *
- * RouterLink expects the value to be an array of path segments, followed by the params
- * for that level of routing. For instance `['/team', {teamId: 1}, 'user', {userId: 2}]`
- * means that we want to generate a link to `/team;teamId=1/user;userId=2`.
- *
- * The first segment name can be prepended with `/`, `./`, or `../`.
- * If the segment begins with `/`, the router will look up the route from the root of the app.
- * If the segment begins with `./`, or doesn't begin with a slash, the router will
- * instead look in the current component's children for the route.
- * And if the segment begins with `../`, the router will go up one segment in the url.
- *
- * See {@link Router.createUrlTree} for more information.
- */
-@Directive({selector: '[routerLink]'})
-export class RouterLink implements OnDestroy {
- @Input() target: string;
- private _commands: any[] = [];
- private _subscription: any;
-
- // the url displayed on the anchor element.
- @HostBinding() href: string;
- @HostBinding('class.router-link-active') isActive: boolean = false;
-
- constructor(
- private _routeSegment: RouteSegment, private _router: Router,
- private _locationStrategy: LocationStrategy) {
- // because auxiliary links take existing primary and auxiliary routes into account,
- // we need to update the link whenever params or other routes change.
- this._subscription =
- ObservableWrapper.subscribe(_router.changes, (_) => { this._updateTargetUrlAndHref(); });
- }
-
- ngOnDestroy() { ObservableWrapper.dispose(this._subscription); }
-
- @Input()
- set routerLink(data: any[]|any) {
- if (isArray(data)) {
- this._commands = data;
- } else {
- this._commands = [data];
- }
- this._updateTargetUrlAndHref();
- }
-
-
- @HostListener('click', ['$event.button', '$event.ctrlKey', '$event.metaKey'])
- onClick(button: number, ctrlKey: boolean, metaKey: boolean): boolean {
- if (button != 0 || ctrlKey || metaKey) {
- return true;
- }
-
- if (isString(this.target) && this.target != '_self') {
- return true;
- }
-
- this._router.navigate(this._commands, this._routeSegment);
- return false;
- }
-
- private _updateTargetUrlAndHref(): void {
- let tree = this._router.createUrlTree(this._commands, this._routeSegment);
- if (isPresent(tree)) {
- this.href = this._locationStrategy.prepareExternalUrl(this._router.serializeUrl(tree));
- this.isActive = this._router.urlTree.contains(tree);
- } else {
- this.isActive = false;
- }
- }
-}
diff --git a/modules/@angular/router/src/directives/router_outlet.ts b/modules/@angular/router/src/directives/router_outlet.ts
deleted file mode 100644
index 05aa61c6d9..0000000000
--- a/modules/@angular/router/src/directives/router_outlet.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import {Attribute, ComponentFactory, ComponentRef, Directive, ReflectiveInjector, ResolvedReflectiveProvider, ViewContainerRef} from '@angular/core';
-
-import {DEFAULT_OUTLET_NAME} from '../constants';
-import {isBlank, isPresent} from '../facade/lang';
-import {RouterOutletMap} from '../router';
-
-
-/**
- * A router outlet is a placeholder that Angular dynamically fills based on the application's route.
- *
- * ## Use
- *
- * ```
- *
- * ```
- *
- * Outlets can be named.
- *
- * ```
- *
- * ```
- */
-@Directive({selector: 'router-outlet'})
-export class RouterOutlet {
- private _activated: ComponentRef;
- public outletMap: RouterOutletMap;
-
- constructor(
- parentOutletMap: RouterOutletMap, private _location: ViewContainerRef,
- @Attribute('name') name: string) {
- parentOutletMap.registerOutlet(isBlank(name) ? DEFAULT_OUTLET_NAME : name, this);
- }
-
- deactivate(): void {
- this._activated.destroy();
- this._activated = null;
- }
-
- /**
- * Returns the loaded component.
- */
- get component(): Object { return isPresent(this._activated) ? this._activated.instance : null; }
-
- /**
- * Returns true is the outlet is not empty.
- */
- get isActivated(): boolean { return isPresent(this._activated); }
-
- /**
- * Called by the Router to instantiate a new component.
- */
- activate(
- factory: ComponentFactory, providers: ResolvedReflectiveProvider[],
- outletMap: RouterOutletMap): ComponentRef {
- this.outletMap = outletMap;
- let inj = ReflectiveInjector.fromResolvedProviders(providers, this._location.parentInjector);
- this._activated = this._location.createComponent(factory, this._location.length, inj, []);
- return this._activated;
- }
-}
diff --git a/modules/@angular/router/src/facade b/modules/@angular/router/src/facade
deleted file mode 120000
index e084c803c6..0000000000
--- a/modules/@angular/router/src/facade
+++ /dev/null
@@ -1 +0,0 @@
-../../facade/src
\ No newline at end of file
diff --git a/modules/@angular/router/src/interfaces.ts b/modules/@angular/router/src/interfaces.ts
deleted file mode 100644
index 1c307b370c..0000000000
--- a/modules/@angular/router/src/interfaces.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import {RouteSegment, RouteTree, Tree} from './segments';
-
-
-/**
- * Defines route lifecycle method `routerOnActivate`, which is called by the router at the end of a
- * successful route navigation.
- *
- * The `routerOnActivate` hook is called with the current and previous {@link RouteSegment}s of the
- * component and with the corresponding route trees.
- */
-export interface OnActivate {
- routerOnActivate(
- curr: RouteSegment, prev?: RouteSegment, currTree?: RouteTree, prevTree?: RouteTree): void;
-}
-
-/**
- * Defines route lifecycle method `routerOnDeactivate`, which is called by the router before
- * destroying a component as part of a route change.
- *
- * The `routerOnDeactivate` hook is called with two {@link RouteTree}s, representing the current
- * and the future state of the application.
- *
- * `routerOnDeactivate` must return a promise. The route change will wait until the promise settles.
- */
-export interface CanDeactivate {
- routerCanDeactivate(currTree?: RouteTree, futureTree?: RouteTree): Promise;
-}
\ No newline at end of file
diff --git a/modules/@angular/router/src/lifecycle_reflector.dart b/modules/@angular/router/src/lifecycle_reflector.dart
deleted file mode 100644
index 197df5fd48..0000000000
--- a/modules/@angular/router/src/lifecycle_reflector.dart
+++ /dev/null
@@ -1,6 +0,0 @@
-import './interfaces.dart';
-bool hasLifecycleHook(String name, Object obj) {
- if (name == "routerOnActivate") return obj is OnActivate;
- if (name == "routerCanDeactivate") return obj is CanDeactivate;
- return false;
-}
diff --git a/modules/@angular/router/src/lifecycle_reflector.ts b/modules/@angular/router/src/lifecycle_reflector.ts
deleted file mode 100644
index 020e18421b..0000000000
--- a/modules/@angular/router/src/lifecycle_reflector.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import {Type, isBlank} from './facade/lang';
-
-export function hasLifecycleHook(name: string, obj: Object): boolean {
- if (isBlank(obj)) return false;
- let type = obj.constructor;
- if (!(type instanceof Type)) return false;
- return name in (type).prototype;
-}
diff --git a/modules/@angular/router/src/link.ts b/modules/@angular/router/src/link.ts
deleted file mode 100644
index 1545bb787a..0000000000
--- a/modules/@angular/router/src/link.ts
+++ /dev/null
@@ -1,213 +0,0 @@
-import {ListWrapper, StringMapWrapper} from './facade/collection';
-import {BaseException} from './facade/exceptions';
-import {isBlank, isPresent, isString, isStringMap} from './facade/lang';
-import {RouteSegment, RouteTree, Tree, TreeNode, UrlSegment, UrlTree, rootNode} from './segments';
-
-export function link(
- segment: RouteSegment, routeTree: RouteTree, urlTree: UrlTree, commands: any[]): UrlTree {
- if (commands.length === 0) return urlTree;
-
- let normalizedCommands = _normalizeCommands(commands);
- if (_navigateToRoot(normalizedCommands)) {
- return new UrlTree(new TreeNode(urlTree.root, []));
- }
-
- let startingNode = _findStartingNode(normalizedCommands, urlTree, segment, routeTree);
- let updated = normalizedCommands.commands.length > 0 ?
- _updateMany(ListWrapper.clone(startingNode.children), normalizedCommands.commands) :
- [];
- let newRoot = _constructNewTree(rootNode(urlTree), startingNode, updated);
-
- return new UrlTree(newRoot);
-}
-
-function _navigateToRoot(normalizedChange: _NormalizedNavigationCommands): boolean {
- return normalizedChange.isAbsolute && normalizedChange.commands.length === 1 &&
- normalizedChange.commands[0] == '/';
-}
-
-class _NormalizedNavigationCommands {
- constructor(
- public isAbsolute: boolean, public numberOfDoubleDots: number, public commands: any[]) {}
-}
-
-function _normalizeCommands(commands: any[]): _NormalizedNavigationCommands {
- if (isString(commands[0]) && commands.length === 1 && commands[0] == '/') {
- return new _NormalizedNavigationCommands(true, 0, commands);
- }
-
- let numberOfDoubleDots = 0;
- let isAbsolute = false;
- let res: any[] /** TODO #9100 */ = [];
-
- for (let i = 0; i < commands.length; ++i) {
- let c = commands[i];
-
- if (!isString(c)) {
- res.push(c);
- continue;
- }
-
- let parts = c.split('/');
- for (let j = 0; j < parts.length; ++j) {
- let cc = parts[j];
-
- // first exp is treated in a special way
- if (i == 0) {
- if (j == 0 && cc == '.') { // './a'
- // skip it
- } else if (j == 0 && cc == '') { // '/a'
- isAbsolute = true;
- } else if (cc == '..') { // '../a'
- numberOfDoubleDots++;
- } else if (cc != '') {
- res.push(cc);
- }
-
- } else {
- if (cc != '') {
- res.push(cc);
- }
- }
- }
- }
-
- return new _NormalizedNavigationCommands(isAbsolute, numberOfDoubleDots, res);
-}
-
-function _findUrlSegment(
- segment: RouteSegment, routeTree: RouteTree, urlTree: UrlTree,
- numberOfDoubleDots: number): UrlSegment {
- let s = segment;
- while (s.urlSegments.length === 0) {
- s = routeTree.parent(s);
- }
- let urlSegment = ListWrapper.last(s.urlSegments);
- let path = urlTree.pathFromRoot(urlSegment);
- if (path.length <= numberOfDoubleDots) {
- throw new BaseException('Invalid number of \'../\'');
- }
- return path[path.length - 1 - numberOfDoubleDots];
-}
-
-function _findStartingNode(
- normalizedChange: _NormalizedNavigationCommands, urlTree: UrlTree, segment: RouteSegment,
- routeTree: RouteTree): TreeNode {
- if (normalizedChange.isAbsolute) {
- return rootNode(urlTree);
- } else {
- let urlSegment =
- _findUrlSegment(segment, routeTree, urlTree, normalizedChange.numberOfDoubleDots);
- return _findMatchingNode(urlSegment, rootNode(urlTree));
- }
-}
-
-function _findMatchingNode(segment: UrlSegment, node: TreeNode): TreeNode {
- if (node.value === segment) return node;
- for (var c of node.children) {
- let r = _findMatchingNode(segment, c);
- if (isPresent(r)) return r;
- }
- return null;
-}
-
-function _constructNewTree(
- node: TreeNode, original: TreeNode,
- updated: TreeNode[]): TreeNode {
- if (node === original) {
- return new TreeNode(node.value, updated);
- } else {
- return new TreeNode(
- node.value, node.children.map(c => _constructNewTree(c, original, updated)));
- }
-}
-
-function _update(node: TreeNode, commands: any[]): TreeNode {
- let rest = commands.slice(1);
- let next = rest.length === 0 ? null : rest[0];
- let outlet = _outlet(commands);
- let segment = _segment(commands);
-
- // reach the end of the tree => create new tree nodes.
- if (isBlank(node) && !isStringMap(next)) {
- let urlSegment = new UrlSegment(segment, {}, outlet);
- let children = rest.length === 0 ? [] : [_update(null, rest)];
- return new TreeNode(urlSegment, children);
-
- } else if (isBlank(node) && isStringMap(next)) {
- let urlSegment = new UrlSegment(segment, _stringify(next), outlet);
- return _recurse(urlSegment, node, rest.slice(1));
-
- // different outlet => preserve the subtree
- } else if (outlet != node.value.outlet) {
- return node;
-
- // params command
- } else if (isStringMap(segment)) {
- let newSegment = new UrlSegment(node.value.segment, _stringify(segment), node.value.outlet);
- return _recurse(newSegment, node, rest);
-
- // next one is a params command && can reuse the node
- } else if (isStringMap(next) && _compare(segment, _stringify(next), node.value)) {
- return _recurse(node.value, node, rest.slice(1));
-
- // next one is a params command && cannot reuse the node
- } else if (isStringMap(next)) {
- let urlSegment = new UrlSegment(segment, _stringify(next), outlet);
- return _recurse(urlSegment, node, rest.slice(1));
-
- // next one is not a params command && can reuse the node
- } else if (_compare(segment, {}, node.value)) {
- return _recurse(node.value, node, rest);
-
- // next one is not a params command && cannot reuse the node
- } else {
- let urlSegment = new UrlSegment(segment, {}, outlet);
- return _recurse(urlSegment, node, rest);
- }
-}
-
-function _stringify(params: {[key: string]: any}): {[key: string]: string} {
- let res = {};
- StringMapWrapper.forEach(
- params, (v: any /** TODO #9100 */, k: any /** TODO #9100 */) =>
- (res as any /** TODO #9100 */)[k] = v.toString());
- return res;
-}
-
-function _compare(path: string, params: {[key: string]: any}, segment: UrlSegment): boolean {
- return path == segment.segment && StringMapWrapper.equals(params, segment.parameters);
-}
-
-function _recurse(
- urlSegment: UrlSegment, node: TreeNode, rest: any[]): TreeNode {
- if (rest.length === 0) {
- return new TreeNode(urlSegment, []);
- }
- return new TreeNode(urlSegment, _updateMany(ListWrapper.clone(node.children), rest));
-}
-
-function _updateMany(nodes: TreeNode[], commands: any[]): TreeNode[] {
- let outlet = _outlet(commands);
- let nodesInRightOutlet = nodes.filter(c => c.value.outlet == outlet);
- if (nodesInRightOutlet.length > 0) {
- let nodeRightOutlet = nodesInRightOutlet[0]; // there can be only one
- nodes[nodes.indexOf(nodeRightOutlet)] = _update(nodeRightOutlet, commands);
- } else {
- nodes.push(_update(null, commands));
- }
-
- return nodes;
-}
-
-function _segment(commands: any[]): any {
- if (!isString(commands[0])) return commands[0];
- let parts = commands[0].toString().split(':');
- return parts.length > 1 ? parts[1] : commands[0];
-}
-
-function _outlet(commands: any[]): string {
- if (!isString(commands[0])) return null;
- let parts = commands[0].toString().split(':');
- return parts.length > 1 ? parts[0] : null;
-}
diff --git a/modules/@angular/router/src/metadata/decorators.dart b/modules/@angular/router/src/metadata/decorators.dart
deleted file mode 100644
index 5f4dce731d..0000000000
--- a/modules/@angular/router/src/metadata/decorators.dart
+++ /dev/null
@@ -1,13 +0,0 @@
-library angular.alt_router.decorators;
-
-import 'metadata.dart';
-export 'metadata.dart';
-
-/**
- * Defines routes for a given component.
- *
- * It takes an array of {@link RouteMetadata}s.
- */
-class Routes extends RoutesMetadata {
- const Routes(List routes): super(routes);
-}
\ No newline at end of file
diff --git a/modules/@angular/router/src/metadata/decorators.ts b/modules/@angular/router/src/metadata/decorators.ts
deleted file mode 100644
index 73dfbf5eb7..0000000000
--- a/modules/@angular/router/src/metadata/decorators.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import {makeDecorator} from '../core_private';
-
-import {RouteMetadata, RoutesMetadata} from './metadata';
-
-
-/**
- * Defines routes for a given component.
- *
- * It takes an array of {@link RouteMetadata}s.
- */
-export interface RoutesFactory {
- (routes: RouteMetadata[]): any;
- new (routes: RouteMetadata[]): RoutesMetadata;
-}
-
-/**
- * Defines routes for a given component.
- *
- * It takes an array of {@link RouteMetadata}s.
- * @Annotation
- */
-export var Routes: RoutesFactory = makeDecorator(RoutesMetadata);
diff --git a/modules/@angular/router/src/metadata/metadata.ts b/modules/@angular/router/src/metadata/metadata.ts
deleted file mode 100644
index eacc6515bc..0000000000
--- a/modules/@angular/router/src/metadata/metadata.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import {Type} from '@angular/core';
-import {stringify} from '../facade/lang';
-
-/**
- * Information about a route.
- *
- * It has the following properties:
- * - `path` is a string that uses the route matcher DSL.
- * - `component` a component type.
- *
- * ### Example
- * ```
- * import {Routes} from '@angular/router';
- *
- * @Routes([
- * {path: '/home', component: HomeCmp}
- * ])
- * class MyApp {}
- * ```
- *
- * @ts2dart_const
- */
-export abstract class RouteMetadata {
- abstract get path(): string;
- abstract get component(): Type|string;
-}
-
-/**
- * See {@link RouteMetadata} for more information.
- * @ts2dart_const
- */
-export class Route implements RouteMetadata {
- path: string;
- component: Type|string;
- constructor({path, component}: {path?: string, component?: Type|string} = {}) {
- this.path = path;
- this.component = component;
- }
- toString(): string { return `@Route(${this.path}, ${stringify(this.component)})`; }
-}
-
-/**
- * Defines routes for a given component.
- *
- * It takes an array of {@link RouteMetadata}s.
- * @ts2dart_const
- */
-export class RoutesMetadata {
- constructor(public routes: RouteMetadata[]) {}
- toString(): string { return `@Routes(${this.routes})`; }
-}
diff --git a/modules/@angular/router/src/recognize.ts b/modules/@angular/router/src/recognize.ts
deleted file mode 100644
index b278379777..0000000000
--- a/modules/@angular/router/src/recognize.ts
+++ /dev/null
@@ -1,210 +0,0 @@
-import {BaseException, ComponentFactory, ComponentResolver} from '@angular/core';
-
-import {DEFAULT_OUTLET_NAME} from './constants';
-import {reflector} from './core_private';
-import {ListWrapper, StringMapWrapper} from './facade/collection';
-import {Type, isBlank, isPresent, stringify} from './facade/lang';
-import {PromiseWrapper} from './facade/promise';
-import {RouteMetadata, RoutesMetadata} from './metadata/metadata';
-import {RouteSegment, RouteTree, Tree, TreeNode, UrlSegment, UrlTree, equalUrlSegments, rootNode} from './segments';
-
-export function recognize(
- componentResolver: ComponentResolver, rootComponent: Type, url: UrlTree,
- existingTree: RouteTree): Promise {
- let matched = new _MatchResult(rootComponent, [url.root], {}, rootNode(url).children, []);
- return _constructSegment(componentResolver, matched, rootNode(existingTree))
- .then(roots => new RouteTree(roots[0]));
-}
-
-function _recognize(
- componentResolver: ComponentResolver, parentComponent: Type, url: TreeNode,
- existingSegments: TreeNode[]): Promise[]> {
- let metadata = _readMetadata(parentComponent); // should read from the factory instead
- if (isBlank(metadata)) {
- throw new BaseException(
- `Component '${stringify(parentComponent)}' does not have route configuration`);
- }
-
- let match: any /** TODO #9100 */;
- try {
- match = _match(metadata, url);
- } catch (e) {
- return PromiseWrapper.reject(e, null);
- }
-
- let segmentsWithRightOutlet = existingSegments.filter(r => r.value.outlet == match.outlet);
- let segmentWithRightOutlet =
- segmentsWithRightOutlet.length > 0 ? segmentsWithRightOutlet[0] : null;
-
- let main = _constructSegment(componentResolver, match, segmentWithRightOutlet);
- let aux = _recognizeMany(componentResolver, parentComponent, match.aux, existingSegments)
- .then(_checkOutletNameUniqueness);
- return PromiseWrapper.all([main, aux]).then(ListWrapper.flatten);
-}
-
-function _recognizeMany(
- componentResolver: ComponentResolver, parentComponent: Type, urls: TreeNode[],
- existingSegments: TreeNode[]): Promise[]> {
- let recognized =
- urls.map(u => _recognize(componentResolver, parentComponent, u, existingSegments));
- return PromiseWrapper.all(recognized).then(ListWrapper.flatten);
-}
-
-function _constructSegment(
- componentResolver: ComponentResolver, matched: _MatchResult,
- existingSegment: TreeNode): Promise[]> {
- return componentResolver.resolveComponent(matched.component).then(factory => {
- let segment = _createOrReuseSegment(matched, factory, existingSegment);
- let existingChildren = isPresent(existingSegment) ? existingSegment.children : [];
-
- if (matched.leftOverUrl.length > 0) {
- return _recognizeMany(
- componentResolver, factory.componentType, matched.leftOverUrl, existingChildren)
- .then(children => [new TreeNode(segment, children)]);
- } else {
- return _recognizeLeftOvers(componentResolver, factory.componentType, existingChildren)
- .then(children => [new TreeNode(segment, children)]);
- }
- });
-}
-
-function _createOrReuseSegment(
- matched: _MatchResult, factory: ComponentFactory,
- segmentNode: TreeNode): RouteSegment {
- let segment = isPresent(segmentNode) ? segmentNode.value : null;
-
- if (isPresent(segment) && equalUrlSegments(segment.urlSegments, matched.consumedUrlSegments) &&
- StringMapWrapper.equals(segment.parameters, matched.parameters) &&
- segment.outlet == matched.outlet && factory.componentType == segment.type) {
- return segment;
- } else {
- return new RouteSegment(
- matched.consumedUrlSegments, matched.parameters, matched.outlet, factory.componentType,
- factory);
- }
-}
-
-function _recognizeLeftOvers(
- componentResolver: ComponentResolver, parentComponent: Type,
- existingSegments: TreeNode[]): Promise[]> {
- return componentResolver.resolveComponent(parentComponent).then(factory => {
- let metadata = _readMetadata(factory.componentType);
- if (isBlank(metadata)) {
- return [];
- }
-
- let r = (metadata.routes).filter(r => r.path == '' || r.path == '/');
- if (r.length === 0) {
- return PromiseWrapper.resolve([]);
- } else {
- let segmentsWithMatchingOutlet =
- existingSegments.filter(r => r.value.outlet == DEFAULT_OUTLET_NAME);
- let segmentWithMatchingOutlet =
- segmentsWithMatchingOutlet.length > 0 ? segmentsWithMatchingOutlet[0] : null;
- let existingChildren =
- isPresent(segmentWithMatchingOutlet) ? segmentWithMatchingOutlet.children : [];
-
- return _recognizeLeftOvers(componentResolver, r[0].component, existingChildren)
- .then(children => {
- return componentResolver.resolveComponent(r[0].component).then(factory => {
- let segment = _createOrReuseSegment(
- new _MatchResult(r[0].component, [], {}, [], []), factory,
- segmentWithMatchingOutlet);
- return [new TreeNode(segment, children)];
- });
- });
- }
- });
-}
-
-function _match(metadata: RoutesMetadata, url: TreeNode): _MatchResult {
- for (let r of metadata.routes) {
- let matchingResult = _matchWithParts(r, url);
- if (isPresent(matchingResult)) {
- return matchingResult;
- }
- }
- let availableRoutes = metadata.routes.map(r => `'${r.path}'`).join(', ');
- throw new BaseException(
- `Cannot match any routes. Current segment: '${url.value}'. Available routes: [${availableRoutes}].`);
-}
-
-function _matchWithParts(route: RouteMetadata, url: TreeNode): _MatchResult {
- let path = route.path.startsWith('/') ? route.path.substring(1) : route.path;
-
- if (path == '*') {
- return new _MatchResult(route.component, [], null, [], []);
- }
-
- let parts = path.split('/');
- let positionalParams = {};
- let consumedUrlSegments: any[] /** TODO #9100 */ = [];
-
- let lastParent: TreeNode = null;
- let lastSegment: TreeNode = null;
-
- let current = url;
- for (let i = 0; i < parts.length; ++i) {
- if (isBlank(current)) return null;
-
- let p = parts[i];
- let isLastSegment = i === parts.length - 1;
- let isLastParent = i === parts.length - 2;
- let isPosParam = p.startsWith(':');
-
- if (!isPosParam && p != current.value.segment) return null;
- if (isLastSegment) {
- lastSegment = current;
- }
- if (isLastParent) {
- lastParent = current;
- }
-
- if (isPosParam) {
- (positionalParams as any /** TODO #9100 */)[p.substring(1)] = current.value.segment;
- }
-
- consumedUrlSegments.push(current.value);
-
- current = ListWrapper.first(current.children);
- }
-
- let p = lastSegment.value.parameters;
- let parameters = <{[key: string]: string}>StringMapWrapper.merge(p, positionalParams);
- let axuUrlSubtrees = isPresent(lastParent) ? lastParent.children.slice(1) : [];
-
- return new _MatchResult(
- route.component, consumedUrlSegments, parameters, lastSegment.children, axuUrlSubtrees);
-}
-
-function _checkOutletNameUniqueness(nodes: TreeNode[]): TreeNode[] {
- let names = {};
- nodes.forEach(n => {
- let segmentWithSameOutletName = (names as any /** TODO #9100 */)[n.value.outlet];
- if (isPresent(segmentWithSameOutletName)) {
- let p = segmentWithSameOutletName.stringifiedUrlSegments;
- let c = n.value.stringifiedUrlSegments;
- throw new BaseException(`Two segments cannot have the same outlet name: '${p}' and '${c}'.`);
- }
- (names as any /** TODO #9100 */)[n.value.outlet] = n.value;
- });
- return nodes;
-}
-
-class _MatchResult {
- constructor(
- public component: Type|string, public consumedUrlSegments: UrlSegment[],
- public parameters: {[key: string]: string}, public leftOverUrl: TreeNode[],
- public aux: TreeNode[]) {}
-
- get outlet(): string {
- return this.consumedUrlSegments.length === 0 || isBlank(this.consumedUrlSegments[0].outlet) ?
- DEFAULT_OUTLET_NAME :
- this.consumedUrlSegments[0].outlet;
- }
-}
-
-function _readMetadata(componentType: Type) {
- let metadata = reflector.annotations(componentType).filter(f => f instanceof RoutesMetadata);
- return ListWrapper.first(metadata);
-}
diff --git a/modules/@angular/router/src/router.ts b/modules/@angular/router/src/router.ts
deleted file mode 100644
index 0e124c0600..0000000000
--- a/modules/@angular/router/src/router.ts
+++ /dev/null
@@ -1,282 +0,0 @@
-import {Location} from '@angular/common';
-import {BaseException, ComponentResolver, ReflectiveInjector, provide} from '@angular/core';
-
-import {DEFAULT_OUTLET_NAME} from './constants';
-import {RouterOutlet} from './directives/router_outlet';
-import {EventEmitter, Observable, ObservableWrapper, PromiseWrapper} from './facade/async';
-import {ListWrapper, StringMapWrapper} from './facade/collection';
-import {Type, isBlank, isPresent} from './facade/lang';
-import {CanDeactivate} from './interfaces';
-import {hasLifecycleHook} from './lifecycle_reflector';
-import {link} from './link';
-import {recognize} from './recognize';
-import {RouterUrlSerializer} from './router_url_serializer';
-import {RouteSegment, RouteTree, TreeNode, UrlSegment, UrlTree, createEmptyRouteTree, rootNode, routeSegmentComponentFactory, serializeRouteSegmentTree} from './segments';
-
-export class RouterOutletMap {
- /** @internal */
- _outlets: {[name: string]: RouterOutlet} = {};
- registerOutlet(name: string, outlet: RouterOutlet): void { this._outlets[name] = outlet; }
-}
-
-/**
- * The `Router` is responsible for mapping URLs to components.
- *
- * You can see the state of the router by inspecting the read-only fields `router.urlTree`
- * and `router.routeTree`.
- */
-export class Router {
- private _routeTree: RouteTree;
- private _urlTree: UrlTree;
- private _locationSubscription: any;
- private _changes: EventEmitter = new EventEmitter();
-
- /**
- * @internal
- */
- constructor(
- private _rootComponent: Object, private _rootComponentType: Type,
- private _componentResolver: ComponentResolver, private _urlSerializer: RouterUrlSerializer,
- private _routerOutletMap: RouterOutletMap, private _location: Location) {
- this._routeTree = createEmptyRouteTree(this._rootComponentType);
- this._setUpLocationChangeListener();
- this.navigateByUrl(this._location.path());
- }
-
- /**
- * Returns the current url tree.
- */
- get urlTree(): UrlTree { return this._urlTree; }
-
- /**
- * Returns the current route tree.
- */
- get routeTree(): RouteTree { return this._routeTree; }
-
- /**
- * An observable or url changes from the router.
- */
- get changes(): Observable { return this._changes; }
-
- /**
- * Navigate based on the provided url. This navigation is always absolute.
- *
- * ### Usage
- *
- * ```
- * router.navigateByUrl("/team/33/user/11");
- * ```
- */
- navigateByUrl(url: string): Promise {
- return this._navigate(this._urlSerializer.parse(url));
- }
-
- /**
- * Navigate based on the provided array of commands and a starting point.
- * If no segment is provided, the navigation is absolute.
- *
- * ### Usage
- *
- * ```
- * router.navigate(['team', 33, 'team', '11], segment);
- * ```
- */
- navigate(commands: any[], segment?: RouteSegment): Promise {
- return this._navigate(this.createUrlTree(commands, segment));
- }
-
- /**
- * @internal
- */
- dispose(): void { ObservableWrapper.dispose(this._locationSubscription); }
-
- /**
- * Applies an array of commands to the current url tree and creates
- * a new url tree.
- *
- * When given a segment, applies the given commands starting from the segment.
- * When not given a segment, applies the given command starting from the root.
- *
- * ### Usage
- *
- * ```
- * // create /team/33/user/11
- * router.createUrlTree(['/team', 33, 'user', 11]);
- *
- * // create /team/33;expand=true/user/11
- * router.createUrlTree(['/team', 33, {expand: true}, 'user', 11]);
- *
- * // you can collapse static fragments like this
- * router.createUrlTree(['/team/33/user', userId]);
- *
- * // assuming the current url is `/team/33/user/11` and the segment points to `user/11`
- *
- * // navigate to /team/33/user/11/details
- * router.createUrlTree(['details'], segment);
- *
- * // navigate to /team/33/user/22
- * router.createUrlTree(['../22'], segment);
- *
- * // navigate to /team/44/user/22
- * router.createUrlTree(['../../team/44/user/22'], segment);
- * ```
- */
- createUrlTree(commands: any[], segment?: RouteSegment): UrlTree {
- let s = isPresent(segment) ? segment : this._routeTree.root;
- return link(s, this._routeTree, this.urlTree, commands);
- }
-
- /**
- * Serializes a {@link UrlTree} into a string.
- */
- serializeUrl(url: UrlTree): string { return this._urlSerializer.serialize(url); }
-
- private _setUpLocationChangeListener(): void {
- this._locationSubscription = this._location.subscribe(
- (change) => { this._navigate(this._urlSerializer.parse(change['url']), change['pop']); });
- }
-
- private _navigate(url: UrlTree, preventPushState?: boolean): Promise {
- this._urlTree = url;
- return recognize(this._componentResolver, this._rootComponentType, url, this._routeTree)
- .then(currTree => {
- return new _ActivateSegments(currTree, this._routeTree)
- .activate(this._routerOutletMap, this._rootComponent)
- .then(updated => {
- if (updated) {
- this._routeTree = currTree;
- if (isBlank(preventPushState) || !preventPushState) {
- let path = this._urlSerializer.serialize(this._urlTree);
- if (this._location.isCurrentPathEqualTo(path)) {
- this._location.replaceState(path);
- } else {
- this._location.go(path);
- }
- }
- this._changes.emit(null);
- }
- });
- });
- }
-}
-
-
-class _ActivateSegments {
- private deactivations: Object[][] = [];
- private performMutation: boolean = true;
-
- constructor(private currTree: RouteTree, private prevTree: RouteTree) {}
-
- activate(parentOutletMap: RouterOutletMap, rootComponent: Object): Promise {
- let prevRoot = isPresent(this.prevTree) ? rootNode(this.prevTree) : null;
- let currRoot = rootNode(this.currTree);
-
- return this.canDeactivate(currRoot, prevRoot, parentOutletMap, rootComponent).then(res => {
- this.performMutation = true;
- if (res) {
- this.activateChildSegments(currRoot, prevRoot, parentOutletMap, [rootComponent]);
- }
- return res;
- });
- }
-
- private canDeactivate(
- currRoot: TreeNode, prevRoot: TreeNode,
- outletMap: RouterOutletMap, rootComponent: Object): Promise {
- this.performMutation = false;
- this.activateChildSegments(currRoot, prevRoot, outletMap, [rootComponent]);
-
- let allPaths = PromiseWrapper.all(this.deactivations.map(r => this.checkCanDeactivatePath(r)));
- return allPaths.then((values: boolean[]) => values.filter(v => v).length === values.length);
- }
-
- private checkCanDeactivatePath(path: Object[]): Promise {
- let curr = PromiseWrapper.resolve(true);
- for (let p of ListWrapper.reversed(path)) {
- curr = curr.then(_ => {
- if (hasLifecycleHook('routerCanDeactivate', p)) {
- return (p).routerCanDeactivate(this.prevTree, this.currTree);
- } else {
- return _;
- }
- });
- }
- return curr;
- }
-
- private activateChildSegments(
- currNode: TreeNode, prevNode: TreeNode,
- outletMap: RouterOutletMap, components: Object[]): void {
- let prevChildren = isPresent(prevNode) ? prevNode.children.reduce((m, c) => {
- (m as any /** TODO #9100 */)[c.value.outlet] = c;
- return m;
- }, {}) : {};
-
- currNode.children.forEach(c => {
- this.activateSegments(
- c, (prevChildren as any /** TODO #9100 */)[c.value.outlet], outletMap, components);
- StringMapWrapper.delete(prevChildren, c.value.outlet);
- });
-
- StringMapWrapper.forEach(
- prevChildren, (v: any /** TODO #9100 */, k: any /** TODO #9100 */) =>
- this.deactivateOutlet(outletMap._outlets[k], components));
- }
-
- activateSegments(
- currNode: TreeNode, prevNode: TreeNode,
- parentOutletMap: RouterOutletMap, components: Object[]): void {
- let curr = currNode.value;
- let prev = isPresent(prevNode) ? prevNode.value : null;
- let outlet = this.getOutlet(parentOutletMap, currNode.value);
-
- if (curr === prev) {
- this.activateChildSegments(
- currNode, prevNode, outlet.outletMap, components.concat([outlet.component]));
- } else {
- this.deactivateOutlet(outlet, components);
- if (this.performMutation) {
- let outletMap = new RouterOutletMap();
- let component = this.activateNewSegments(outletMap, curr, prev, outlet);
- this.activateChildSegments(currNode, prevNode, outletMap, components.concat([component]));
- }
- }
- }
-
- private activateNewSegments(
- outletMap: RouterOutletMap, curr: RouteSegment, prev: RouteSegment,
- outlet: RouterOutlet): Object {
- let resolved = ReflectiveInjector.resolve(
- [{provide: RouterOutletMap, useValue: outletMap}, {provide: RouteSegment, useValue: curr}]);
- let ref = outlet.activate(routeSegmentComponentFactory(curr), resolved, outletMap);
- if (hasLifecycleHook('routerOnActivate', ref.instance)) {
- ref.instance.routerOnActivate(curr, prev, this.currTree, this.prevTree);
- }
- return ref.instance;
- }
-
- private getOutlet(outletMap: RouterOutletMap, segment: RouteSegment): RouterOutlet {
- let outlet = outletMap._outlets[segment.outlet];
- if (isBlank(outlet)) {
- if (segment.outlet == DEFAULT_OUTLET_NAME) {
- throw new BaseException(`Cannot find default outlet`);
- } else {
- throw new BaseException(`Cannot find the outlet ${segment.outlet}`);
- }
- }
- return outlet;
- }
-
- private deactivateOutlet(outlet: RouterOutlet, components: Object[]): void {
- if (isPresent(outlet) && outlet.isActivated) {
- StringMapWrapper.forEach(
- outlet.outletMap._outlets, (v: any /** TODO #9100 */, k: any /** TODO #9100 */) =>
- this.deactivateOutlet(v, components));
- if (this.performMutation) {
- outlet.deactivate();
- } else {
- this.deactivations.push(components.concat([outlet.component]));
- }
- }
- }
-}
diff --git a/modules/@angular/router/src/router_providers.ts b/modules/@angular/router/src/router_providers.ts
deleted file mode 100644
index 7a7a36bd22..0000000000
--- a/modules/@angular/router/src/router_providers.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import {ROUTER_PROVIDERS_COMMON} from './router_providers_common';
-
-/**
- * A list of providers. To use the router, you must add this to your application.
- *
- * ```
- * import {Component} from '@angular/core';
- * import {
- * ROUTER_DIRECTIVES,
- * ROUTER_PROVIDERS,
- * Routes
- * } from '@angular/router';
- *
- * @Component({directives: [ROUTER_DIRECTIVES]})
- * @Routes([
- * {...},
- * ])
- * class AppCmp {
- * // ...
- * }
- *
- * bootstrap(AppCmp, [ROUTER_PROVIDERS]);
- * ```
- */
-// TODO: merge with router_providers_common.ts
-export const ROUTER_PROVIDERS: any[] = /*@ts2dart_const*/[ROUTER_PROVIDERS_COMMON];
diff --git a/modules/@angular/router/src/router_providers_common.ts b/modules/@angular/router/src/router_providers_common.ts
deleted file mode 100644
index 814fc972cc..0000000000
--- a/modules/@angular/router/src/router_providers_common.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import {Location, LocationStrategy, PathLocationStrategy} from '@angular/common';
-import {ApplicationRef, BaseException, ComponentResolver} from '@angular/core';
-
-import {Router, RouterOutletMap} from './router';
-import {DefaultRouterUrlSerializer, RouterUrlSerializer} from './router_url_serializer';
-import {RouteSegment} from './segments';
-
-
-/**
- * The Platform agnostic ROUTER PROVIDERS
- */
-export const ROUTER_PROVIDERS_COMMON: any[] = /*@ts2dart_const*/[
- RouterOutletMap,
- /*@ts2dart_Provider*/ {provide: RouterUrlSerializer, useClass: DefaultRouterUrlSerializer},
- /*@ts2dart_Provider*/ {provide: LocationStrategy, useClass: PathLocationStrategy}, Location,
- /*@ts2dart_Provider*/ {
- provide: Router,
- useFactory: routerFactory,
- deps: /*@ts2dart_const*/
- [ApplicationRef, ComponentResolver, RouterUrlSerializer, RouterOutletMap, Location],
- },
- /*@ts2dart_Provider*/ {provide: RouteSegment, useFactory: routeSegmentFactory, deps: [Router]}
-];
-
-export function routerFactory(
- app: ApplicationRef, componentResolver: ComponentResolver, urlSerializer: RouterUrlSerializer,
- routerOutletMap: RouterOutletMap, location: Location): Router {
- if (app.componentTypes.length == 0) {
- throw new BaseException('Bootstrap at least one component before injecting Router.');
- }
- // TODO: vsavkin this should not be null
- let router = new Router(
- null, app.componentTypes[0], componentResolver, urlSerializer, routerOutletMap, location);
- app.registerDisposeListener(() => router.dispose());
- return router;
-}
-
-export function routeSegmentFactory(router: Router): RouteSegment {
- return router.routeTree.root;
-}
diff --git a/modules/@angular/router/src/router_url_serializer.ts b/modules/@angular/router/src/router_url_serializer.ts
deleted file mode 100644
index 710231e167..0000000000
--- a/modules/@angular/router/src/router_url_serializer.ts
+++ /dev/null
@@ -1,201 +0,0 @@
-import {BaseException} from '@angular/core';
-
-import {RegExpWrapper, isBlank, isPresent} from './facade/lang';
-import {Tree, TreeNode, UrlSegment, UrlTree, rootNode} from './segments';
-
-
-/**
- * Defines a way to serialize/deserialize a url tree.
- */
-export abstract class RouterUrlSerializer {
- /**
- * Parse a url into a {@Link UrlTree}
- */
- abstract parse(url: string): UrlTree;
-
- /**
- * Converts a {@Link UrlTree} into a url
- */
- abstract serialize(tree: UrlTree): string;
-}
-
-/**
- * A default implementation of the serialization.
- */
-export class DefaultRouterUrlSerializer extends RouterUrlSerializer {
- parse(url: string): UrlTree {
- let root = new _UrlParser().parse(url);
- return new UrlTree(root);
- }
-
- serialize(tree: UrlTree): string { return _serializeUrlTreeNode(rootNode(tree)); }
-}
-
-function _serializeUrlTreeNode(node: TreeNode): string {
- return `${node.value}${_serializeChildren(node)}`;
-}
-
-function _serializeUrlTreeNodes(nodes: TreeNode[]): string {
- let main = nodes[0].value.toString();
- let auxNodes = nodes.slice(1);
- let aux = auxNodes.length > 0 ? `(${auxNodes.map(_serializeUrlTreeNode).join("//")})` : '';
- let children = _serializeChildren(nodes[0]);
- return `${main}${aux}${children}`;
-}
-
-function _serializeChildren(node: TreeNode): string {
- if (node.children.length > 0) {
- return `/${_serializeUrlTreeNodes(node.children)}`;
- } else {
- return '';
- }
-}
-
-var SEGMENT_RE = RegExpWrapper.create('^[^\\/\\(\\)\\?;=]+');
-function matchUrlSegment(str: string): string {
- var match = RegExpWrapper.firstMatch(SEGMENT_RE, str);
- return isPresent(match) ? match[0] : '';
-}
-var QUERY_PARAM_VALUE_RE = RegExpWrapper.create('^[^\\(\\)\\?;]+');
-function matchUrlQueryParamValue(str: string): string {
- var match = RegExpWrapper.firstMatch(QUERY_PARAM_VALUE_RE, str);
- return isPresent(match) ? match[0] : '';
-}
-
-class _UrlParser {
- private _remaining: string;
-
- peekStartsWith(str: string): boolean { return this._remaining.startsWith(str); }
-
- capture(str: string): void {
- if (!this._remaining.startsWith(str)) {
- throw new BaseException(`Expected "${str}".`);
- }
- this._remaining = this._remaining.substring(str.length);
- }
-
- parse(url: string): TreeNode {
- this._remaining = url;
- if (url == '' || url == '/') {
- return new TreeNode(new UrlSegment('', {}, null), []);
- } else {
- return this.parseRoot();
- }
- }
-
- parseRoot(): TreeNode {
- let segments = this.parseSegments();
- return new TreeNode(new UrlSegment('', {}, null), segments);
- }
-
- parseSegments(outletName: string = null): TreeNode[] {
- if (this._remaining.length == 0) {
- return [];
- }
- if (this.peekStartsWith('/')) {
- this.capture('/');
- }
- var path = matchUrlSegment(this._remaining);
- this.capture(path);
-
-
- if (path.indexOf(':') > -1) {
- let parts = path.split(':');
- outletName = parts[0];
- path = parts[1];
- }
-
- var matrixParams: {[key: string]: any} = {};
- if (this.peekStartsWith(';')) {
- matrixParams = this.parseMatrixParams();
- }
-
- var aux: any[] /** TODO #9100 */ = [];
- if (this.peekStartsWith('(')) {
- aux = this.parseAuxiliaryRoutes();
- }
-
- var children: TreeNode[] = [];
- if (this.peekStartsWith('/') && !this.peekStartsWith('//')) {
- this.capture('/');
- children = this.parseSegments();
- }
-
- let segment = new UrlSegment(path, matrixParams, outletName);
- let node = new TreeNode(segment, children);
- return [node].concat(aux);
- }
-
- parseQueryParams(): {[key: string]: any} {
- var params: {[key: string]: any} = {};
- this.capture('?');
- this.parseQueryParam(params);
- while (this._remaining.length > 0 && this.peekStartsWith('&')) {
- this.capture('&');
- this.parseQueryParam(params);
- }
- return params;
- }
-
- parseMatrixParams(): {[key: string]: any} {
- var params: {[key: string]: any} = {};
- while (this._remaining.length > 0 && this.peekStartsWith(';')) {
- this.capture(';');
- this.parseParam(params);
- }
- return params;
- }
-
- parseParam(params: {[key: string]: any}): void {
- var key = matchUrlSegment(this._remaining);
- if (isBlank(key)) {
- return;
- }
- this.capture(key);
- var value: any = 'true';
- if (this.peekStartsWith('=')) {
- this.capture('=');
- var valueMatch = matchUrlSegment(this._remaining);
- if (isPresent(valueMatch)) {
- value = valueMatch;
- this.capture(value);
- }
- }
-
- params[key] = value;
- }
-
- parseQueryParam(params: {[key: string]: any}): void {
- var key = matchUrlSegment(this._remaining);
- if (isBlank(key)) {
- return;
- }
- this.capture(key);
- var value: any = 'true';
- if (this.peekStartsWith('=')) {
- this.capture('=');
- var valueMatch = matchUrlQueryParamValue(this._remaining);
- if (isPresent(valueMatch)) {
- value = valueMatch;
- this.capture(value);
- }
- }
-
- params[key] = value;
- }
-
- parseAuxiliaryRoutes(): TreeNode[] {
- var segments: any[] /** TODO #9100 */ = [];
- this.capture('(');
-
- while (!this.peekStartsWith(')') && this._remaining.length > 0) {
- segments = segments.concat(this.parseSegments('aux'));
- if (this.peekStartsWith('//')) {
- this.capture('//');
- }
- }
- this.capture(')');
-
- return segments;
- }
-}
diff --git a/modules/@angular/router/src/segments.ts b/modules/@angular/router/src/segments.ts
deleted file mode 100644
index ab4e5b80f1..0000000000
--- a/modules/@angular/router/src/segments.ts
+++ /dev/null
@@ -1,157 +0,0 @@
-import {ComponentFactory, Type} from '@angular/core';
-
-import {DEFAULT_OUTLET_NAME} from './constants';
-import {ListWrapper, StringMapWrapper} from './facade/collection';
-import {NumberWrapper, isBlank, isPresent, stringify} from './facade/lang';
-
-export class Tree {
- /** @internal */
- _root: TreeNode;
-
- constructor(root: TreeNode) { this._root = root; }
-
- get root(): T { return this._root.value; }
-
- parent(t: T): T {
- let p = this.pathFromRoot(t);
- return p.length > 1 ? p[p.length - 2] : null;
- }
-
- children(t: T): T[] {
- let n = _findNode(t, this._root);
- return isPresent(n) ? n.children.map(t => t.value) : null;
- }
-
- firstChild(t: T): T {
- let n = _findNode(t, this._root);
- return isPresent(n) && n.children.length > 0 ? n.children[0].value : null;
- }
-
- pathFromRoot(t: T): T[] { return _findPath(t, this._root, []).map(s => s.value); }
-
- contains(tree: Tree): boolean { return _contains(this._root, tree._root); }
-}
-
-export class UrlTree extends Tree {
- constructor(root: TreeNode) { super(root); }
-}
-
-export class RouteTree extends Tree {
- constructor(root: TreeNode) { super(root); }
-}
-
-export function rootNode(tree: Tree): TreeNode {
- return tree._root;
-}
-
-function _findNode(expected: T, c: TreeNode): TreeNode {
- if (expected === c.value) return c;
- for (let cc of c.children) {
- let r = _findNode(expected, cc);
- if (isPresent(r)) return r;
- }
- return null;
-}
-
-function _findPath(expected: T, c: TreeNode, collected: TreeNode[]): TreeNode[] {
- collected.push(c);
- if (expected === c.value) return collected;
-
- for (let cc of c.children) {
- let r = _findPath(expected, cc, ListWrapper.clone(collected));
- if (isPresent(r)) return r;
- }
-
- return null;
-}
-
-function _contains(tree: TreeNode, subtree: TreeNode): boolean {
- if (tree.value !== subtree.value) return false;
-
- for (let subtreeNode of subtree.children) {
- let s = tree.children.filter(child => child.value === subtreeNode.value);
- if (s.length === 0) return false;
- if (!_contains(s[0], subtreeNode)) return false;
- }
-
- return true;
-}
-
-export class TreeNode {
- constructor(public value: T, public children: TreeNode[]) {}
-}
-
-export class UrlSegment {
- constructor(
- public segment: any, public parameters: {[key: string]: string}, public outlet: string) {}
-
- toString(): string {
- let outletPrefix = isBlank(this.outlet) ? '' : `${this.outlet}:`;
- return `${outletPrefix}${this.segment}${_serializeParams(this.parameters)}`;
- }
-}
-
-function _serializeParams(params: {[key: string]: string}): string {
- let res = '';
- StringMapWrapper.forEach(
- params, (v: any /** TODO #9100 */, k: any /** TODO #9100 */) => res += `;${k}=${v}`);
- return res;
-}
-
-export class RouteSegment {
- /** @internal */
- _type: Type;
-
- /** @internal */
- _componentFactory: ComponentFactory;
-
- constructor(
- public urlSegments: UrlSegment[], public parameters: {[key: string]: string},
- public outlet: string, type: Type, componentFactory: ComponentFactory) {
- this._type = type;
- this._componentFactory = componentFactory;
- }
-
- getParam(param: string): string {
- return isPresent(this.parameters) ? this.parameters[param] : null;
- }
-
- getParamAsNumber(param: string): number {
- return isPresent(this.parameters) ? NumberWrapper.parseFloat(this.parameters[param]) : null;
- }
-
- get type(): Type { return this._type; }
-
- get stringifiedUrlSegments(): string { return this.urlSegments.map(s => s.toString()).join('/'); }
-}
-
-export function createEmptyRouteTree(type: Type): RouteTree {
- let root = new RouteSegment([new UrlSegment('', {}, null)], {}, DEFAULT_OUTLET_NAME, type, null);
- return new RouteTree(new TreeNode(root, []));
-}
-
-export function serializeRouteSegmentTree(tree: RouteTree): string {
- return _serializeRouteSegmentTree(tree._root);
-}
-
-function _serializeRouteSegmentTree(node: TreeNode): string {
- let v = node.value;
- let children = node.children.map(c => _serializeRouteSegmentTree(c)).join(', ');
- return `${v.outlet}:${v.stringifiedUrlSegments}(${stringify(v.type)}) [${children}]`;
-}
-
-export function equalUrlSegments(a: UrlSegment[], b: UrlSegment[]): boolean {
- if (a.length !== b.length) return false;
-
- for (let i = 0; i < a.length; ++i) {
- if (a[i].segment != b[i].segment) return false;
- if (a[i].outlet != b[i].outlet) return false;
- if (!StringMapWrapper.equals(a[i].parameters, b[i].parameters)) return false;
- }
-
- return true;
-}
-
-export function routeSegmentComponentFactory(a: RouteSegment): ComponentFactory {
- return a._componentFactory;
-}
diff --git a/modules/@angular/router/test/integration_spec.ts b/modules/@angular/router/test/integration_spec.ts
deleted file mode 100644
index 25e852b232..0000000000
--- a/modules/@angular/router/test/integration_spec.ts
+++ /dev/null
@@ -1,381 +0,0 @@
-import {Location} from '@angular/common';
-import {SpyLocation} from '@angular/common/testing';
-import {ComponentFixture, TestComponentBuilder} from '@angular/compiler/testing';
-import {Component, ComponentResolver, provide} from '@angular/core';
-import {fakeAsync, tick} from '@angular/core/testing';
-import {AsyncTestCompleter, beforeEach, beforeEachProviders, ddescribe, describe, expect, iit, inject, it, xdescribe, xit} from '@angular/core/testing/testing_internal';
-import {CanDeactivate, DefaultRouterUrlSerializer, OnActivate, ROUTER_DIRECTIVES, Route, RouteSegment, Router, RouterOutletMap, RouterUrlSerializer, Routes} from '@angular/router';
-
-import {getDOM} from '../platform_browser_private';
-import {PromiseWrapper} from '../src/facade/async';
-
-export function main() {
- describe('navigation', () => {
- beforeEachProviders(
- () =>
- [{provide: RouterUrlSerializer, useClass: DefaultRouterUrlSerializer}, RouterOutletMap,
- {provide: Location, useClass: SpyLocation}, {
- provide: RouteSegment,
- useFactory: (r: any /** TODO #9100 */) => r.routeTree.root,
- deps: [Router]
- },
- {
- provide: Router,
- useFactory:
- (resolver: any /** TODO #9100 */, urlParser: any /** TODO #9100 */,
- outletMap: any /** TODO #9100 */, location: any /** TODO #9100 */) =>
- new Router(
- 'RootComponent', RootCmp, resolver, urlParser, outletMap, location),
- deps: [ComponentResolver, RouterUrlSerializer, RouterOutletMap, Location]
- }]);
-
- it('should update location when navigating',
- fakeAsync(inject(
- [Router, TestComponentBuilder, Location],
- (router: any /** TODO #9100 */, tcb: any /** TODO #9100 */,
- location: any /** TODO #9100 */) => {
- let fixture = tcb.createFakeAsync(RootCmp);
-
- router.navigateByUrl('/team/22/user/victor');
- advance(fixture);
- expect(location.path()).toEqual('/team/22/user/victor');
-
- router.navigateByUrl('/team/33/simple');
- advance(fixture);
-
- expect(location.path()).toEqual('/team/33/simple');
- })));
-
- it('should navigate back and forward',
- fakeAsync(inject(
- [Router, TestComponentBuilder, Location],
- (router: any /** TODO #9100 */, tcb: any /** TODO #9100 */,
- location: any /** TODO #9100 */) => {
- let fixture = tcb.createFakeAsync(RootCmp);
-
- router.navigateByUrl('/team/33/simple');
- advance(fixture);
-
- router.navigateByUrl('/team/22/user/victor');
- advance(fixture);
-
- location.back();
- advance(fixture);
- expect(location.path()).toEqual('/team/33/simple');
-
- location.forward();
- advance(fixture);
- expect(location.path()).toEqual('/team/22/user/victor');
- })));
-
- it('should navigate when locations changes',
- fakeAsync(inject(
- [Router, TestComponentBuilder, Location],
- (router: any /** TODO #9100 */, tcb: any /** TODO #9100 */,
- location: any /** TODO #9100 */) => {
- let fixture = tcb.createFakeAsync(RootCmp);
-
- router.navigateByUrl('/team/22/user/victor');
- advance(fixture);
-
- location.simulateHashChange('/team/22/user/fedor');
- advance(fixture);
-
- expect(fixture.debugElement.nativeElement)
- .toHaveText('team 22 { hello fedor, aux: }');
- })));
-
- it('should support nested routes',
- fakeAsync(inject(
- [Router, TestComponentBuilder],
- (router: any /** TODO #9100 */, tcb: any /** TODO #9100 */) => {
- let fixture = tcb.createFakeAsync(RootCmp);
-
- router.navigateByUrl('/team/22/user/victor');
- advance(fixture);
-
- expect(fixture.debugElement.nativeElement)
- .toHaveText('team 22 { hello victor, aux: }');
- })));
-
- it('should support aux routes',
- fakeAsync(inject(
- [Router, TestComponentBuilder],
- (router: any /** TODO #9100 */, tcb: any /** TODO #9100 */) => {
- let fixture = tcb.createFakeAsync(RootCmp);
-
- router.navigateByUrl('/team/22/user/victor(/simple)');
- advance(fixture);
-
- expect(fixture.debugElement.nativeElement)
- .toHaveText('team 22 { hello victor, aux: simple }');
- })));
-
- it('should deactivate outlets',
- fakeAsync(inject(
- [Router, TestComponentBuilder],
- (router: any /** TODO #9100 */, tcb: any /** TODO #9100 */) => {
- let fixture = tcb.createFakeAsync(RootCmp);
-
- router.navigateByUrl('/team/22/user/victor(/simple)');
- advance(fixture);
-
- router.navigateByUrl('/team/22/user/victor');
- advance(fixture);
-
- expect(fixture.debugElement.nativeElement)
- .toHaveText('team 22 { hello victor, aux: }');
- })));
-
- it('should deactivate nested outlets',
- fakeAsync(inject(
- [Router, TestComponentBuilder],
- (router: any /** TODO #9100 */, tcb: any /** TODO #9100 */) => {
- let fixture = tcb.createFakeAsync(RootCmp);
-
- router.navigateByUrl('/team/22/user/victor(/simple)');
- advance(fixture);
-
- router.navigateByUrl('/');
- advance(fixture);
-
- expect(fixture.debugElement.nativeElement).toHaveText('');
- })));
-
- it('should update nested routes when url changes',
- fakeAsync(inject(
- [Router, TestComponentBuilder],
- (router: any /** TODO #9100 */, tcb: any /** TODO #9100 */) => {
- let fixture = tcb.createFakeAsync(RootCmp);
-
- router.navigateByUrl('/team/22/user/victor');
- advance(fixture);
- let team1 = fixture.debugElement.children[1].componentInstance;
-
- router.navigateByUrl('/team/22/user/fedor');
- advance(fixture);
- let team2 = fixture.debugElement.children[1].componentInstance;
-
- expect(team1).toBe(team2);
- expect(fixture.debugElement.nativeElement)
- .toHaveText('team 22 { hello fedor, aux: }');
- })));
-
- it('should not deactivate the route if can deactivate returns false',
- fakeAsync(inject(
- [Router, TestComponentBuilder, Location],
- (router: any /** TODO #9100 */, tcb: any /** TODO #9100 */,
- location: any /** TODO #9100 */) => {
- let fixture = tcb.createFakeAsync(RootCmp);
-
- router.navigateByUrl('/team/22/cannotDeactivate');
- advance(fixture);
-
- router.navigateByUrl('/team/22/user/fedor');
- advance(fixture);
-
- expect(fixture.debugElement.nativeElement)
- .toHaveText('team 22 { cannotDeactivate, aux: }');
-
- expect(location.path()).toEqual('/team/22/cannotDeactivate');
- })));
-
- if (getDOM().supportsDOMEvents()) {
- it('should support absolute router links',
- fakeAsync(inject(
- [Router, TestComponentBuilder],
- (router: any /** TODO #9100 */, tcb: any /** TODO #9100 */) => {
- let fixture = tcb.createFakeAsync(RootCmp);
- advance(fixture);
-
- router.navigateByUrl('/team/22/link');
- advance(fixture);
- expect(fixture.debugElement.nativeElement).toHaveText('team 22 { link, aux: }');
-
- let native = getDOM().querySelector(fixture.debugElement.nativeElement, 'a');
- expect(getDOM().getAttribute(native, 'href')).toEqual('/team/33/simple');
- getDOM().dispatchEvent(native, getDOM().createMouseEvent('click'));
- advance(fixture);
-
- expect(fixture.debugElement.nativeElement).toHaveText('team 33 { simple, aux: }');
- })));
-
- it('should support relative router links',
- fakeAsync(inject(
- [Router, TestComponentBuilder],
- (router: any /** TODO #9100 */, tcb: any /** TODO #9100 */) => {
- let fixture = tcb.createFakeAsync(RootCmp);
- advance(fixture);
-
- router.navigateByUrl('/team/22/relativelink');
- advance(fixture);
- expect(fixture.debugElement.nativeElement)
- .toHaveText('team 22 { relativelink { }, aux: }');
-
- let native = getDOM().querySelector(fixture.debugElement.nativeElement, 'a');
- expect(getDOM().getAttribute(native, 'href'))
- .toEqual('/team/22/relativelink/simple');
- getDOM().dispatchEvent(native, getDOM().createMouseEvent('click'));
- advance(fixture);
-
- expect(fixture.debugElement.nativeElement)
- .toHaveText('team 22 { relativelink { simple }, aux: }');
- })));
-
- it('should set the router-link-active class',
- fakeAsync(inject(
- [Router, TestComponentBuilder],
- (router: any /** TODO #9100 */, tcb: any /** TODO #9100 */) => {
- let fixture = tcb.createFakeAsync(RootCmp);
- advance(fixture);
-
- router.navigateByUrl('/team/22/relativelink');
- advance(fixture);
- expect(fixture.debugElement.nativeElement)
- .toHaveText('team 22 { relativelink { }, aux: }');
- let link = getDOM().querySelector(fixture.debugElement.nativeElement, 'a');
- expect(getDOM().hasClass(link, 'router-link-active')).toEqual(false);
-
- getDOM().dispatchEvent(link, getDOM().createMouseEvent('click'));
- advance(fixture);
-
- expect(getDOM().hasClass(link, 'router-link-active')).toEqual(true);
- })));
-
- it('should update router links when router changes',
- fakeAsync(inject(
- [Router, TestComponentBuilder],
- (router: any /** TODO #9100 */, tcb: any /** TODO #9100 */) => {
- let fixture = tcb.createFakeAsync(RootCmp);
- advance(fixture);
-
- router.navigateByUrl('/team/22/link(simple)');
- advance(fixture);
- expect(fixture.debugElement.nativeElement)
- .toHaveText('team 22 { link, aux: simple }');
-
- let native = getDOM().querySelector(fixture.debugElement.nativeElement, 'a');
- expect(getDOM().getAttribute(native, 'href')).toEqual('/team/33/simple(aux:simple)');
-
- router.navigateByUrl('/team/22/link(simple2)');
- advance(fixture);
-
- expect(getDOM().getAttribute(native, 'href'))
- .toEqual('/team/33/simple(aux:simple2)');
- })));
-
- it('should support top-level link',
- fakeAsync(inject(
- [Router, TestComponentBuilder],
- (router: any /** TODO #9100 */, tcb: any /** TODO #9100 */) => {
- let fixture = tcb.createFakeAsync(LinkCmp);
- advance(fixture);
- expect(fixture.debugElement.nativeElement).toHaveText('link');
- })));
-
- it('should replace state when path is equal to current path',
- fakeAsync(inject(
- [Router, TestComponentBuilder, Location],
- (router: any /** TODO #9100 */, tcb: any /** TODO #9100 */,
- location: any /** TODO #9100 */) => {
- let fixture = tcb.createFakeAsync(RootCmp);
-
- router.navigateByUrl('/team/33/simple');
- advance(fixture);
-
- router.navigateByUrl('/team/22/user/victor');
- advance(fixture);
-
- router.navigateByUrl('/team/22/user/victor');
- advance(fixture);
-
- location.back();
- advance(fixture);
- expect(location.path()).toEqual('/team/33/simple');
- })));
- }
- });
-}
-
-function advance(fixture: ComponentFixture): void {
- tick();
- fixture.detectChanges();
-}
-
-function compileRoot(tcb: TestComponentBuilder): Promise> {
- return tcb.createAsync(RootCmp);
-}
-
-@Component({selector: 'user-cmp', template: `hello {{user}}`})
-class UserCmp implements OnActivate {
- user: string;
- routerOnActivate(
- s: RouteSegment, a?: any /** TODO #9100 */, b?: any /** TODO #9100 */,
- c?: any /** TODO #9100 */) {
- this.user = s.getParam('name');
- }
-}
-
-@Component({selector: 'cannot-deactivate', template: `cannotDeactivate`})
-class CanDeactivateCmp implements CanDeactivate {
- routerCanDeactivate(a?: any /** TODO #9100 */, b?: any /** TODO #9100 */): Promise {
- return PromiseWrapper.resolve(false);
- }
-}
-
-@Component({selector: 'simple-cmp', template: `simple`})
-class SimpleCmp {
-}
-
-@Component({selector: 'simple2-cmp', template: `simple2`})
-class Simple2Cmp {
-}
-
-@Component({
- selector: 'link-cmp',
- template: `link`,
- directives: ROUTER_DIRECTIVES
-})
-class LinkCmp {
-}
-
-@Component({
- selector: 'link-cmp',
- template: `relativelink { }`,
- directives: ROUTER_DIRECTIVES
-})
-@Routes([new Route({path: 'simple', component: SimpleCmp})])
-class RelativeLinkCmp {
-}
-
-@Component({
- selector: 'team-cmp',
- template:
- `team {{id}} { , aux: }`,
- directives: [ROUTER_DIRECTIVES]
-})
-@Routes([
- new Route({path: 'user/:name', component: UserCmp}),
- new Route({path: 'simple', component: SimpleCmp}),
- new Route({path: 'simple2', component: Simple2Cmp}),
- new Route({path: 'link', component: LinkCmp}),
- new Route({path: 'relativelink', component: RelativeLinkCmp}),
- new Route({path: 'cannotDeactivate', component: CanDeactivateCmp})
-])
-class TeamCmp implements OnActivate {
- id: string;
- routerOnActivate(
- s: RouteSegment, a?: any /** TODO #9100 */, b?: any /** TODO #9100 */,
- c?: any /** TODO #9100 */) {
- this.id = s.getParam('id');
- }
-}
-
-@Component({
- selector: 'root-cmp',
- template: ``,
- directives: [ROUTER_DIRECTIVES]
-})
-@Routes([new Route({path: 'team/:id', component: TeamCmp})])
-class RootCmp {
-}
diff --git a/modules/@angular/router/test/link_spec.ts b/modules/@angular/router/test/link_spec.ts
deleted file mode 100644
index bcfe24a13e..0000000000
--- a/modules/@angular/router/test/link_spec.ts
+++ /dev/null
@@ -1,190 +0,0 @@
-import {AsyncTestCompleter, beforeEach, beforeEachProviders, ddescribe, describe, expect, iit, inject, it, xdescribe, xit} from '@angular/core/testing/testing_internal';
-
-import {link} from '../src/link';
-import {DefaultRouterUrlSerializer} from '../src/router_url_serializer';
-import {RouteSegment, RouteTree, TreeNode, UrlSegment, UrlTree} from '../src/segments';
-
-export function main() {
- describe('link', () => {
- let parser = new DefaultRouterUrlSerializer();
-
- it('should return the original tree when given an empty array', () => {
- let p = parser.parse('/');
- let tree = s(p.root);
- let t = link(tree.root, tree, p, []);
- expect(t).toBe(p);
- });
-
- it('should navigate to the root', () => {
- let p = parser.parse('/');
- let tree = s(p.root);
- let t = link(tree.root, tree, p, ['/']);
- expect(parser.serialize(t)).toEqual('');
- });
-
- it('should support nested segments', () => {
- let p = parser.parse('/a/b');
- let tree = s(p.firstChild(p.root));
- let t = link(tree.root, tree, p, ['/one', 11, 'two', 22]);
- expect(parser.serialize(t)).toEqual('/one/11/two/22');
- });
-
- it('should preserve siblings', () => {
- let p = parser.parse('/a/11/b(c)');
- let tree = s(p.root);
- let t = link(tree.root, tree, p, ['/a', 11, 'd']);
- expect(parser.serialize(t)).toEqual('/a/11/d(aux:c)');
- });
-
- it('should update matrix parameters', () => {
- let p = parser.parse('/a;aa=11');
- let tree = s(p.root);
- let t = link(tree.root, tree, p, ['/a', {aa: 22, bb: 33}]);
- expect(parser.serialize(t)).toEqual('/a;aa=22;bb=33');
- });
-
- it('should create matrix parameters', () => {
- let p = parser.parse('/a');
- let tree = s(p.root);
- let t = link(tree.root, tree, p, ['/a', {aa: 22, bb: 33}]);
- expect(parser.serialize(t)).toEqual('/a;aa=22;bb=33');
- });
-
- it('should create matrix parameters together with other segments', () => {
- let p = parser.parse('/a');
- let tree = s(p.root);
- let t = link(tree.root, tree, p, ['/a', '/b', {aa: 22, bb: 33}]);
- expect(parser.serialize(t)).toEqual('/a/b;aa=22;bb=33');
- });
-
- describe('node reuse', () => {
- it('should reuse nodes when path is the same', () => {
- let p = parser.parse('/a/b');
- let tree = s(p.root);
- let t = link(tree.root, tree, p, ['/a/c']);
-
- expect(t.root).toBe(p.root);
- expect(t.firstChild(t.root)).toBe(p.firstChild(p.root));
- expect(t.firstChild(t.firstChild(t.root))).not.toBe(p.firstChild(p.firstChild(p.root)));
- });
-
- it('should create new node when params are the same', () => {
- let p = parser.parse('/a;x=1');
- let tree = s(p.root);
- let t = link(tree.root, tree, p, ['/a', {'x': 1}]);
-
- expect(t.firstChild(t.root)).toBe(p.firstChild(p.root));
- });
-
- it('should create new node when params are different', () => {
- let p = parser.parse('/a;x=1');
- let tree = s(p.root);
- let t = link(tree.root, tree, p, ['/a', {'x': 2}]);
-
- expect(t.firstChild(t.root)).not.toBe(p.firstChild(p.root));
- });
- });
-
- describe('relative navigation', () => {
- it('should work', () => {
- let p = parser.parse('/a(ap)/c(cp)');
- let c = p.firstChild(p.root);
- let tree = s(c);
- let t = link(tree.root, tree, p, ['c2']);
- expect(parser.serialize(t)).toEqual('/a(aux:ap)/c2(aux:cp)');
- });
-
- it('should work when the first command starts with a ./', () => {
- let p = parser.parse('/a(ap)/c(cp)');
- let c = p.firstChild(p.root);
- let tree = s(c);
- let t = link(tree.root, tree, p, ['./c2']);
- expect(parser.serialize(t)).toEqual('/a(aux:ap)/c2(aux:cp)');
- });
-
- it('should work when the first command is ./)', () => {
- let p = parser.parse('/a(ap)/c(cp)');
- let c = p.firstChild(p.root);
- let tree = s(c);
- let t = link(tree.root, tree, p, ['./', 'c2']);
- expect(parser.serialize(t)).toEqual('/a(aux:ap)/c2(aux:cp)');
- });
-
- it('should work when given params', () => {
- let p = parser.parse('/a(ap)/c(cp)');
- let c = p.firstChild(p.root);
- let tree = s(c);
- let t = link(tree.root, tree, p, [{'x': 99}]);
-
- expect(parser.serialize(t)).toEqual('/a(aux:ap)/c;x=99(aux:cp)');
- });
-
- it('should support going to a parent', () => {
- let p = parser.parse('/a(ap)/c(cp)');
- let a = p.firstChild(p.root);
- let tree = s(a);
- let t = link(tree.root, tree, p, ['../a2']);
- expect(parser.serialize(t)).toEqual('/a2(aux:ap)');
- });
-
- it('should support going to a parent (nested case)', () => {
- let p = parser.parse('/a/c');
- let c = p.firstChild(p.firstChild(p.root));
- let tree = s(c);
- let t = link(tree.root, tree, p, ['../c2']);
- expect(parser.serialize(t)).toEqual('/a/c2');
- });
-
- it('should work when given ../', () => {
- let p = parser.parse('/a/c');
- let c = p.firstChild(p.firstChild(p.root));
- let tree = s(c);
- let t = link(tree.root, tree, p, ['../']);
- expect(parser.serialize(t)).toEqual('/a');
- });
-
- it('should navigate to the root', () => {
- let p = parser.parse('/a/c');
- let c = p.firstChild(p.root);
- let tree = s(c);
- let t = link(tree.root, tree, p, ['../']);
- expect(parser.serialize(t)).toEqual('');
- });
-
- it('should support setting matrix params', () => {
- let p = parser.parse('/a(ap)/c(cp)');
- let c = p.firstChild(p.root);
- let tree = s(c);
- let t = link(tree.root, tree, p, ['../', {'x': 5}]);
- expect(parser.serialize(t)).toEqual('/a;x=5(aux:ap)');
- });
-
- it('should throw when too many ..', () => {
- let p = parser.parse('/a(ap)/c(cp)');
- let c = p.firstChild(p.root);
- let tree = s(c);
-
- expect(() => link(tree.root, tree, p, ['../../']))
- .toThrowError('Invalid number of \'../\'');
- });
-
- it('should work when the provided segment doesn\'t have url segments', () => {
- let p = parser.parse('/a(ap)/c(cp)');
- let c = p.firstChild(p.root);
-
- let child = new RouteSegment([], {'one': '1'}, null, null, null);
- let root = new TreeNode(
- new RouteSegment([c], {}, null, null, null), [new TreeNode(child, [])]);
- let tree = new RouteTree(root);
-
- let t = link(child, tree, p, ['./c2']);
- expect(parser.serialize(t)).toEqual('/a(aux:ap)/c2(aux:cp)');
- });
- });
- });
-}
-
-function s(u: UrlSegment): RouteTree {
- let root = new TreeNode(new RouteSegment([u], {}, null, null, null), []);
- return new RouteTree(root);
-}
diff --git a/modules/@angular/router/test/recognize_spec.ts b/modules/@angular/router/test/recognize_spec.ts
deleted file mode 100644
index 8678307992..0000000000
--- a/modules/@angular/router/test/recognize_spec.ts
+++ /dev/null
@@ -1,261 +0,0 @@
-import {Component, ComponentResolver, provide} from '@angular/core';
-import {AsyncTestCompleter, beforeEach, beforeEachProviders, ddescribe, describe, expect, iit, inject, it, xdescribe, xit} from '@angular/core/testing/testing_internal';
-import {Route, Routes} from '@angular/router';
-
-import {DEFAULT_OUTLET_NAME} from '../src/constants';
-import {recognize} from '../src/recognize';
-import {DefaultRouterUrlSerializer} from '../src/router_url_serializer';
-import {RouteTree, UrlSegment, UrlTree, createEmptyRouteTree} from '../src/segments';
-
-export function main() {
- describe('recognize', () => {
- let emptyRouteTree = createEmptyRouteTree(ComponentA);
-
- it('should handle position args',
- inject(
- [AsyncTestCompleter, ComponentResolver],
- (async: AsyncTestCompleter, resolver: any /** TODO #9100 */) => {
- recognize(resolver, ComponentA, tree('b/paramB/c/paramC/d'), emptyRouteTree)
- .then(r => {
- let a = r.root;
- expect(stringifyUrl(a.urlSegments)).toEqual(['']);
- expect(a.type).toBe(ComponentA);
-
- let b = r.firstChild(r.root);
- expect(stringifyUrl(b.urlSegments)).toEqual(['b', 'paramB']);
- expect(b.type).toBe(ComponentB);
-
- let c = r.firstChild(r.firstChild(r.root));
- expect(stringifyUrl(c.urlSegments)).toEqual(['c', 'paramC']);
- expect(c.type).toBe(ComponentC);
-
- let d = r.firstChild(r.firstChild(r.firstChild(r.root)));
- expect(stringifyUrl(d.urlSegments)).toEqual(['d']);
- expect(d.type).toBe(ComponentD);
-
- async.done();
- });
- }));
-
- it('should support empty routes',
- inject(
- [AsyncTestCompleter, ComponentResolver],
- (async: AsyncTestCompleter, resolver: any /** TODO #9100 */) => {
- recognize(resolver, ComponentA, tree('f'), emptyRouteTree).then(r => {
- let a = r.root;
- expect(stringifyUrl(a.urlSegments)).toEqual(['']);
- expect(a.type).toBe(ComponentA);
-
- let f = r.firstChild(r.root);
- expect(stringifyUrl(f.urlSegments)).toEqual(['f']);
- expect(f.type).toBe(ComponentF);
-
- let d = r.firstChild(r.firstChild(r.root));
- expect(stringifyUrl(d.urlSegments)).toEqual([]);
- expect(d.type).toBe(ComponentD);
-
- async.done();
- });
- }));
-
- it('should handle aux routes',
- inject(
- [AsyncTestCompleter, ComponentResolver],
- (async: AsyncTestCompleter, resolver: any /** TODO #9100 */) => {
- recognize(resolver, ComponentA, tree('b/paramB(/d//right:d)'), emptyRouteTree)
- .then(r => {
- let c = r.children(r.root);
- expect(stringifyUrl(c[0].urlSegments)).toEqual(['b', 'paramB']);
- expect(c[0].outlet).toEqual(DEFAULT_OUTLET_NAME);
- expect(c[0].type).toBe(ComponentB);
-
- expect(stringifyUrl(c[1].urlSegments)).toEqual(['d']);
- expect(c[1].outlet).toEqual('aux');
- expect(c[1].type).toBe(ComponentD);
-
- expect(stringifyUrl(c[2].urlSegments)).toEqual(['d']);
- expect(c[2].outlet).toEqual('right');
- expect(c[2].type).toBe(ComponentD);
-
- async.done();
- });
- }));
-
- it('should error when two segments with the same outlet name',
- inject(
- [AsyncTestCompleter, ComponentResolver],
- (async: AsyncTestCompleter, resolver: any /** TODO #9100 */) => {
- recognize(resolver, ComponentA, tree('b/paramB(right:d//right:e)'), emptyRouteTree)
- .catch(e => {
- expect(e.message).toEqual(
- 'Two segments cannot have the same outlet name: \'right:d\' and \'right:e\'.');
- async.done();
- });
- }));
-
- it('should handle nested aux routes',
- inject(
- [AsyncTestCompleter, ComponentResolver],
- (async: AsyncTestCompleter, resolver: any /** TODO #9100 */) => {
- recognize(resolver, ComponentA, tree('b/paramB(/d(right:e))'), emptyRouteTree)
- .then(r => {
- let c = r.children(r.root);
- expect(stringifyUrl(c[0].urlSegments)).toEqual(['b', 'paramB']);
- expect(c[0].outlet).toEqual(DEFAULT_OUTLET_NAME);
- expect(c[0].type).toBe(ComponentB);
-
- expect(stringifyUrl(c[1].urlSegments)).toEqual(['d']);
- expect(c[1].outlet).toEqual('aux');
- expect(c[1].type).toBe(ComponentD);
-
- expect(stringifyUrl(c[2].urlSegments)).toEqual(['e']);
- expect(c[2].outlet).toEqual('right');
- expect(c[2].type).toBe(ComponentE);
-
- async.done();
- });
- }));
-
- it('should handle non top-level aux routes',
- inject(
- [AsyncTestCompleter, ComponentResolver],
- (async: AsyncTestCompleter, resolver: any /** TODO #9100 */) => {
- recognize(resolver, ComponentA, tree('b/paramB/d(e)'), emptyRouteTree).then(r => {
- let c = r.children(r.firstChild(r.root));
- expect(stringifyUrl(c[0].urlSegments)).toEqual(['d']);
- expect(c[0].outlet).toEqual(DEFAULT_OUTLET_NAME);
- expect(c[0].type).toBe(ComponentD);
-
- expect(stringifyUrl(c[1].urlSegments)).toEqual(['e']);
- expect(c[1].outlet).toEqual('aux');
- expect(c[1].type).toBe(ComponentE);
-
- async.done();
- });
- }));
-
- it('should handle matrix parameters',
- inject(
- [AsyncTestCompleter, ComponentResolver],
- (async: AsyncTestCompleter, resolver: any /** TODO #9100 */) => {
- recognize(
- resolver, ComponentA, tree('b/paramB;b1=1;b2=2(/d;d1=1;d2=2)'), emptyRouteTree)
- .then(r => {
- let c = r.children(r.root);
- expect(c[0].parameters).toEqual({'b': 'paramB', 'b1': '1', 'b2': '2'});
- expect(c[1].parameters).toEqual({'d1': '1', 'd2': '2'});
-
- async.done();
- });
- }));
-
- it('should match a wildcard',
- inject(
- [AsyncTestCompleter, ComponentResolver],
- (async: AsyncTestCompleter, resolver: any /** TODO #9100 */) => {
- recognize(resolver, ComponentG, tree('a;aa=1/b;bb=2'), emptyRouteTree).then(r => {
- let c = r.children(r.root);
- expect(c.length).toEqual(1);
- expect(stringifyUrl(c[0].urlSegments)).toEqual([]);
- expect(c[0].parameters).toEqual(null);
-
- async.done();
- });
- }));
-
- it('should error when no matching routes',
- inject(
- [AsyncTestCompleter, ComponentResolver],
- (async: AsyncTestCompleter, resolver: any /** TODO #9100 */) => {
- recognize(resolver, ComponentA, tree('invalid'), emptyRouteTree).catch(e => {
- expect(e.message).toContain('Cannot match any routes');
- async.done();
- });
- }));
-
- it('should handle no matching routes (too short)',
- inject(
- [AsyncTestCompleter, ComponentResolver],
- (async: AsyncTestCompleter, resolver: any /** TODO #9100 */) => {
- recognize(resolver, ComponentA, tree('b'), emptyRouteTree).catch(e => {
- expect(e.message).toContain('Cannot match any routes');
- async.done();
- });
- }));
-
- it('should error when a component doesn\'t have @Routes',
- inject(
- [AsyncTestCompleter, ComponentResolver],
- (async: AsyncTestCompleter, resolver: any /** TODO #9100 */) => {
- recognize(resolver, ComponentA, tree('d/invalid'), emptyRouteTree).catch(e => {
- expect(e.message).toEqual(
- 'Component \'ComponentD\' does not have route configuration');
- async.done();
- });
- }));
-
- it('should reuse existing segments',
- inject(
- [AsyncTestCompleter, ComponentResolver],
- (async: AsyncTestCompleter, resolver: any /** TODO #9100 */) => {
- recognize(resolver, ComponentA, tree('/b/1/d'), emptyRouteTree).then(t1 => {
- recognize(resolver, ComponentA, tree('/b/1/e'), t1).then(t2 => {
- expect(t1.root).toBe(t2.root);
- expect(t1.firstChild(t1.root)).toBe(t2.firstChild(t2.root));
- expect(t1.firstChild(t1.firstChild(t1.root)))
- .not.toBe(t2.firstChild(t2.firstChild(t2.root)));
-
- async.done();
- });
- });
- }));
- });
-}
-
-function tree(url: string): UrlTree {
- return new DefaultRouterUrlSerializer().parse(url);
-}
-
-function stringifyUrl(segments: UrlSegment[]): string[] {
- return segments.map(s => s.segment);
-}
-
-@Component({selector: 'd', template: 't'})
-class ComponentD {
-}
-
-@Component({selector: 'e', template: 't'})
-class ComponentE {
-}
-
-@Component({selector: 'f', template: 't'})
-@Routes([new Route({path: '/', component: ComponentD})])
-class ComponentF {
-}
-
-@Component({selector: 'c', template: 't'})
-@Routes([new Route({path: 'd', component: ComponentD})])
-class ComponentC {
-}
-
-@Component({selector: 'b', template: 't'})
-@Routes([
- new Route({path: 'd', component: ComponentD}), new Route({path: 'e', component: ComponentE}),
- new Route({path: 'c/:c', component: ComponentC})
-])
-class ComponentB {
-}
-
-@Component({selector: 'g', template: 't'})
-@Routes(
- [new Route({path: 'd', component: ComponentD}), new Route({path: '*', component: ComponentE})])
-class ComponentG {
-}
-
-@Component({selector: 'a', template: 't'})
-@Routes([
- new Route({path: 'b/:b', component: ComponentB}), new Route({path: 'd', component: ComponentD}),
- new Route({path: 'e', component: ComponentE}), new Route({path: 'f', component: ComponentF})
-])
-class ComponentA {
-}
diff --git a/modules/@angular/router/test/router_link_spec.ts b/modules/@angular/router/test/router_link_spec.ts
deleted file mode 100644
index 58c5cf2886..0000000000
--- a/modules/@angular/router/test/router_link_spec.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-import {Location, LocationStrategy} from '@angular/common';
-import {MockLocationStrategy, SpyLocation} from '@angular/common/testing';
-import {Component, ComponentResolver, provide} from '@angular/core';
-import {AsyncTestCompleter, beforeEach, beforeEachProviders, ddescribe, describe, expect, iit, inject, it, xdescribe, xit} from '@angular/core/testing/testing_internal';
-import {CanDeactivate, DefaultRouterUrlSerializer, OnActivate, ROUTER_DIRECTIVES, Route, RouteSegment, Router, RouterOutletMap, RouterUrlSerializer, Routes} from '@angular/router';
-
-import {RouterLink} from '../src/directives/router_link';
-
-export function main() {
- describe('RouterLink', () => {
- beforeEachProviders(
- () =>
- [{provide: RouterUrlSerializer, useClass: DefaultRouterUrlSerializer}, RouterOutletMap,
- {provide: Location, useClass: SpyLocation},
- {provide: LocationStrategy, useClass: MockLocationStrategy}, {
- provide: Router,
- useFactory:
- (resolver: any /** TODO #9100 */, urlParser: any /** TODO #9100 */,
- outletMap: any /** TODO #9100 */, location: any /** TODO #9100 */) =>
- new Router(
- 'RootComponent', RootCmp, resolver, urlParser, outletMap, location),
- deps: [ComponentResolver, RouterUrlSerializer, RouterOutletMap, Location]
- }]);
-
- describe('routerLink=', () => {
- it('should accept an array of commands',
- inject(
- [Router, LocationStrategy],
- (router: any /** TODO #9100 */, locationStrategy: any /** TODO #9100 */) => {
- let link = new RouterLink(null, router, locationStrategy);
- link.routerLink = ['/one', 11];
- expect(link.href).toEqual('/one/11');
- }));
-
- it('should accept a single command',
- inject(
- [Router, LocationStrategy],
- (router: any /** TODO #9100 */, locationStrategy: any /** TODO #9100 */) => {
- let link = new RouterLink(null, router, locationStrategy);
- link.routerLink = '/one/11';
- expect(link.href).toEqual('/one/11');
- }));
- });
- });
-}
-
-@Component({template: ''})
-class RootCmp {
-}
diff --git a/modules/@angular/router/test/router_url_serializer_spec.ts b/modules/@angular/router/test/router_url_serializer_spec.ts
deleted file mode 100644
index fe1cf36278..0000000000
--- a/modules/@angular/router/test/router_url_serializer_spec.ts
+++ /dev/null
@@ -1,92 +0,0 @@
-import {AsyncTestCompleter, beforeEach, beforeEachProviders, ddescribe, describe, expect, iit, inject, it, xdescribe, xit} from '@angular/core/testing/testing_internal';
-
-import {DefaultRouterUrlSerializer} from '../src/router_url_serializer';
-import {UrlSegment} from '../src/segments';
-
-export function main() {
- describe('url serializer', () => {
- let url = new DefaultRouterUrlSerializer();
-
- it('should parse the root url', () => {
- let tree = url.parse('/');
- expectSegment(tree.root, '');
- expect(url.serialize(tree)).toEqual('');
- });
-
- it('should parse non-empty urls', () => {
- let tree = url.parse('one/two');
- expectSegment(tree.firstChild(tree.root), 'one');
- expectSegment(tree.firstChild(tree.firstChild(tree.root)), 'two');
- expect(url.serialize(tree)).toEqual('/one/two');
- });
-
- it('should parse multiple aux routes', () => {
- let tree = url.parse('/one/two(/three//right:four)/five');
- let c = tree.children(tree.firstChild(tree.root));
-
- expectSegment(c[0], 'two');
- expectSegment(c[1], 'aux:three');
- expectSegment(c[2], 'right:four');
-
- expectSegment(tree.firstChild(c[0]), 'five');
-
- expect(url.serialize(tree)).toEqual('/one/two(aux:three//right:four)/five');
- });
-
- it('should parse aux routes that have aux routes', () => {
- let tree = url.parse('/one(/two(/three))');
- let c = tree.children(tree.root);
-
- expectSegment(c[0], 'one');
- expectSegment(c[1], 'aux:two');
- expectSegment(c[2], 'aux:three');
-
- expect(url.serialize(tree)).toEqual('/one(aux:two//aux:three)');
- });
-
- it('should parse aux routes that have children', () => {
- let tree = url.parse('/one(/two/three)');
- let c = tree.children(tree.root);
-
- expectSegment(c[0], 'one');
- expectSegment(c[1], 'aux:two');
- expectSegment(tree.firstChild(c[1]), 'three');
-
- expect(url.serialize(tree)).toEqual('/one(aux:two/three)');
- });
-
- it('should parse an empty aux route definition', () => {
- let tree = url.parse('/one()');
- let c = tree.children(tree.root);
-
- expectSegment(c[0], 'one');
- expect(tree.children(c[0]).length).toEqual(0);
-
- expect(url.serialize(tree)).toEqual('/one');
- });
-
- it('should parse key-value matrix params', () => {
- let tree = url.parse('/one;a=11a;b=11b(/two;c=22//right:three;d=33)');
- let c = tree.children(tree.root);
-
- expectSegment(c[0], 'one;a=11a;b=11b');
- expectSegment(c[1], 'aux:two;c=22');
- expectSegment(c[2], 'right:three;d=33');
-
- expect(url.serialize(tree)).toEqual('/one;a=11a;b=11b(aux:two;c=22//right:three;d=33)');
- });
-
- it('should parse key only matrix params', () => {
- let tree = url.parse('/one;a');
-
- let c = tree.firstChild(tree.root);
- expectSegment(c, 'one;a=true');
-
- expect(url.serialize(tree)).toEqual('/one;a=true');
- });
- });
-}
-
-function expectSegment(segment: UrlSegment, expected: string): void {
- expect(segment.toString()).toEqual(expected);
-}
diff --git a/modules/@angular/router/test/tree_spec.ts b/modules/@angular/router/test/tree_spec.ts
deleted file mode 100644
index d70dbf7486..0000000000
--- a/modules/@angular/router/test/tree_spec.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import {AsyncTestCompleter, beforeEach, beforeEachProviders, ddescribe, describe, expect, iit, inject, it, xdescribe, xit} from '@angular/core/testing/testing_internal';
-
-import {Tree, TreeNode} from '../src/segments';
-
-export function main() {
- describe('tree', () => {
- it('should return the root of the tree', () => {
- let t = new Tree(new TreeNode(1, []));
- expect(t.root).toEqual(1);
- });
-
- it('should return the parent of a node', () => {
- let t = new Tree(new TreeNode(1, [new TreeNode(2, [])]));
- expect(t.parent(1)).toEqual(null);
- expect(t.parent(2)).toEqual(1);
- });
-
- it('should return the children of a node', () => {
- let t = new Tree(new TreeNode(1, [new TreeNode(2, [])]));
- expect(t.children(1)).toEqual([2]);
- expect(t.children(2)).toEqual([]);
- });
-
- it('should return the first child of a node', () => {
- let t = new Tree(new TreeNode(1, [new TreeNode(2, [])]));
- expect(t.firstChild(1)).toEqual(2);
- expect(t.firstChild(2)).toEqual(null);
- });
-
- it('should return the path to the root', () => {
- let t = new Tree(new TreeNode(1, [new TreeNode(2, [])]));
- expect(t.pathFromRoot(2)).toEqual([1, 2]);
- });
-
- describe('contains', () => {
- it('should work', () => {
- let tree = new Tree(
- new TreeNode(1, [new TreeNode(2, []), new TreeNode(3, [])]));
- let subtree1 = new Tree(new TreeNode(1, []));
- let subtree2 = new Tree(new TreeNode(1, [new TreeNode(2, [])]));
- let subtree3 = new Tree(new TreeNode(1, [new TreeNode(3, [])]));
- let notSubtree1 = new Tree(new TreeNode(1, [new TreeNode(4, [])]));
- let notSubtree2 = new Tree(
- new TreeNode(1, [new TreeNode(2, [new TreeNode(4, [])])]));
-
- expect(tree.contains(subtree1)).toEqual(true);
- expect(tree.contains(subtree2)).toEqual(true);
- expect(tree.contains(subtree3)).toEqual(true);
- expect(tree.contains(notSubtree1)).toEqual(false);
- expect(tree.contains(notSubtree2)).toEqual(false);
- });
- });
- });
-}
diff --git a/modules/@angular/router/testing.ts b/modules/@angular/router/testing.ts
deleted file mode 100644
index b3d36aad79..0000000000
--- a/modules/@angular/router/testing.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './testing/router_testing_providers';
diff --git a/modules/@angular/router/testing/router_testing_providers.ts b/modules/@angular/router/testing/router_testing_providers.ts
deleted file mode 100644
index 8221fc2160..0000000000
--- a/modules/@angular/router/testing/router_testing_providers.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import {Location} from '@angular/common';
-import {SpyLocation} from '@angular/common/testing';
-import {Component, ComponentResolver} from '@angular/core';
-
-import {Router, RouterOutletMap} from '../src/router';
-import {DefaultRouterUrlSerializer, RouterUrlSerializer} from '../src/router_url_serializer';
-import {RouteSegment} from '../src/segments';
-
-@Component({selector: 'fake-app-root-comp', template: ``})
-class FakeAppRootCmp {
-}
-
-function routerFactory(
- componentResolver: ComponentResolver, urlSerializer: RouterUrlSerializer,
- routerOutletMap: RouterOutletMap, location: Location): Router {
- return new Router(
- null, FakeAppRootCmp, componentResolver, urlSerializer, routerOutletMap, location);
-}
-
-export const ROUTER_FAKE_PROVIDERS: any[] = /*@ts2dart_const*/[
- RouterOutletMap,
- /* @ts2dart_Provider */ {provide: Location, useClass: SpyLocation},
- /* @ts2dart_Provider */ {provide: RouterUrlSerializer, useClass: DefaultRouterUrlSerializer},
- /* @ts2dart_Provider */ {
- provide: Router,
- useFactory: routerFactory,
- deps: /*@ts2dart_const*/
- [ComponentResolver, RouterUrlSerializer, RouterOutletMap, Location]
- },
- /*@ts2dart_Provider*/ {
- provide: RouteSegment,
- useFactory: (r: any /** TODO #9100 */) => r.routeTree.root,
- deps: [Router]
- }
-];
diff --git a/modules/@angular/router/tsconfig-es2015.json b/modules/@angular/router/tsconfig-es2015.json
deleted file mode 100644
index de33e1360a..0000000000
--- a/modules/@angular/router/tsconfig-es2015.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "compilerOptions": {
- "baseUrl": ".",
- "declaration": true,
- "stripInternal": true,
- "experimentalDecorators": true,
- "module": "es2015",
- "moduleResolution": "node",
- "outDir": "../../../dist/packages-dist/router/esm",
- "paths": {
- "@angular/core": ["../../../dist/packages-dist/core/"],
- "@angular/common": ["../../../dist/packages-dist/common/"],
- "@angular/common/testing": ["../../../dist/packages-dist/common/testing/"],
- "@angular/platform-browser": ["../../../dist/packages-dist/platform-browser/"]
- },
- "rootDir": ".",
- "sourceMap": true,
- "inlineSources": true,
- "target": "es2015"
- },
- "files": [
- "index.ts",
- "testing.ts",
- "../../../node_modules/zone.js/dist/zone.js.d.ts"
- ]
-}
diff --git a/modules/@angular/router/tsconfig-es5.json b/modules/@angular/router/tsconfig-es5.json
deleted file mode 100644
index 9c201f6c16..0000000000
--- a/modules/@angular/router/tsconfig-es5.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "compilerOptions": {
- "baseUrl": ".",
- "declaration": true,
- "stripInternal": true,
- "experimentalDecorators": true,
- "module": "commonjs",
- "moduleResolution": "node",
- "outDir": "../../../dist/packages-dist/router/",
- "paths": {
- "@angular/core": ["../../../dist/packages-dist/core/"],
- "@angular/common": ["../../../dist/packages-dist/common/"],
- "@angular/common/testing": ["../../../dist/packages-dist/common/testing/"],
- "@angular/platform-browser": ["../../../dist/packages-dist/platform-browser/"]
- },
- "rootDir": ".",
- "sourceMap": true,
- "inlineSources": true,
- "lib": ["es6", "dom"],
- "target": "es5"
- },
- "files": [
- "index.ts",
- "testing.ts",
- "../../../node_modules/zone.js/dist/zone.js.d.ts"
- ]
-}
diff --git a/modules/playground/e2e_test/alt_routing/routing_spec.dart b/modules/playground/e2e_test/alt_routing/routing_spec.dart
deleted file mode 100644
index 8c1c7fd661..0000000000
--- a/modules/playground/e2e_test/alt_routing/routing_spec.dart
+++ /dev/null
@@ -1,3 +0,0 @@
-library playground.e2e_test.routing.routing_spec;
-
-main() {}
diff --git a/modules/playground/e2e_test/alt_routing/routing_spec.ts b/modules/playground/e2e_test/alt_routing/routing_spec.ts
deleted file mode 100644
index a0f4234484..0000000000
--- a/modules/playground/e2e_test/alt_routing/routing_spec.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-import {verifyNoBrowserErrors} from '@angular/platform-browser/testing_e2e';
-
-function waitForElement(selector: any /** TODO #9100 */) {
- var EC = (protractor).ExpectedConditions;
- // Waits for the element with id 'abc' to be present on the dom.
- browser.wait(EC.presenceOf($(selector)), 20000);
-}
-
-describe('alt-routing inbox-app', () => {
- var URL = 'all/playground/src/alt_routing/';
-
- afterEach(verifyNoBrowserErrors);
-
- describe('index view', () => {
- it('should list out the current collection of items', () => {
- browser.get(URL);
- waitForElement('.inbox-item-record');
- expect(element.all(by.css('.inbox-item-record')).count()).toEqual(200);
- });
-
- it('should build a link which points to the detail page', () => {
- browser.get(URL);
- waitForElement('#item-15');
- expect(element(by.css('#item-15')).getAttribute('href')).toMatch(/\/detail\/15$/);
- element(by.css('#item-15')).click();
- waitForElement('#record-id');
- expect(browser.getCurrentUrl()).toMatch(/\/detail\/15$/);
- });
- });
-
-
- describe('drafts view', () => {
- it('should navigate to the drafts view when the drafts link is clicked', () => {
- browser.get(URL);
- waitForElement('.inbox-item-record');
- element(by.linkText('Drafts')).click();
- waitForElement('.page-title');
- expect(element(by.css('.page-title')).getText()).toEqual('Drafts');
- });
-
- it('should navigate to email details', () => {
- browser.get(URL);
- element(by.linkText('Drafts')).click();
- waitForElement('.inbox-item-record');
- expect(element.all(by.css('.inbox-item-record')).count()).toEqual(2);
- expect(element(by.css('#item-201')).getAttribute('href')).toMatch(/\/detail\/201$/);
- element(by.css('#item-201')).click();
- waitForElement('#record-id');
- expect(browser.getCurrentUrl()).toMatch(/\/detail\/201$/);
- });
- });
-
-
- describe('detail view', () => {
- it('should navigate to the detail view when an email is clicked', () => {
- browser.get(URL);
- waitForElement('#item-10');
- element(by.css('#item-10')).click();
- waitForElement('#record-id');
- var recordId = element(by.css("#record-id"));
- browser.wait(protractor.until.elementTextIs(recordId, "ID: 10"), 5000);
- expect(recordId.getText()).toEqual('ID: 10');
- });
-
- it('should navigate back to the email inbox page when the back button is clicked', () => {
- browser.get(URL);
- waitForElement('#item-10');
- element(by.css('#item-10')).click();
- waitForElement('.back-button');
- element(by.css('.back-button')).click();
- expect(browser.getCurrentUrl()).toMatch(/\/$/);
- });
-
- it('should navigate back to index and sort the page items based on the provided querystring param',
- () => {
- browser.get(URL);
- waitForElement('#item-10');
- element(by.css('#item-10')).click();
- waitForElement('.sort-button');
- element(by.css('.sort-button')).click();
- expect(browser.getCurrentUrl()).toContain(';sort=date');
- waitForElement('.inbox-item-record');
- expect(element(by.css(".inbox-item-record > a")).getAttribute("id")).toEqual("item-137");
- });
- })
-});
diff --git a/modules/playground/pubspec.yaml b/modules/playground/pubspec.yaml
index c4ab4ee202..deb98d894f 100644
--- a/modules/playground/pubspec.yaml
+++ b/modules/playground/pubspec.yaml
@@ -30,7 +30,6 @@ transformers:
- web/src/person_management/index.dart
- web/src/relative_assets/index.dart
- web/src/routing/index.dart
- - web/src/alt_routing/index.dart
- web/src/sourcemap/index.dart
- web/src/svg/index.dart
- web/src/template_driven_forms/index.dart
diff --git a/modules/playground/src/alt_routing/app/data.ts b/modules/playground/src/alt_routing/app/data.ts
deleted file mode 100644
index a984dd6ea3..0000000000
--- a/modules/playground/src/alt_routing/app/data.ts
+++ /dev/null
@@ -1,2116 +0,0 @@
-export var data = [
- {
- "id": "1",
- "first-name": "Montana",
- "last-name": "Prosacco",
- "email": "jairo.bergnaum@bergnaum.org",
- "date": "1991-10-12 15:12:46 -0700",
- "content":
- "Et quisquam veniam voluptatem enim temporibus itaque. Ipsam voluptatem et. Occaecati rerum animi.",
- "subject": "Quidem quo ipsam architecto soluta numquam et"
- },
-
- {
- "id": "2",
- "first-name": "Frances",
- "last-name": "Schaden",
- "email": "pierre_tromp@adams.com",
- "date": "2001-05-06 08:22:33 -0700",
- "content": "Porro ea tempore numquam deserunt voluptas qui. Est quis suscipit.",
- "subject": "Voluptatibus dolore porro animi"
- },
-
- {
- "id": "3",
- "first-name": "Jayne",
- "last-name": "Kreiger",
- "email": "breanne@howell.net",
- "date": "2001-05-22 14:28:41 -0700",
- "content": "Voluptas et est laborum non ullam.",
- "subject": "Ratione ut illum fuga non"
- },
-
- {
- "id": "4",
- "first-name": "Hester",
- "last-name": "Wyman",
- "email": "fausto@steuber.com",
- "date": "1996-07-20 02:13:12 -0700",
- "content":
- "Iusto enim laborum. Autem sed quas laborum deserunt quibusdam dolorem. Laboriosam nesciunt debitis possimus ut aut quae.",
- "subject": "Ea quas et quia beatae dolores"
- },
-
- {
- "id": "5",
- "first-name": "Alexandre",
- "last-name": "Dietrich",
- "email": "carmella_mante@moendibbert.biz",
- "date": "2006-03-20 23:44:38 -0800",
- "content": "Voluptates voluptatem dolorem non quod dolores.",
- "subject": "Nostrum ad modi non consequatur repellendus et harum"
- },
-
- {
- "id": "6",
- "first-name": "Ena",
- "last-name": "Green",
- "email": "jan_koepp@glover.name",
- "date": "1988-03-21 02:00:36 -0800",
- "content":
- "Nam inventore voluptatum eaque ratione nisi nesciunt. Qui ex qui omnis aliquid. Dolorem ipsum expedita.",
- "subject": "Qui sint vero accusamus quam id vitae quis quia"
- },
-
- {
- "id": "7",
- "first-name": "Rebecca",
- "last-name": "Walsh",
- "email": "marta@mueller.biz",
- "date": "1974-05-09 02:40:20 -0700",
- "content":
- "Voluptas vel ut. Rerum vero repellat accusantium earum. Ea atque exercitationem expedita id dolores dolorem.",
- "subject": "Suscipit et inventore exercitationem ut voluptatum esse vero"
- },
-
- {
- "id": "8",
- "first-name": "Jed",
- "last-name": "Rogahn",
- "email": "talia_crist@mertzfadel.info",
- "date": "2006-10-17 01:28:46 -0700",
- "content": "Cupiditate nam blanditiis.",
- "subject": "Dolore nulla qui sequi ut enim sed"
- },
-
- {
- "id": "9",
- "first-name": "Fabiola",
- "last-name": "Olson",
- "email": "henderson@casper.org",
- "date": "2008-02-29 11:46:44 -0800",
- "content":
- "Similique nesciunt omnis beatae omnis pariatur quas. Voluptatem eum consequatur id impedit fugit dignissimos ut.",
- "subject": "Sit quasi accusamus aut et eum"
- },
-
- {
- "id": "10",
- "first-name": "Alex",
- "last-name": "Turcotte",
- "email": "mya@stokes.org",
- "date": "1974-03-29 12:02:53 -0700",
- "content":
- "Ut pariatur porro maiores. Saepe soluta aspernatur est sed suscipit. Excepturi incidunt aut atque nostrum cum non.",
- "subject": "Rerum dolore sunt veniam provident"
- },
-
- {
- "id": "11",
- "first-name": "Jerome",
- "last-name": "Greenholt",
- "email": "jazmyne.dibbert@abshire.org",
- "date": "1997-01-12 02:48:08 -0800",
- "content": "Natus error id.",
- "subject": "Rerum nemo aperiam veritatis veniam"
- },
-
- {
- "id": "12",
- "first-name": "Antwan",
- "last-name": "Kreiger",
- "email": "delilah@dibbert.name",
- "date": "1971-05-08 10:45:01 -0700",
- "content":
- "Perspiciatis sed quo. Eum dignissimos quia expedita dolorem illum minima enim. Fugiat ducimus nostrum quia reiciendis autem nisi placeat.",
- "subject": "Esse ipsum pariatur voluptatum rerum labore id odit"
- },
-
- {
- "id": "13",
- "first-name": "Kyleigh",
- "last-name": "Rogahn",
- "email": "ralph_ledner@bartolettifay.info",
- "date": "2013-11-28 16:10:15 -0800",
- "content": "Molestias repudiandae dicta vel.",
- "subject": "Facilis occaecati pariatur qui incidunt reprehenderit sunt"
- },
-
- {
- "id": "14",
- "first-name": "Henriette",
- "last-name": "Gottlieb",
- "email": "adeline.rowe@lubowitz.net",
- "date": "1983-02-11 06:45:49 -0800",
- "content": "Eveniet ut voluptas eos ut rerum voluptatum.",
- "subject": "Natus voluptas voluptatem alias"
- },
-
- {
- "id": "15",
- "first-name": "Jacklyn",
- "last-name": "White",
- "email": "milton_keebler@braun.biz",
- "date": "1992-01-07 12:27:59 -0800",
- "content": "Reiciendis et aperiam. Doloremque totam repudiandae velit fuga fugiat.",
- "subject": "Nulla est magnam ducimus porro commodi"
- },
-
- {
- "id": "16",
- "first-name": "Charlotte",
- "last-name": "Ziemann",
- "email": "brett@purdymills.com",
- "date": "1972-06-06 02:42:50 -0700",
- "content":
- "Voluptatem corporis tempore. Consectetur fugit perspiciatis libero dolore consequatur asperiores. Voluptates ea accusamus.",
- "subject": "Ea adipisci reiciendis excepturi suscipit necessitatibus ut sed"
- },
-
- {
- "id": "17",
- "first-name": "Giovanny",
- "last-name": "Runolfsdottir",
- "email": "dustin.sanford@rippin.com",
- "date": "1987-04-14 19:29:11 -0700",
- "content":
- "Dolor consequuntur sed aspernatur qui. Sit cumque id animi ut sed id. Asperiores voluptatem similique voluptas.",
- "subject": "Id ut voluptatum culpa molestiae quo"
- },
-
- {
- "id": "18",
- "first-name": "Savion",
- "last-name": "McCullough",
- "email": "don@gorczanysimonis.name",
- "date": "1974-01-18 14:40:40 -0700",
- "content":
- "Autem voluptatem dignissimos vel debitis ipsum voluptatem consequuntur. Voluptatum et saepe.",
- "subject": "Ipsa similique quo nostrum"
- },
-
- {
- "id": "19",
- "first-name": "Robbie",
- "last-name": "Kohler",
- "email": "haley@waters.biz",
- "date": "2002-09-28 08:35:10 -0700",
- "content":
- "Quo ut accusantium similique necessitatibus. Sunt impedit commodi ut et odit voluptatibus error.",
- "subject": "Voluptate eum quo error"
- },
-
- {
- "id": "20",
- "first-name": "Eulalia",
- "last-name": "Effertz",
- "email": "rodrigo_parisian@bergecartwright.net",
- "date": "2006-07-29 21:47:56 -0700",
- "content":
- "Eum repudiandae rem aliquid dolorum suscipit vel. Autem vel voluptas et iure magni.",
- "subject": "Est dolorum modi et error consequuntur qui"
- },
-
- {
- "id": "21",
- "first-name": "Gregoria",
- "last-name": "Boehm",
- "email": "miles@jerde.org",
- "date": "1997-04-11 19:49:38 -0700",
- "content":
- "Qui necessitatibus veniam. Maiores impedit in natus aspernatur adipisci. Ad sapiente iste.",
- "subject": "Doloribus ipsum a eius voluptatem nulla"
- },
-
- {
- "id": "22",
- "first-name": "Berry",
- "last-name": "Collier",
- "email": "larry_rath@rathbernier.info",
- "date": "1981-06-26 05:26:47 -0700",
- "content":
- "Numquam rerum quia similique enim sequi eos inventore. Numquam inventore aliquam commodi neque maiores. Hic et vel aut velit corrupti.",
- "subject": "Optio ab delectus pariatur vel tempore"
- },
-
- {
- "id": "23",
- "first-name": "Crawford",
- "last-name": "Ryan",
- "email": "cindy_ziemann@harvey.org",
- "date": "1997-06-12 07:56:32 -0700",
- "content": "Odio ea nostrum molestiae. Doloribus ducimus occaecati facilis pariatur ut est.",
- "subject": "Quo fugit at totam voluptate est"
- },
-
- {
- "id": "24",
- "first-name": "Kelsie",
- "last-name": "Stokes",
- "email": "jackson_ferry@connelly.name",
- "date": "1986-07-30 21:39:50 -0700",
- "content":
- "Amet voluptatem ea nesciunt sunt. Quidem pariatur sit. Minus aliquam itaque laudantium in quibusdam laboriosam.",
- "subject": "Labore voluptas dolor repellendus accusantium tempora"
- },
-
- {
- "id": "25",
- "first-name": "Josefa",
- "last-name": "Predovic",
- "email": "moises@sauer.info",
- "date": "1976-04-09 22:38:31 -0800",
- "content":
- "Aliquam consectetur et non soluta. Quia dolore molestiae facilis eos nihil vel. Quidem eos et.",
- "subject": "Qui architecto inventore alias non aut dolorum porro"
- },
-
- {
- "id": "26",
- "first-name": "Toby",
- "last-name": "Wehner",
- "email": "janet@mohr.org",
- "date": "2003-05-08 07:44:26 -0700",
- "content": "Suscipit cumque alias debitis necessitatibus et qui.",
- "subject": "Possimus laudantium exercitationem ut deleniti similique"
- },
-
- {
- "id": "27",
- "first-name": "Keira",
- "last-name": "Stamm",
- "email": "karlie@witting.info",
- "date": "2010-11-11 16:17:29 -0800",
- "content":
- "Rerum cum at autem repellat quod nihil. Quasi voluptates minus autem accusantium debitis cumque qui.",
- "subject": "Nostrum repudiandae voluptatum adipisci ut error sunt et sint"
- },
-
- {
- "id": "28",
- "first-name": "Clark",
- "last-name": "Predovic",
- "email": "palma@ankundingbednar.biz",
- "date": "1978-02-10 16:55:54 -0800",
- "content":
- "Non ex aperiam porro. At harum vitae ut exercitationem qui qui. Quae sed sapiente sed debitis officiis quis unde.",
- "subject": "Eos eligendi voluptatum consequatur reprehenderit"
- },
-
- {
- "id": "29",
- "first-name": "Colby",
- "last-name": "Jacobson",
- "email": "rozella@spencer.com",
- "date": "1978-01-04 00:18:51 -0800",
- "content":
- "Molestiae laudantium voluptas ipsa est laborum vel. Dolorem et est nihil distinctio numquam.",
- "subject": "Aut et sint deleniti mollitia debitis"
- },
-
- {
- "id": "30",
- "first-name": "Kayley",
- "last-name": "Connelly",
- "email": "rowland.thiel@gutmannorn.info",
- "date": "2012-12-10 09:59:08 -0800",
- "content":
- "Eligendi quia repellat distinctio eum voluptas debitis. Totam a alias qui voluptates dolor.",
- "subject": "Ipsum consequatur culpa repellat quae mollitia quia unde"
- },
-
- {
- "id": "31",
- "first-name": "Kay",
- "last-name": "Reynolds",
- "email": "lexie.frami@beattyschoen.info",
- "date": "1991-05-27 22:37:41 -0700",
- "content":
- "Laborum quod iusto in voluptas et adipisci dolor. Totam et voluptatibus id tempora. Asperiores magnam dolorem quo iste sapiente.",
- "subject": "Tempora et eligendi quia dolorem alias ullam maiores doloremque"
- },
-
- {
- "id": "32",
- "first-name": "Ellsworth",
- "last-name": "Veum",
- "email": "estefania_hermann@murray.biz",
- "date": "1974-12-07 03:43:52 -0800",
- "content":
- "Et commodi molestiae hic distinctio et iusto. Quod illo natus unde est aut. Laborum rem rerum totam.",
- "subject": "Expedita nostrum consectetur sint velit modi maxime quisquam"
- },
-
- {
- "id": "33",
- "first-name": "Adeline",
- "last-name": "Altenwerth",
- "email": "francesco@weberstroman.com",
- "date": "1988-03-25 22:52:39 -0800",
- "content":
- "Quod deserunt eum dignissimos eius et veniam. Non exercitationem omnis molestiae corrupti aliquid commodi repudiandae.",
- "subject": "Dolor incidunt debitis possimus temporibus rerum quibusdam eaque"
- },
-
- {
- "id": "34",
- "first-name": "River",
- "last-name": "Roob",
- "email": "lester.hodkiewicz@hoppemcglynn.name",
- "date": "1981-01-03 06:04:53 -0800",
- "content":
- "Sed dolorem et laborum voluptate perspiciatis doloremque aliquam. Recusandae et odit. Sit esse consequatur occaecati fuga sed.",
- "subject": "Dolorem ut quia repudiandae accusamus reprehenderit dignissimos iste cupiditate"
- },
-
- {
- "id": "35",
- "first-name": "Chaya",
- "last-name": "Stokes",
- "email": "rebekah.baumbach@toy.org",
- "date": "1979-09-03 07:52:52 -0700",
- "content": "Ea voluptas minus hic omnis.",
- "subject": "Ab repellendus quia eos eius"
- },
-
- {
- "id": "36",
- "first-name": "Cara",
- "last-name": "Brown",
- "email": "natasha_gibson@bins.name",
- "date": "1985-12-19 03:29:37 -0800",
- "content":
- "Numquam nobis consectetur modi eligendi. Facere adipisci aut velit quis dolor quidem totam. Consequatur qui placeat aut molestiae dignissimos.",
- "subject": "Est quia reiciendis enim et totam temporibus"
- },
-
- {
- "id": "37",
- "first-name": "Laron",
- "last-name": "Wunsch",
- "email": "erna@heathcote.com",
- "date": "2004-06-28 16:53:07 -0700",
- "content":
- "Quisquam maxime nostrum explicabo corrupti ut. Et accusantium culpa occaecati officiis quo.",
- "subject": "Et et nulla aspernatur quas distinctio"
- },
-
- {
- "id": "38",
- "first-name": "Lessie",
- "last-name": "Roob",
- "email": "ona_olson@dicki.biz",
- "date": "1980-02-10 00:18:48 -0800",
- "content":
- "Facere veritatis aut quam praesentium ut. Consectetur praesentium explicabo consequuntur quia vel rem.",
- "subject": "Tenetur ducimus mollitia consequatur dicta"
- },
-
- {
- "id": "39",
- "first-name": "Felton",
- "last-name": "Labadie",
- "email": "stone.kihn@vonruedenbartoletti.biz",
- "date": "2002-04-04 17:29:31 -0800",
- "content":
- "Iure ad nesciunt. Excepturi impedit eum suscipit dignissimos est. Corrupti accusamus sapiente ratione eaque iure aut mollitia.",
- "subject": "Sunt et eius et iusto accusamus voluptas eum"
- },
-
- {
- "id": "40",
- "first-name": "Verna",
- "last-name": "Hoppe",
- "email": "arthur_schiller@daniel.org",
- "date": "2013-05-15 16:04:25 -0700",
- "content":
- "Veniam quia omnis at sapiente. Est est fugit eum. Impedit suscipit hic similique eum quibusdam.",
- "subject": "Voluptatum ipsum libero et vitae odio dolore tenetur perspiciatis"
- },
-
- {
- "id": "41",
- "first-name": "Velda",
- "last-name": "Veum",
- "email": "christy@feil.org",
- "date": "1988-10-24 12:42:25 -0700",
- "content": "Rem inventore necessitatibus iste et quia vero laudantium.",
- "subject": "Suscipit similique provident officia est explicabo sed"
- },
-
- {
- "id": "42",
- "first-name": "Mackenzie",
- "last-name": "Schroeder",
- "email": "miles.dietrich@stehrkuhic.org",
- "date": "1990-01-07 22:38:09 -0800",
- "content": "Non autem delectus. Architecto recusandae unde quia rerum inventore repudiandae.",
- "subject": "Molestiae odio et repudiandae ut"
- },
-
- {
- "id": "43",
- "first-name": "Natalie",
- "last-name": "Hoeger",
- "email": "gregorio_mosciski@schneiderframi.net",
- "date": "1976-04-06 06:23:07 -0800",
- "content":
- "Iste id illo cupiditate enim aut quo. Vel ut eos qui. Aut at in eum maiores voluptatem quidem.",
- "subject": "Quia officiis sit sint aliquid ad quibusdam et"
- },
-
- {
- "id": "44",
- "first-name": "Joan",
- "last-name": "Mosciski",
- "email": "thad@dickivolkman.info",
- "date": "1990-12-26 15:04:40 -0800",
- "content": "Culpa est officia veritatis esse.",
- "subject": "Est eum ullam quo"
- },
-
- {
- "id": "45",
- "first-name": "Emmitt",
- "last-name": "Keeling",
- "email": "cali@ferry.info",
- "date": "2009-04-10 10:14:57 -0700",
- "content":
- "Numquam velit sunt sed et ut. Laudantium qui laboriosam quibusdam qui. Odio non maxime soluta vero qui.",
- "subject": "Accusantium saepe id totam aut reiciendis at esse magnam"
- },
-
- {
- "id": "46",
- "first-name": "Guy",
- "last-name": "Renner",
- "email": "naomie_klein@streich.name",
- "date": "1970-12-18 13:09:51 -0800",
- "content": "Iure quia at excepturi sit consequatur.",
- "subject": "Commodi aut ipsa accusantium dolor repudiandae in"
- },
-
- {
- "id": "47",
- "first-name": "Eric",
- "last-name": "Kihn",
- "email": "dock.schmeler@langworth.biz",
- "date": "1993-12-17 11:17:07 -0800",
- "content": "Facere voluptate omnis qui officia dicta.",
- "subject": "Incidunt a libero ab asperiores fuga ut quo illum"
- },
-
- {
- "id": "48",
- "first-name": "Kraig",
- "last-name": "Keeling",
- "email": "alejandrin@streichwiegand.org",
- "date": "1977-12-09 14:54:22 -0800",
- "content": "Asperiores expedita incidunt in cum ex vel hic.",
- "subject": "In illum quisquam ut est eligendi aut"
- },
-
- {
- "id": "49",
- "first-name": "Justice",
- "last-name": "Leuschke",
- "email": "florencio@conn.info",
- "date": "1991-12-14 09:38:08 -0800",
- "content":
- "Aspernatur nesciunt voluptas sit. Cum architecto enim et blanditiis soluta dolor. Recusandae numquam occaecati esse animi et aut.",
- "subject": "Quaerat voluptatibus eum sapiente iure deserunt"
- },
-
- {
- "id": "50",
- "first-name": "Jodie",
- "last-name": "O'Hara",
- "email": "rick@stehrboehm.info",
- "date": "2000-07-21 05:34:03 -0700",
- "content":
- "Labore repudiandae dolor nostrum quo tempora eos. Natus ea fugit voluptas doloremque distinctio quaerat unde. Ut aut nostrum.",
- "subject": "Tempore in quam id aliquam fuga eos dolor"
- },
-
- {
- "id": "51",
- "first-name": "Dannie",
- "last-name": "Vandervort",
- "email": "mariana@abbottruecker.biz",
- "date": "2001-09-15 19:00:54 -0700",
- "content": "Consectetur dolore voluptas.",
- "subject": "Tenetur possimus et fuga mollitia perferendis omnis corporis"
- },
-
- {
- "id": "52",
- "first-name": "Delaney",
- "last-name": "Champlin",
- "email": "kyler_welch@krisrowe.biz",
- "date": "2014-07-22 07:09:07 -0700",
- "content": "Voluptates qui aut.",
- "subject": "Quam eos laborum nisi delectus"
- },
-
- {
- "id": "53",
- "first-name": "Barbara",
- "last-name": "Kihn",
- "email": "tyrese.casper@keebler.net",
- "date": "1996-02-29 20:04:40 -0800",
- "content": "Totam labore voluptatem eos qui temporibus velit.",
- "subject": "Eum neque sed aut sunt"
- },
-
- {
- "id": "54",
- "first-name": "Jarred",
- "last-name": "Shanahan",
- "email": "coralie@weinat.net",
- "date": "1977-06-08 01:46:22 -0700",
- "content": "Sed et voluptatum ut est quo et aut.",
- "subject": "Aut eligendi voluptas mollitia et accusamus sint nemo"
- },
-
- {
- "id": "55",
- "first-name": "Llewellyn",
- "last-name": "Bechtelar",
- "email": "kaci@jast.com",
- "date": "1998-12-01 21:14:32 -0800",
- "content": "Architecto eligendi et ut occaecati temporibus voluptas quia.",
- "subject": "Sint quis vitae voluptatem dolor aut quo maiores quas"
- },
-
- {
- "id": "56",
- "first-name": "Albertha",
- "last-name": "Upton",
- "email": "august@bradtkemiller.net",
- "date": "2006-11-16 14:38:45 -0800",
- "content":
- "Voluptas perspiciatis recusandae et. Sequi eum eius dicta dolorem. Alias reprehenderit explicabo doloribus exercitationem sint.",
- "subject": "Quo nihil fuga dolores cumque rerum eos asperiores"
- },
-
- {
- "id": "57",
- "first-name": "Christy",
- "last-name": "Considine",
- "email": "eliseo@veum.com",
- "date": "1997-05-17 13:54:41 -0700",
- "content":
- "Consequatur rerum laudantium distinctio magni. Iusto ullam et suscipit nemo ex velit voluptatem.",
- "subject": "Ut ea quisquam libero qui repudiandae aut officia"
- },
-
- {
- "id": "58",
- "first-name": "Jessica",
- "last-name": "Simonis",
- "email": "rickey@mertz.info",
- "date": "2012-10-04 00:32:34 -0700",
- "content":
- "Neque tenetur sunt sunt ratione. Rerum dolorem illo ab blanditiis quisquam architecto. Quidem ea exercitationem enim eos.",
- "subject": "Atque quo nemo explicabo voluptas blanditiis accusantium et"
- },
-
- {
- "id": "59",
- "first-name": "Justen",
- "last-name": "Davis",
- "email": "karen@jaskolskigleason.org",
- "date": "1994-08-10 02:33:43 -0700",
- "content": "Eius tenetur mollitia ad alias ab.",
- "subject": "Ut accusantium sunt qui nostrum eligendi"
- },
-
- {
- "id": "60",
- "first-name": "Elwin",
- "last-name": "Daugherty",
- "email": "milo@ko.net",
- "date": "1976-06-30 05:16:38 -0700",
- "content": "Sit necessitatibus minus.",
- "subject": "A molestiae voluptates ducimus id est recusandae"
- },
-
- {
- "id": "61",
- "first-name": "Clair",
- "last-name": "Raynor",
- "email": "zella.hermiston@batz.org",
- "date": "1985-12-18 14:30:18 -0800",
- "content": "Aut aliquid est sit pariatur voluptatem dolorum.",
- "subject": "Consectetur reprehenderit temporibus vel voluptatem voluptatem et rem fuga"
- },
-
- {
- "id": "62",
- "first-name": "Hilario",
- "last-name": "Klein",
- "email": "adrain@stark.biz",
- "date": "1980-09-08 18:06:43 -0700",
- "content": "Eum dolore optio quos animi.",
- "subject": "Illum nihil vitae molestiae laboriosam beatae modi"
- },
-
- {
- "id": "63",
- "first-name": "Greta",
- "last-name": "Murray",
- "email": "ethelyn@fritsch.org",
- "date": "1970-05-23 02:27:54 -0700",
- "content":
- "Quisquam animi et recusandae rem modi eos ipsa. Eaque et expedita qui animi veritatis temporibus.",
- "subject": "Repellendus fuga sint nemo"
- },
-
- {
- "id": "64",
- "first-name": "Anissa",
- "last-name": "Adams",
- "email": "edward@armstrong.com",
- "date": "1997-01-26 22:21:57 -0800",
- "content": "Laudantium culpa rem voluptas tempore. Sit modi dolor est sunt rem.",
- "subject": "Autem unde minima quia beatae totam"
- },
-
- {
- "id": "65",
- "first-name": "Kaylah",
- "last-name": "Conroy",
- "email": "brian.cormier@hyatt.org",
- "date": "2015-02-02 07:44:37 -0800",
- "content": "Voluptates vitae nulla expedita. Possimus et quo aut eum.",
- "subject": "Molestiae minus enim adipisci et"
- },
-
- {
- "id": "66",
- "first-name": "Jamey",
- "last-name": "Ebert",
- "email": "seth@pfannerstillrodriguez.name",
- "date": "1987-09-29 09:40:59 -0700",
- "content": "Voluptatem est quae.",
- "subject": "Similique nemo placeat id tempore dolorum"
- },
-
- {
- "id": "67",
- "first-name": "Johnson",
- "last-name": "Mosciski",
- "email": "morton@littel.net",
- "date": "1989-02-14 11:15:10 -0800",
- "content":
- "Molestias expedita exercitationem et praesentium et vel delectus. Qui fuga molestias porro.",
- "subject": "Aut rerum quidem est iste in blanditiis sit"
- },
-
- {
- "id": "68",
- "first-name": "Ellis",
- "last-name": "O'Keefe",
- "email": "taurean@ullrich.biz",
- "date": "1987-03-09 11:29:05 -0800",
- "content":
- "Facere sint doloribus qui illo autem consequatur culpa. Est quisquam enim accusantium praesentium.",
- "subject": "Quis beatae quia velit deserunt est sit odit quisquam"
- },
-
- {
- "id": "69",
- "first-name": "Marlen",
- "last-name": "Ritchie",
- "email": "rodger_schamberger@thiel.net",
- "date": "1989-07-23 03:03:52 -0700",
- "content": "Doloribus porro hic quis explicabo fuga veritatis vero.",
- "subject": "Et doloribus est consequatur unde"
- },
-
- {
- "id": "70",
- "first-name": "Maddison",
- "last-name": "Kuhic",
- "email": "rosetta@von.biz",
- "date": "1975-06-22 10:34:58 -0700",
- "content":
- "Sit ut eos libero error sapiente veritatis. Est dolore qui impedit recusandae quas animi rerum.",
- "subject": "Quos culpa assumenda enim eius aliquid dolorum"
- },
-
- {
- "id": "71",
- "first-name": "Whitney",
- "last-name": "Parisian",
- "email": "everardo@langworth.name",
- "date": "1970-11-04 01:17:28 -0800",
- "content":
- "Quam dolores pariatur ut possimus. Alias tenetur ex accusantium quasi. Nihil dolorem mollitia quidem.",
- "subject": "Officia totam excepturi sed illum et tempore commodi sit"
- },
-
- {
- "id": "72",
- "first-name": "Madyson",
- "last-name": "Streich",
- "email": "imani@murray.biz",
- "date": "1983-07-16 11:27:34 -0700",
- "content":
- "Veritatis molestiae id placeat dolorem consectetur a est. Est enim aut. Magnam aut distinctio quo sapiente ea est accusantium.",
- "subject": "Aut sunt esse eligendi et qui ut sed"
- },
-
- {
- "id": "73",
- "first-name": "Laurie",
- "last-name": "Purdy",
- "email": "jarrell@paucek.biz",
- "date": "1992-10-18 12:48:31 -0700",
- "content":
- "Saepe facilis est repellendus praesentium autem. Qui soluta voluptas ullam sequi. Molestias aut quibusdam.",
- "subject": "Quo ullam totam sit dolores"
- },
-
- {
- "id": "74",
- "first-name": "Ollie",
- "last-name": "Lowe",
- "email": "corene@kris.info",
- "date": "1976-08-24 16:28:46 -0700",
- "content": "Nostrum qui eaque aperiam possimus libero non. Quae aut enim non.",
- "subject": "Optio minus aut officiis voluptates reiciendis sit dicta"
- },
-
- {
- "id": "75",
- "first-name": "Ian",
- "last-name": "Murray",
- "email": "adelia_bernhard@maggio.com",
- "date": "1982-04-08 00:25:22 -0800",
- "content": "Quod dolores quibusdam nihil aut vel. Sit ab vitae necessitatibus eum.",
- "subject": "Quia praesentium nam debitis nulla repellendus quos"
- },
-
- {
- "id": "76",
- "first-name": "Bernard",
- "last-name": "Zieme",
- "email": "kaelyn.johnson@markswalsh.net",
- "date": "2014-01-17 03:47:35 -0800",
- "content": "Repellendus qui reiciendis quibusdam voluptatum voluptate omnis.",
- "subject": "Mollitia ut omnis tempore aut debitis ratione alias illum"
- },
-
- {
- "id": "77",
- "first-name": "Megane",
- "last-name": "Kuvalis",
- "email": "otis@donnellypouros.name",
- "date": "1987-09-29 22:10:00 -0700",
- "content":
- "Explicabo repellat qui placeat inventore velit. Tempora accusamus minima facilis dicta architecto unde. Excepturi enim eos.",
- "subject": "Quam molestias amet officiis"
- },
-
- {
- "id": "78",
- "first-name": "Freeman",
- "last-name": "Nader",
- "email": "samara_hoppe@dachcorkery.info",
- "date": "2009-02-02 12:08:30 -0800",
- "content": "Perferendis aut minus in.",
- "subject": "Voluptates odio neque laudantium accusamus ipsa accusantium"
- },
-
- {
- "id": "79",
- "first-name": "Margarita",
- "last-name": "Heller",
- "email": "heloise@rogahn.name",
- "date": "1984-01-04 10:41:32 -0800",
- "content": "Officiis voluptas omnis. Nihil consectetur id reiciendis qui nemo est.",
- "subject": "Velit in molestias quo repudiandae accusamus et excepturi et"
- },
-
- {
- "id": "80",
- "first-name": "Lonny",
- "last-name": "Goodwin",
- "email": "darian@kundebernier.info",
- "date": "1999-02-08 07:00:38 -0800",
- "content":
- "Earum provident et minima aliquam iusto sint. Sed numquam ducimus voluptatem quos enim.",
- "subject": "Commodi beatae vitae aut quos dolor consequatur"
- },
-
- {
- "id": "81",
- "first-name": "Jazlyn",
- "last-name": "Bayer",
- "email": "harvey@rempel.org",
- "date": "2009-09-28 16:50:32 -0700",
- "content": "Ipsum voluptas perferendis aperiam dolor.",
- "subject": "Omnis inventore nobis cupiditate quas quis tenetur"
- },
-
- {
- "id": "82",
- "first-name": "Jakob",
- "last-name": "Conn",
- "email": "rylee@vandervort.net",
- "date": "2008-11-12 17:22:34 -0800",
- "content":
- "Aut temporibus perferendis neque nulla et. Totam ab neque inventore et facere eligendi.",
- "subject": "A optio ut molestiae iste et nam"
- },
-
- {
- "id": "83",
- "first-name": "Mikayla",
- "last-name": "Romaguera",
- "email": "rebecca_moriette@stracke.net",
- "date": "1986-08-09 12:39:31 -0700",
- "content": "Dicta et reiciendis corrupti.",
- "subject": "Neque odio voluptates aut quam"
- },
-
- {
- "id": "84",
- "first-name": "Brianne",
- "last-name": "West",
- "email": "sheila@terry.com",
- "date": "1972-04-25 22:32:20 -0800",
- "content":
- "Nulla sit mollitia qui odit sit corrupti repudiandae. Voluptas consequuntur voluptatibus molestiae. Illo quidem nostrum odio et.",
- "subject": "Deserunt voluptas et accusamus"
- },
-
- {
- "id": "85",
- "first-name": "Destiny",
- "last-name": "Mohr",
- "email": "ernestine.waters@connellypfannerstill.com",
- "date": "2012-10-30 15:02:35 -0700",
- "content":
- "Eveniet voluptatem molestias dolores aut voluptates. Quisquam nemo ipsam dicta numquam aut temporibus.",
- "subject": "Pariatur nisi facilis tempora"
- },
-
- {
- "id": "86",
- "first-name": "Brooks",
- "last-name": "Herman",
- "email": "brendan_smith@treutel.info",
- "date": "1972-04-01 17:10:07 -0800",
- "content": "Qui sunt dolore molestiae minima. Suscipit ea quia a aut sunt et.",
- "subject": "Magni quia perferendis possimus ipsam"
- },
-
- {
- "id": "87",
- "first-name": "Celestino",
- "last-name": "Dickens",
- "email": "cruz.mcdermott@ziemann.org",
- "date": "2007-08-14 14:55:17 -0700",
- "content": "Saepe libero tenetur.",
- "subject": "Molestiae nulla aut laborum placeat perferendis aliquam"
- },
-
- {
- "id": "88",
- "first-name": "Angel",
- "last-name": "Tillman",
- "email": "shayna_baumbach@durgan.biz",
- "date": "1978-08-31 01:02:14 -0700",
- "content":
- "Libero sequi ea dolore. Numquam quia temporibus voluptatum rerum. Deserunt tenetur nesciunt veritatis debitis.",
- "subject": "Occaecati quo omnis adipisci sit perspiciatis aut modi cum"
- },
-
- {
- "id": "89",
- "first-name": "Verlie",
- "last-name": "Tillman",
- "email": "aurelia@gorczany.name",
- "date": "1995-07-27 01:25:55 -0700",
- "content": "Iure est veritatis qui et. Sit tempore ducimus repellat cupiditate.",
- "subject": "Dolorum similique expedita praesentium quisquam quasi dolorem eligendi"
- },
-
- {
- "id": "90",
- "first-name": "Cornell",
- "last-name": "Padberg",
- "email": "rhianna@thiel.name",
- "date": "2009-12-14 14:21:13 -0800",
- "content":
- "Ea modi consequatur. Necessitatibus sit qui voluptatem et accusantium. Cumque rerum omnis.",
- "subject": "Molestiae nostrum aut officiis porro tempore"
- },
-
- {
- "id": "91",
- "first-name": "Carmelo",
- "last-name": "Kunde",
- "email": "beulah@rolfsonschaefer.info",
- "date": "2010-08-14 23:10:58 -0700",
- "content": "Ut molestiae dolorem fuga in aliquam est provident.",
- "subject": "Atque occaecati temporibus et autem est"
- },
-
- {
- "id": "92",
- "first-name": "Jess",
- "last-name": "Corwin",
- "email": "korey.barrows@reillyankunding.com",
- "date": "1976-11-13 05:09:16 -0800",
- "content":
- "Commodi eveniet aspernatur earum nisi aut sit dolor. Odio vero facilis reprehenderit dolore. Provident voluptatibus atque qui assumenda quaerat.",
- "subject": "Commodi laboriosam accusamus quis dolores tempora eos"
- },
-
- {
- "id": "93",
- "first-name": "Hugh",
- "last-name": "Hirthe",
- "email": "verla.dickens@keeling.name",
- "date": "1971-03-17 23:51:15 -0800",
- "content":
- "Voluptatibus saepe dolor voluptas sed cupiditate incidunt. Magni velit ut beatae minus. Consequatur recusandae voluptas ad ex dolores modi quos.",
- "subject": "Ut pariatur odit mollitia soluta eaque magnam"
- },
-
- {
- "id": "94",
- "first-name": "Elsa",
- "last-name": "Morissette",
- "email": "otto@ohara.org",
- "date": "2006-11-27 01:10:16 -0800",
- "content":
- "Et architecto ipsam asperiores vitae quo. Fugiat error quidem facilis. Eaque officiis est veniam.",
- "subject": "Autem rerum consequatur suscipit veritatis"
- },
-
- {
- "id": "95",
- "first-name": "Gianni",
- "last-name": "Nitzsche",
- "email": "maxine.carter@schimmelfritsch.com",
- "date": "2006-02-22 21:52:15 -0800",
- "content":
- "Nam aut at esse. Adipisci tenetur in voluptas. Dolore quia nobis voluptatibus iure sit eaque fugit.",
- "subject": "Et est rerum non aut eum"
- },
-
- {
- "id": "96",
- "first-name": "Reed",
- "last-name": "Kirlin",
- "email": "keaton@gutmann.net",
- "date": "2001-08-15 19:41:38 -0700",
- "content": "Mollitia hic numquam dicta.",
- "subject": "Est accusantium et nam dolores aliquam"
- },
-
- {
- "id": "97",
- "first-name": "Thelma",
- "last-name": "Labadie",
- "email": "leonor@bahringer.biz",
- "date": "1993-01-04 20:38:12 -0800",
- "content":
- "Porro rerum ea similique. Vel qui est. Temporibus a distinctio dolor doloremque eos beatae.",
- "subject": "Aut et quasi aut"
- },
-
- {
- "id": "98",
- "first-name": "Neva",
- "last-name": "Stehr",
- "email": "clifton.turner@beeroconnell.name",
- "date": "1983-03-21 03:23:41 -0800",
- "content": "Voluptatem impedit sed minus. Incidunt ad est consequatur rerum mollitia.",
- "subject": "Eum sapiente quis placeat"
- },
-
- {
- "id": "99",
- "first-name": "Jovan",
- "last-name": "Kunze",
- "email": "grady_keler@casper.net",
- "date": "1985-11-17 01:24:57 -0800",
- "content":
- "Molestiae laboriosam quia adipisci delectus praesentium nam. Dolorum repudiandae delectus esse quis voluptatem similique. Illum tempore vitae quia minus.",
- "subject": "Nihil qui repellendus animi nostrum voluptas quisquam aut minima"
- },
-
- {
- "id": "100",
- "first-name": "Agustin",
- "last-name": "Rowe",
- "email": "roderick@cartermckenzie.name",
- "date": "2013-08-15 06:42:43 -0700",
- "content": "Quo eaque non laboriosam sunt. Ad aliquid laudantium quia. Aut nisi magnam.",
- "subject": "Aut hic iste maiores sit"
- },
-
- {
- "id": "101",
- "first-name": "Lennie",
- "last-name": "Pacocha",
- "email": "valentine@goldnerryan.com",
- "date": "1995-11-23 15:07:48 -0800",
- "content":
- "Provident sit voluptate odio qui. Est consequatur nobis. Quibusdam exercitationem ducimus aspernatur.",
- "subject": "Perferendis adipisci necessitatibus qui similique"
- },
-
- {
- "id": "102",
- "first-name": "Brionna",
- "last-name": "Brown",
- "email": "jesus@gusikowski.info",
- "date": "2007-12-21 20:22:44 -0800",
- "content":
- "Qui deleniti quaerat ratione doloremque ea quod consequatur. Illo consequatur nisi eos molestiae quos ullam. Enim neque rerum perspiciatis inventore consectetur.",
- "subject": "Perferendis ratione voluptatem quae non magnam"
- },
-
- {
- "id": "103",
- "first-name": "Ceasar",
- "last-name": "Becker",
- "email": "barney@conn.biz",
- "date": "1991-03-31 18:06:07 -0800",
- "content": "Cupiditate ipsa minus. Recusandae consequatur aperiam ab ut sint expedita.",
- "subject": "Dolore voluptatum maiores repudiandae ipsam qui consectetur veniam et"
- },
-
- {
- "id": "104",
- "first-name": "Jadon",
- "last-name": "Walker",
- "email": "alexie@brownspencer.biz",
- "date": "2014-05-05 03:04:04 -0700",
- "content":
- "Ipsam ut molestias necessitatibus consequatur eligendi adipisci nihil. Nemo voluptatem dolores iure enim fuga.",
- "subject": "Sunt officia voluptas porro et voluptatum exercitationem aut id"
- },
-
- {
- "id": "105",
- "first-name": "Harvey",
- "last-name": "Little",
- "email": "dell_reichel@mayert.name",
- "date": "1997-05-17 16:09:39 -0700",
- "content":
- "Saepe et voluptate enim facere. Nihil est et sint odit aut quae. Deserunt molestiae explicabo impedit iure quod ratione.",
- "subject": "Veniam ipsum est eum dolorem neque aut"
- },
-
- {
- "id": "106",
- "first-name": "Kailey",
- "last-name": "Doyle",
- "email": "golda@hayesdavis.name",
- "date": "1992-07-01 10:53:52 -0700",
- "content":
- "Necessitatibus aspernatur nesciunt rerum nam. Qui quaerat modi. Et voluptatem ut quod perspiciatis quo eligendi.",
- "subject": "Exercitationem voluptatem sunt hic debitis"
- },
-
- {
- "id": "107",
- "first-name": "Emily",
- "last-name": "Gutmann",
- "email": "mazie@bashirian.biz",
- "date": "1999-12-26 09:22:07 -0800",
- "content":
- "Rem debitis qui quia. Nihil quis quia omnis et ea aliquid. Quam praesentium commodi itaque.",
- "subject": "Maiores ea alias fuga"
- },
-
- {
- "id": "108",
- "first-name": "Jack",
- "last-name": "O'Keefe",
- "email": "carlos@wilkinson.biz",
- "date": "1988-04-28 18:31:09 -0700",
- "content": "Ab aspernatur vel et. Architecto occaecati qui. Adipisci ut sequi culpa.",
- "subject": "Qui fuga rerum quo"
- },
-
- {
- "id": "109",
- "first-name": "Mylene",
- "last-name": "Barton",
- "email": "sherman.kunde@block.info",
- "date": "1996-04-16 20:06:02 -0700",
- "content": "Nostrum iste laboriosam corporis omnis.",
- "subject": "Nihil et minima odit iste et beatae"
- },
-
- {
- "id": "110",
- "first-name": "Cristopher",
- "last-name": "Krajcik",
- "email": "levi@oconnell.com",
- "date": "1989-11-08 03:06:37 -0800",
- "content": "Assumenda qui et accusamus magnam deserunt ut nobis.",
- "subject": "Aut numquam saepe placeat facilis at"
- },
-
- {
- "id": "111",
- "first-name": "Amya",
- "last-name": "Anderson",
- "email": "travis@waelchigottlieb.biz",
- "date": "1986-12-25 15:27:02 -0800",
- "content": "Iure numquam ea omnis nemo illo.",
- "subject": "Labore sit aut ea in nemo et deleniti"
- },
-
- {
- "id": "112",
- "first-name": "Alphonso",
- "last-name": "Buckridge",
- "email": "duncan@barton.name",
- "date": "1991-02-27 01:09:28 -0800",
- "content": "Sint ducimus sed temporibus quo. Voluptas possimus eaque earum aut.",
- "subject": "Quidem aliquid blanditiis quasi"
- },
-
- {
- "id": "113",
- "first-name": "Jovani",
- "last-name": "Thompson",
- "email": "lewis.greenfelder@stark.biz",
- "date": "1970-10-29 18:08:36 -0800",
- "content": "Modi aut ut amet ut qui.",
- "subject": "Deserunt est autem sed dicta qui"
- },
-
- {
- "id": "114",
- "first-name": "Roosevelt",
- "last-name": "Blick",
- "email": "sophie_kaulke@kunze.biz",
- "date": "2001-11-11 17:45:44 -0800",
- "content": "Debitis non exercitationem vero nostrum dignissimos. Et voluptates ad nulla.",
- "subject": "Quasi est ipsam accusantium sint"
- },
-
- {
- "id": "115",
- "first-name": "Darren",
- "last-name": "Brown",
- "email": "jammie@hickle.net",
- "date": "2007-10-05 11:14:49 -0700",
- "content":
- "Quas ut odio blanditiis corrupti quia dolor. Id enim in veniam voluptatem. Laborum delectus quidem voluptatem beatae facilis ut.",
- "subject": "Fugiat totam dolores harum soluta iusto et"
- },
-
- {
- "id": "116",
- "first-name": "Dexter",
- "last-name": "Schroeder",
- "email": "efrain.corwin@hane.name",
- "date": "1973-09-30 19:52:23 -0700",
- "content": "Debitis assumenda fugit. Sunt omnis in quod aut quibusdam qui.",
- "subject": "Aut iure molestias suscipit laboriosam dolores"
- },
-
- {
- "id": "117",
- "first-name": "Mellie",
- "last-name": "Hilpert",
- "email": "amiya_haley@douglasbins.org",
- "date": "1992-05-14 20:52:23 -0700",
- "content":
- "Vero aut perferendis commodi. Quod dolorem distinctio sint. Error nostrum reprehenderit aut quaerat officiis eaque.",
- "subject": "Omnis aliquid rerum fuga vero molestiae quidem eveniet"
- },
-
- {
- "id": "118",
- "first-name": "Laura",
- "last-name": "Koepp",
- "email": "gus@hagenes.biz",
- "date": "2007-08-04 22:19:10 -0700",
- "content":
- "Quibusdam fugiat quasi consequatur. Ipsam corporis nesciunt quae ipsa aliquid hic eius.",
- "subject": "Asperiores quisquam voluptatem aut quam dolores"
- },
-
- {
- "id": "119",
- "first-name": "Amara",
- "last-name": "Jerde",
- "email": "estelle@marksdonnelly.info",
- "date": "1989-08-19 01:24:43 -0700",
- "content":
- "Architecto voluptatum quas pariatur expedita exercitationem quo. Sint eum perferendis a. Et similique est amet dolores.",
- "subject": "Id consequuntur nesciunt tenetur impedit sit voluptas"
- },
-
- {
- "id": "120",
- "first-name": "Jacquelyn",
- "last-name": "Barton",
- "email": "antwon_mayer@kshleringibson.info",
- "date": "1989-08-19 13:07:02 -0700",
- "content": "Quos enim repellendus praesentium sit rerum deserunt.",
- "subject": "Et omnis hic autem ipsa tempora impedit perspiciatis"
- },
-
- {
- "id": "121",
- "first-name": "Micaela",
- "last-name": "Runte",
- "email": "vivianne.graham@vonrueden.org",
- "date": "1986-09-27 01:16:29 -0700",
- "content": "Et neque rem.",
- "subject": "Enim facere corrupti accusamus quam consequatur beatae aspernatur vero"
- },
-
- {
- "id": "122",
- "first-name": "Millie",
- "last-name": "Flatley",
- "email": "gino@kihn.biz",
- "date": "1980-02-09 01:35:05 -0800",
- "content": "Rerum sint quis esse minus. Aut at asperiores. Amet magni beatae atque.",
- "subject": "Illo vitae blanditiis et impedit in dolor"
- },
-
- {
- "id": "123",
- "first-name": "Sincere",
- "last-name": "Rohan",
- "email": "zora@beattyerdman.org",
- "date": "2002-11-11 22:02:22 -0800",
- "content": "Ut error voluptatem aut ratione molestiae. Omnis qui rem delectus.",
- "subject": "Unde sed voluptas assumenda non animi quo"
- },
-
- {
- "id": "124",
- "first-name": "Vicky",
- "last-name": "Kautzer",
- "email": "mustafa.lueilwitz@tremblay.name",
- "date": "2014-08-15 11:18:05 -0700",
- "content":
- "Nostrum quis et et molestiae molestiae. Corporis corrupti deleniti qui fugiat eos. Porro qui quis mollitia.",
- "subject": "Quisquam ex esse dolore"
- },
-
- {
- "id": "125",
- "first-name": "Lavon",
- "last-name": "Padberg",
- "email": "destin_sanford@reynolds.net",
- "date": "2005-07-11 21:24:34 -0700",
- "content": "Officia dolorem autem beatae soluta numquam aperiam et.",
- "subject": "Ad labore aut corporis"
- },
-
- {
- "id": "126",
- "first-name": "Shaina",
- "last-name": "Dare",
- "email": "carrie_sawayn@buckridge.net",
- "date": "2001-10-12 08:02:09 -0700",
- "content": "Ex doloremque dolor deleniti.",
- "subject": "Asperiores recusandae reprehenderit quia tempore qui ipsam sit"
- },
-
- {
- "id": "127",
- "first-name": "Sigrid",
- "last-name": "Farrell",
- "email": "soledad_abshire@miller.net",
- "date": "2003-03-24 17:55:50 -0800",
- "content": "Debitis ea soluta eos ut omnis. Ut et laboriosam. Quaerat sit velit impedit.",
- "subject": "Eum et nesciunt quidem quo repudiandae rerum doloremque beatae"
- },
-
- {
- "id": "128",
- "first-name": "Viola",
- "last-name": "Dooley",
- "email": "myrtice_grant@zemlakbashirian.com",
- "date": "2006-06-01 21:17:02 -0700",
- "content": "Sit doloremque est aut voluptatem.",
- "subject": "Aut accusamus consectetur nihil iusto"
- },
-
- {
- "id": "129",
- "first-name": "Davion",
- "last-name": "Conn",
- "email": "travis@bins.biz",
- "date": "1993-11-26 09:03:37 -0800",
- "content":
- "Voluptatibus ipsum mollitia fugit aspernatur enim sint. Laudantium exercitationem sed voluptas consequatur quis.",
- "subject": "Illum aspernatur tempora amet itaque ipsam distinctio aliquid"
- },
-
- {
- "id": "130",
- "first-name": "Hobart",
- "last-name": "Oberbrunner",
- "email": "eric@wisozk.net",
- "date": "2000-02-11 07:40:02 -0800",
- "content": "Quis aut sint officia sunt.",
- "subject": "Ut pariatur explicabo consequatur libero distinctio nulla consequatur placeat"
- },
-
- {
- "id": "131",
- "first-name": "Raleigh",
- "last-name": "Hegmann",
- "email": "jasen.koepp@hickle.name",
- "date": "1993-03-01 22:48:23 -0800",
- "content":
- "Delectus aut quod maxime incidunt et consequatur. Nihil eos et eveniet quo iure. Alias facilis earum dicta nulla quo sed.",
- "subject": "Aliquam eos aliquid dolor"
- },
-
- {
- "id": "132",
- "first-name": "Hector",
- "last-name": "Denesik",
- "email": "bernice@leuschke.biz",
- "date": "2013-08-03 14:45:55 -0700",
- "content": "Et ut dicta. Qui sunt vel et voluptas hic suscipit.",
- "subject": "Ipsum quo est consequatur"
- },
-
- {
- "id": "133",
- "first-name": "Nikko",
- "last-name": "Rolfson",
- "email": "crystel@upton.net",
- "date": "1977-02-19 16:22:15 -0800",
- "content": "Velit quo repellendus consequatur.",
- "subject": "Exercitationem omnis aut id deserunt nihil et inventore"
- },
-
- {
- "id": "134",
- "first-name": "Jovany",
- "last-name": "Nienow",
- "email": "neil.muller@lakin.info",
- "date": "2004-09-28 21:55:43 -0700",
- "content":
- "Voluptatibus numquam blanditiis quibusdam. Illum suscipit dolorum. Sunt amet est sint.",
- "subject": "Esse nihil est voluptas rerum ea"
- },
-
- {
- "id": "135",
- "first-name": "Ellis",
- "last-name": "Kohler",
- "email": "cordie_bartoletti@barrows.net",
- "date": "1989-09-19 13:57:30 -0700",
- "content":
- "Eum corporis nobis laborum fugiat amet alias. Voluptatum quasi ducimus fuga corrupti. Mollitia modi laborum.",
- "subject": "Ipsum modi nulla et"
- },
-
- {
- "id": "136",
- "first-name": "Marley",
- "last-name": "Runolfsson",
- "email": "kian_vonrueden@collier.info",
- "date": "2003-01-17 06:33:04 -0800",
- "content": "Et rerum explicabo iusto ipsa ipsum. Quia ipsa ab sed perspiciatis.",
- "subject": "Voluptas esse iure quia hic dolor eligendi velit maiores"
- },
-
- {
- "id": "137",
- "first-name": "Grant",
- "last-name": "Jenkins",
- "email": "hayden.altenwerth@corkeryankunding.net",
- "date": "1970-03-24 13:04:46 -0800",
- "content": "Tenetur odit ratione voluptatum dolore qui.",
- "subject": "Tempore est molestiae id"
- },
-
- {
- "id": "138",
- "first-name": "Deangelo",
- "last-name": "Koss",
- "email": "reba.skiles@bruen.com",
- "date": "1999-10-16 20:28:42 -0700",
- "content": "Sit vero sint ut beatae iure. Minima harum tempora sit rerum aut.",
- "subject": "Aspernatur cumque non consequatur blanditiis enim quas quam"
- },
-
- {
- "id": "139",
- "first-name": "Mariana",
- "last-name": "Jakubowski",
- "email": "brett@swift.biz",
- "date": "1970-07-04 08:54:29 -0700",
- "content": "Beatae expedita praesentium ea corrupti. Aut sint ad et sunt.",
- "subject": "Dolore distinctio consequatur aut laudantium officiis aliquid soluta"
- },
-
- {
- "id": "140",
- "first-name": "Leonard",
- "last-name": "Kovacek",
- "email": "jermain@dachbruen.biz",
- "date": "1981-10-15 00:39:10 -0700",
- "content":
- "Deserunt cupiditate modi. Eius consequatur aut dolor nostrum porro dignissimos. Labore consequatur quod est et distinctio possimus ducimus.",
- "subject": "Et rerum id voluptates et iure eligendi rerum"
- },
-
- {
- "id": "141",
- "first-name": "Etha",
- "last-name": "Ondricka",
- "email": "noemy@okuneva.org",
- "date": "1994-04-29 12:19:51 -0700",
- "content":
- "Velit fuga quasi pariatur consectetur est nihil. Dolore nisi dolores quia qui voluptatem inventore provident.",
- "subject": "Enim est commodi nisi autem asperiores molestiae minima"
- },
-
- {
- "id": "142",
- "first-name": "Nannie",
- "last-name": "Fadel",
- "email": "frida.streich@prosacco.org",
- "date": "2012-12-15 16:56:24 -0800",
- "content": "Rerum id quo. Recusandae aut optio voluptate perspiciatis tempore sed nemo.",
- "subject": "Pariatur soluta praesentium enim quo quam alias consequuntur in"
- },
-
- {
- "id": "143",
- "first-name": "Shyanne",
- "last-name": "Kunze",
- "email": "annabel@littel.net",
- "date": "1992-12-09 23:41:23 -0800",
- "content": "Dolores iure iste unde. Illo esse autem harum perspiciatis.",
- "subject": "Atque illum et qui"
- },
-
- {
- "id": "144",
- "first-name": "Eloy",
- "last-name": "Barton",
- "email": "leonie_gulgowski@skiles.com",
- "date": "2013-01-12 20:05:57 -0800",
- "content": "Cumque id sapiente explicabo. Voluptas pariatur quibusdam dolores et.",
- "subject": "Ut dolore velit qui omnis"
- },
-
- {
- "id": "145",
- "first-name": "Rosalinda",
- "last-name": "Pfeffer",
- "email": "anabelle@langworth.com",
- "date": "2001-05-17 05:43:52 -0700",
- "content": "Et voluptatem quasi voluptatum.",
- "subject": "Voluptatum quia incidunt ut repudiandae blanditiis"
- },
-
- {
- "id": "146",
- "first-name": "William",
- "last-name": "Bogisich",
- "email": "bertha@gibsonrohan.info",
- "date": "2009-11-01 04:28:13 -0800",
- "content":
- "Quaerat dolorem odio et dolor saepe quia odit. Corporis molestiae ab ipsa occaecati autem fuga dicta. Voluptate ratione sunt.",
- "subject": "Ipsam quidem mollitia blanditiis magnam ut et"
- },
-
- {
- "id": "147",
- "first-name": "Laurianne",
- "last-name": "Bergstrom",
- "email": "brisa_howe@dare.net",
- "date": "2003-03-23 21:58:11 -0800",
- "content": "Et porro recusandae aut. Tenetur voluptas aperiam ut vitae.",
- "subject": "Molestias autem qui nisi mollitia nulla dolorum repudiandae hic"
- },
-
- {
- "id": "148",
- "first-name": "Carroll",
- "last-name": "Hickle",
- "email": "noemi.grady@grimesritchie.com",
- "date": "1996-07-15 02:55:52 -0700",
- "content": "Quia voluptas assumenda. Numquam inventore facilis dicta qui ipsa reiciendis.",
- "subject": "Perferendis rerum vel incidunt molestias recusandae"
- },
-
- {
- "id": "149",
- "first-name": "Jasen",
- "last-name": "Romaguera",
- "email": "jayce@berge.name",
- "date": "1984-04-12 11:56:39 -0800",
- "content": "Consectetur molestias perspiciatis ut omnis aliquid.",
- "subject": "Hic optio accusamus qui adipisci repellendus ipsa in"
- },
-
- {
- "id": "150",
- "first-name": "Heaven",
- "last-name": "Fay",
- "email": "enola@sanfordsteuber.net",
- "date": "2000-11-23 00:18:07 -0800",
- "content":
- "Quia itaque temporibus. Provident ducimus quidem consectetur qui voluptatum. Sunt cum quis dolorum hic.",
- "subject": "Ad excepturi illum doloremque ducimus corporis ut qui omnis"
- },
-
- {
- "id": "151",
- "first-name": "Wilburn",
- "last-name": "Cartwright",
- "email": "jaida_erdman@nitzsche.com",
- "date": "2011-09-19 01:58:53 -0700",
- "content": "Autem iure magni ut odio amet et.",
- "subject": "Fuga quis quidem sint laborum et delectus iste"
- },
-
- {
- "id": "152",
- "first-name": "Concepcion",
- "last-name": "McLaughlin",
- "email": "bernardo_langworth@jakubowski.org",
- "date": "1992-08-20 13:35:09 -0700",
- "content": "Rerum laboriosam omnis nobis eaque odit sequi dicta.",
- "subject": "Sint accusantium ab quis sed ipsa"
- },
-
- {
- "id": "153",
- "first-name": "Vita",
- "last-name": "Fisher",
- "email": "chanelle_gulgowski@roob.info",
- "date": "2005-09-21 12:09:45 -0700",
- "content":
- "Sunt quibusdam adipisci accusantium laborum distinctio voluptate autem. Quis pariatur culpa ut et. Fuga similique dignissimos culpa dolorum neque reiciendis.",
- "subject": "Nulla enim et fugiat eveniet ducimus delectus"
- },
-
- {
- "id": "154",
- "first-name": "Elliott",
- "last-name": "Champlin",
- "email": "kamille@kulascain.biz",
- "date": "2003-05-20 15:42:54 -0700",
- "content":
- "Eos quisquam et voluptates rerum vel. Consectetur veniam voluptatem minus totam numquam in.",
- "subject": "Deleniti ipsum et odio"
- },
-
- {
- "id": "155",
- "first-name": "Heidi",
- "last-name": "Macejkovic",
- "email": "stefanie@barrowshagenes.info",
- "date": "1983-06-02 17:59:14 -0700",
- "content": "Ut officiis animi exercitationem delectus suscipit qui voluptatibus.",
- "subject": "Eveniet ipsam asperiores qui aut consectetur vel provident"
- },
-
- {
- "id": "156",
- "first-name": "Janae",
- "last-name": "Pollich",
- "email": "brianne.sauer@marquardtsteuber.com",
- "date": "2000-05-14 07:13:30 -0700",
- "content": "Facilis sit ut odit.",
- "subject": "Sapiente explicabo sequi molestias illo saepe"
- },
-
- {
- "id": "157",
- "first-name": "Kaylin",
- "last-name": "Lindgren",
- "email": "urban.franecki@wilkinsonwilderman.org",
- "date": "2014-09-09 00:48:38 -0700",
- "content": "Eaque ad repellendus est nihil iste vero.",
- "subject": "Deserunt qui dolor rerum ut beatae aut"
- },
-
- {
- "id": "158",
- "first-name": "Garland",
- "last-name": "Nienow",
- "email": "ellen.schultz@kihn.org",
- "date": "2013-10-27 00:18:14 -0700",
- "content": "Quam voluptatem nam est.",
- "subject": "Et occaecati quisquam impedit dolore quod"
- },
-
- {
- "id": "159",
- "first-name": "Lilly",
- "last-name": "Hills",
- "email": "macey@labadie.biz",
- "date": "1981-02-23 03:46:55 -0800",
- "content":
- "Quia perferendis est consequuntur voluptates cumque commodi. Laboriosam expedita sit excepturi.",
- "subject": "Eos doloribus repellendus provident"
- },
-
- {
- "id": "160",
- "first-name": "Lilla",
- "last-name": "Abshire",
- "email": "roselyn@rippin.org",
- "date": "1998-05-16 00:55:49 -0700",
- "content": "Ratione deserunt ut ut beatae praesentium qui. Nulla ut ipsam tempore.",
- "subject": "Autem nostrum tempora iure laborum"
- },
-
- {
- "id": "161",
- "first-name": "Alessandro",
- "last-name": "Hayes",
- "email": "gia_bradtke@schimmelwalsh.biz",
- "date": "2001-11-28 23:52:57 -0800",
- "content":
- "Quasi perspiciatis tenetur dolorum. Quae cupiditate fuga molestiae et tempore soluta.",
- "subject": "Non ipsam quis soluta"
- },
-
- {
- "id": "162",
- "first-name": "Sharon",
- "last-name": "Goodwin",
- "email": "ulices.schimmel@oreillyabshire.name",
- "date": "2010-03-12 00:46:00 -0800",
- "content": "Neque omnis in. Qui ad sint. Velit voluptatibus repellat esse at.",
- "subject": "Magni exercitationem quas consectetur qui quia id"
- },
-
- {
- "id": "163",
- "first-name": "Claude",
- "last-name": "Gleason",
- "email": "ken.gulgowski@labadie.net",
- "date": "2003-05-30 14:58:54 -0700",
- "content": "Et sit non harum quo sunt. Odio beatae voluptatem ad. Nemo in hic nulla.",
- "subject": "Nobis consequatur non sunt sequi ex nihil"
- },
-
- {
- "id": "164",
- "first-name": "Maximilian",
- "last-name": "Mann",
- "email": "samir@stehr.biz",
- "date": "1993-08-21 15:54:18 -0700",
- "content":
- "Minus quae voluptatem sequi. Distinctio voluptatem amet iusto velit et praesentium. Distinctio ipsum voluptas voluptas.",
- "subject": "Facere voluptatem laudantium laboriosam omnis"
- },
-
- {
- "id": "165",
- "first-name": "Jennyfer",
- "last-name": "Satterfield",
- "email": "janiya_senger@olson.info",
- "date": "2006-09-21 00:36:50 -0700",
- "content": "Doloribus praesentium excepturi omnis.",
- "subject": "Non fuga unde incidunt ad exercitationem maxime laboriosam qui"
- },
-
- {
- "id": "166",
- "first-name": "Robin",
- "last-name": "Murray",
- "email": "alycia@cruickshank.name",
- "date": "1985-10-04 03:44:39 -0700",
- "content": "Repudiandae dolorem ut. Possimus earum dignissimos temporibus amet vel eum.",
- "subject": "Vel culpa debitis quam"
- },
-
- {
- "id": "167",
- "first-name": "Albina",
- "last-name": "Reinger",
- "email": "guie.gleason@gorczany.info",
- "date": "1985-10-02 08:07:53 -0700",
- "content": "Natus rerum repellat voluptas. Distinctio dolor est in dolores.",
- "subject": "Modi perspiciatis iure odio hic et dignissimos rem qui"
- },
-
- {
- "id": "168",
- "first-name": "Eloisa",
- "last-name": "Wolf",
- "email": "leopold@jenkins.info",
- "date": "2007-02-19 09:25:29 -0800",
- "content": "Corporis ut dolorem ullam quidem ratione. Nam eveniet dicta autem eum.",
- "subject": "Facilis voluptas vel repellat et aut amet est"
- },
-
- {
- "id": "169",
- "first-name": "Caden",
- "last-name": "Cartwright",
- "email": "mohammad_lockman@okoncrooks.net",
- "date": "1974-11-14 03:12:44 -0800",
- "content":
- "Sunt nobis voluptate quasi sapiente magni a officia. Laudantium perspiciatis quod quis quidem voluptatum pariatur. Sit ut optio tempora.",
- "subject": "Nihil maxime officia et repellat"
- },
-
- {
- "id": "170",
- "first-name": "Raul",
- "last-name": "Sipes",
- "email": "danial.miller@kulas.info",
- "date": "1996-12-11 14:14:16 -0800",
- "content":
- "Ea rerum quo id omnis. Hic est voluptate voluptatem ut. Rerum eos ipsa laboriosam et ut expedita.",
- "subject": "Aliquam reiciendis quam expedita sed ad neque voluptas"
- },
-
- {
- "id": "171",
- "first-name": "Allie",
- "last-name": "Runolfsson",
- "email": "skye@marvin.com",
- "date": "2011-07-31 19:37:22 -0700",
- "content": "Perspiciatis mollitia fugit sunt et.",
- "subject": "Nihil expedita neque reprehenderit"
- },
-
- {
- "id": "172",
- "first-name": "Belle",
- "last-name": "Nader",
- "email": "eugenia@mante.info",
- "date": "1995-09-06 05:30:08 -0700",
- "content": "Expedita delectus quis ipsa dolore voluptatum.",
- "subject": "Recusandae quasi ullam consequatur assumenda aliquid unde"
- },
-
- {
- "id": "173",
- "first-name": "Clemens",
- "last-name": "Tromp",
- "email": "geovanny@kilback.org",
- "date": "1980-11-28 08:48:35 -0800",
- "content": "Sint eos ea quidem tempora.",
- "subject": "Velit aperiam consequatur ut et aliquam at"
- },
-
- {
- "id": "174",
- "first-name": "Bettie",
- "last-name": "Mueller",
- "email": "edgardo@little.net",
- "date": "1983-06-26 14:10:56 -0700",
- "content": "Dolore tempore accusamus.",
- "subject": "Autem tempore et ut"
- },
-
- {
- "id": "175",
- "first-name": "Guy",
- "last-name": "King",
- "email": "macie@schmeler.info",
- "date": "1999-03-28 22:34:59 -0800",
- "content": "Recusandae laborum ut et eaque eum.",
- "subject": "Dolor ullam totam consequatur eos fuga"
- },
-
- {
- "id": "176",
- "first-name": "Cydney",
- "last-name": "Cronin",
- "email": "camren@thompson.org",
- "date": "1993-10-23 02:50:41 -0700",
- "content": "Exercitationem modi eos sint vero. Iste possimus quis. Non est voluptas.",
- "subject": "Tempora ipsum soluta ut corrupti omnis in"
- },
-
- {
- "id": "177",
- "first-name": "Ludwig",
- "last-name": "Hoeger",
- "email": "javon@torpolson.info",
- "date": "2007-12-20 19:09:13 -0800",
- "content": "Architecto ut optio tempore pariatur itaque saepe.",
- "subject": "Earum unde quis officiis doloremque et animi qui"
- },
-
- {
- "id": "178",
- "first-name": "Travon",
- "last-name": "Jacobi",
- "email": "jameson_streich@hansen.org",
- "date": "2013-02-03 09:53:51 -0800",
- "content": "Autem dolorem totam atque id sit. Consectetur dolor maiores.",
- "subject": "Quia autem deleniti ullam neque odio"
- },
-
- {
- "id": "179",
- "first-name": "Brennan",
- "last-name": "Jaskolski",
- "email": "harold_thompson@schaefer.info",
- "date": "2004-01-13 10:53:47 -0800",
- "content": "Libero et dolorem nihil. Omnis consequuntur possimus ut.",
- "subject": "Eum labore omnis ipsa doloremque consequuntur soluta esse fuga"
- },
-
- {
- "id": "180",
- "first-name": "Clifton",
- "last-name": "Boyer",
- "email": "justine@skiles.biz",
- "date": "2000-01-28 22:33:14 -0800",
- "content":
- "Nobis recusandae fugiat quibusdam doloribus. Aut praesentium corrupti tenetur ullam quia.",
- "subject": "Ea dolorem voluptas aut cumque inventore delectus non molestiae"
- },
-
- {
- "id": "181",
- "first-name": "Walker",
- "last-name": "Rogahn",
- "email": "stanton@rempel.net",
- "date": "2012-04-02 20:05:38 -0700",
- "content": "Consectetur et soluta. Minus voluptatem quod aut vitae praesentium.",
- "subject": "Tenetur architecto reprehenderit corporis fuga et rerum vel"
- },
-
- {
- "id": "182",
- "first-name": "Jennings",
- "last-name": "Hills",
- "email": "kenton@murrayharvey.biz",
- "date": "2007-09-24 22:09:51 -0700",
- "content":
- "Velit porro quidem nostrum. Perspiciatis consequatur consectetur reiciendis sunt cupiditate quae. Vitae et ut autem iure.",
- "subject": "Cupiditate quis maiores omnis"
- },
-
- {
- "id": "183",
- "first-name": "Julianne",
- "last-name": "O'Kon",
- "email": "helene@abshire.com",
- "date": "1987-02-09 22:56:12 -0800",
- "content":
- "Voluptas voluptatem veniam porro dolorem maxime. Itaque eveniet laborum optio sed aspernatur omnis. Veritatis enim itaque sint illo ipsam eius.",
- "subject": "Corporis et laboriosam aspernatur aut"
- },
-
- {
- "id": "184",
- "first-name": "Raymond",
- "last-name": "Orn",
- "email": "cloyd@rempel.biz",
- "date": "2014-02-04 04:33:02 -0800",
- "content":
- "Eum voluptatibus accusantium rem. Deleniti harum eum. Illo est facere illum saepe voluptas.",
- "subject": "Eveniet est architecto id ut rerum nam quidem"
- },
-
- {
- "id": "185",
- "first-name": "Johan",
- "last-name": "Legros",
- "email": "rosie_ernser@wolf.com",
- "date": "1989-03-02 11:17:10 -0800",
- "content": "Architecto explicabo praesentium amet eaque quibusdam.",
- "subject": "Consectetur fugiat iusto omnis aspernatur ut"
- },
-
- {
- "id": "186",
- "first-name": "Daryl",
- "last-name": "Labadie",
- "email": "ashly_thompson@casper.net",
- "date": "2003-01-28 00:02:56 -0800",
- "content": "Et est doloribus. Fuga hic sed voluptatibus ullam officia aspernatur.",
- "subject": "A sunt eum quas accusamus"
- },
-
- {
- "id": "187",
- "first-name": "Gavin",
- "last-name": "Moore",
- "email": "dahlia@leffleroberbrunner.biz",
- "date": "1970-10-15 07:36:57 -0700",
- "content": "Sapiente ipsum magni dolore est dolor.",
- "subject": "Est maxime consequatur esse qui dicta aut quaerat"
- },
-
- {
- "id": "188",
- "first-name": "Coby",
- "last-name": "Swaniawski",
- "email": "millie.labadie@wuckert.name",
- "date": "2012-09-14 00:25:46 -0700",
- "content":
- "Magni qui molestias debitis reprehenderit vel quo est. Blanditiis debitis autem neque non illo.",
- "subject": "Rerum accusantium magni dolorem in reprehenderit et voluptas"
- },
-
- {
- "id": "189",
- "first-name": "Luis",
- "last-name": "Stracke",
- "email": "merle@mrazswaniawski.biz",
- "date": "2007-11-11 05:28:46 -0800",
- "content": "Neque magnam sint porro reprehenderit quo. In et reiciendis non velit et eum quos.",
- "subject": "Sit voluptates nulla perspiciatis debitis dolor eaque a"
- },
-
- {
- "id": "190",
- "first-name": "Leone",
- "last-name": "Huel",
- "email": "emil@botsford.biz",
- "date": "2004-03-16 23:46:45 -0800",
- "content": "Vitae amet et quae ullam.",
- "subject": "Rerum enim voluptate qui"
- },
-
- {
- "id": "191",
- "first-name": "Aylin",
- "last-name": "Kling",
- "email": "anderson_jast@kozeyparisian.com",
- "date": "1979-06-17 04:05:50 -0700",
- "content": "Quam eligendi numquam sint. Non ipsa et qui error dolor velit.",
- "subject": "Culpa iste rerum facere praesentium deleniti sequi"
- },
-
- {
- "id": "192",
- "first-name": "Junior",
- "last-name": "Bartoletti",
- "email": "te@kuvalis.net",
- "date": "1994-12-09 11:00:34 -0800",
- "content": "Velit eos et nemo dolore eum necessitatibus. Ea inventore adipisci.",
- "subject": "Velit dolorem cumque ipsa"
- },
-
- {
- "id": "193",
- "first-name": "Nathanael",
- "last-name": "Hermiston",
- "email": "macy.cole@wittingcasper.info",
- "date": "2002-01-06 17:45:52 -0800",
- "content":
- "Corporis occaecati quidem quia repudiandae repellendus beatae similique. Inventore quo ullam.",
- "subject": "Quidem expedita quia inventore dolores ratione totam et dignissimos"
- },
-
- {
- "id": "194",
- "first-name": "Hal",
- "last-name": "Bruen",
- "email": "nathen.ziemann@gerlachko.name",
- "date": "1996-03-01 01:35:30 -0800",
- "content":
- "Qui eius aspernatur et aut et vel in. Adipisci aliquid consequatur dolores et ut. Est aut temporibus.",
- "subject": "Voluptas placeat eveniet non quas assumenda quam minus"
- },
-
- {
- "id": "195",
- "first-name": "Freddie",
- "last-name": "Thompson",
- "email": "elia@aufderharbrown.org",
- "date": "2005-03-20 05:07:30 -0800",
- "content": "Dolor nemo sed molestiae quae quia.",
- "subject": "Quam sint et voluptatem et fuga sint ut saepe"
- },
-
- {
- "id": "196",
- "first-name": "Aida",
- "last-name": "Gorczany",
- "email": "olga.labadie@abshire.name",
- "date": "1989-07-26 04:26:19 -0700",
- "content":
- "Sit qui voluptatem facere. Similique alias quia sit ipsum. Ut corrupti tempore molestiae.",
- "subject": "Qui veniam blanditiis nesciunt beatae tempore aut fugiat maiores"
- },
-
- {
- "id": "197",
- "first-name": "Isabelle",
- "last-name": "Collier",
- "email": "christiana_gottlieb@borer.biz",
- "date": "1978-05-15 13:13:34 -0700",
- "content": "Aliquam earum velit ut.",
- "subject": "Neque et voluptate ratione totam voluptas est nulla ipsum"
- },
-
- {
- "id": "198",
- "first-name": "Ida",
- "last-name": "Reichert",
- "email": "mervin@keeling.com",
- "date": "1991-02-06 05:02:15 -0800",
- "content":
- "Velit in at et dicta tenetur. Doloremque cupiditate est. Excepturi non minus aspernatur dolores qui quaerat architecto.",
- "subject": "Ut voluptas qui ad minus"
- },
-
- {
- "id": "199",
- "first-name": "Angelina",
- "last-name": "Mueller",
- "email": "leonel@purdyschroeder.org",
- "date": "2008-06-17 01:01:57 -0700",
- "content":
- "Recusandae eius non necessitatibus. Quisquam qui quo. Voluptas dolorem dolorem sit repellat laudantium ducimus qui.",
- "subject": "Dolorem atque impedit qui soluta"
- },
-
- {
- "id": "200",
- "first-name": "Marcelle",
- "last-name": "Connelly",
- "email": "heath@leuschke.net",
- "date": "1983-10-02 18:32:18 -0700",
- "content":
- "Debitis quasi voluptates et voluptatibus rerum. Et explicabo quia qui qui voluptate dolor.",
- "subject": "Rem molestiae nobis consequatur eligendi ut"
- },
- {
- "id": "201",
- "first-name": "Bob",
- "last-name": "Brown",
- "email": "bob@brown.net",
- "date": "1983-10-02 18:32:18 -0700",
- "content":
- "Debitis quasi voluptates et voluptatibus rerum. Et explicabo quia qui qui voluptate dolor.",
- "subject": "Urgent question about whipped cream",
- "draft": true
- },
- {
- "id": "202",
- "first-name": "Mary",
- "last-name": "Jones",
- "email": "mary@jones.net",
- "date": "1983-10-02 18:32:18 -0700",
- "content":
- "Debitis quasi voluptates et voluptatibus rerum. Et explicabo quia qui qui voluptate dolor.",
- "subject": "Fwd: wedding photos",
- "draft": true
- }
-]
diff --git a/modules/playground/src/alt_routing/app/drafts.html b/modules/playground/src/alt_routing/app/drafts.html
deleted file mode 100644
index 62d968bc1c..0000000000
--- a/modules/playground/src/alt_routing/app/drafts.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
diff --git a/modules/playground/src/alt_routing/app/inbox-app.html b/modules/playground/src/alt_routing/app/inbox-app.html
deleted file mode 100644
index 34880f6b11..0000000000
--- a/modules/playground/src/alt_routing/app/inbox-app.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
- Inbox
- Drafts
-
-
diff --git a/modules/playground/src/alt_routing/app/inbox-app.ts b/modules/playground/src/alt_routing/app/inbox-app.ts
deleted file mode 100644
index b7bc191c64..0000000000
--- a/modules/playground/src/alt_routing/app/inbox-app.ts
+++ /dev/null
@@ -1,167 +0,0 @@
-import {Component, Injectable} from '@angular/core';
-import {
- Routes,
- Route,
- Router,
- ROUTER_DIRECTIVES,
- ROUTER_PROVIDERS,
- OnActivate,
- RouteSegment,
- RouteTree,
- UrlTree
-} from '@angular/router';
-import * as db from './data';
-import {Location} from '@angular/common';
-import {PromiseWrapper} from '@angular/core/src/facade/async';
-import {isPresent, DateWrapper} from '@angular/core/src/facade/lang';
-import {PromiseCompleter} from '@angular/core/src/facade/promise';
-
-class InboxRecord {
- id: string = '';
- subject: string = '';
- content: string = '';
- email: string = '';
- firstName: string = '';
- lastName: string = '';
- date: string;
- draft: boolean = false;
-
- constructor(data: {
- id: string,
- subject: string,
- content: string,
- email: string,
- firstName: string,
- lastName: string,
- date: string, draft?: boolean
- } = null) {
- if (isPresent(data)) {
- this.setData(data);
- }
- }
-
- setData(record: {
- id: string,
- subject: string,
- content: string,
- email: string,
- firstName: string,
- lastName: string,
- date: string, draft?: boolean
- }) {
- this.id = record['id'];
- this.subject = record['subject'];
- this.content = record['content'];
- this.email = record['email'];
- this.firstName = (record as any /** TODO #9100 */)['first-name'];
- this.lastName = (record as any /** TODO #9100 */)['last-name'];
- this.date = record['date'];
- this.draft = record['draft'] == true;
- }
-}
-
-@Injectable()
-class DbService {
- getData(): Promise {
- var p = new PromiseCompleter();
- p.resolve(db.data);
- return p.promise;
- }
-
- drafts(): Promise {
- return this.getData().then(
- (data: any[]): any[] =>
- data.filter(record => isPresent(record['draft']) && record['draft'] == true));
- }
-
- emails(): Promise {
- return this.getData().then((data: any[]): any[] =>
- data.filter(record => !isPresent(record['draft'])));
- }
-
- email(id: any /** TODO #9100 */): Promise {
- return PromiseWrapper.then(this.getData(), (data: any[]) => {
- for (var i = 0; i < data.length; i++) {
- var entry = data[i];
- if (entry['id'] == id) {
- return entry;
- }
- }
- return null;
- });
- }
-}
-
-@Component(
- {selector: 'inbox-detail', directives: ROUTER_DIRECTIVES, templateUrl: 'app/inbox-detail.html'})
-class InboxDetailCmp implements OnActivate {
- record: InboxRecord = new InboxRecord();
- ready: boolean = false;
-
- constructor(private _db: DbService) {}
-
- routerOnActivate(curr: RouteSegment, prev?: RouteSegment, currTree?: RouteTree,
- prevTree?: RouteTree): void {
- let id = curr.getParam("id");
- this._db.email(id).then(data => this.record.setData(data));
- }
-}
-
-@Component({selector: 'inbox', templateUrl: 'app/inbox.html', directives: ROUTER_DIRECTIVES})
-class InboxCmp implements OnActivate {
- items: InboxRecord[] = [];
- ready: boolean = false;
-
- constructor(private _db: DbService) {}
-
- routerOnActivate(curr: RouteSegment, prev?: RouteSegment, currTree?: RouteTree,
- prevTree?: RouteTree): void {
- var sortType = curr.getParam('sort');
- var sortEmailsByDate = isPresent(sortType) && sortType == "date";
-
- PromiseWrapper.then(this._db.emails(), (emails: any[]) => {
- this.ready = true;
- this.items = emails.map(data => new InboxRecord(data));
-
- if (sortEmailsByDate) {
- this.items.sort((a: InboxRecord, b: InboxRecord) =>
- DateWrapper.toMillis(DateWrapper.fromISOString(a.date)) <
- DateWrapper.toMillis(DateWrapper.fromISOString(b.date)) ?
- -1 :
- 1);
- }
- });
- }
-}
-
-
-@Component({selector: 'drafts', templateUrl: 'app/drafts.html', directives: ROUTER_DIRECTIVES})
-class DraftsCmp {
- items: InboxRecord[] = [];
- ready: boolean = false;
-
- constructor(db: DbService) {
- PromiseWrapper.then(db.drafts(), (drafts: any[]) => {
- this.ready = true;
- this.items = drafts.map(data => new InboxRecord(data));
- });
- }
-}
-
-@Component({
- selector: 'inbox-app',
- providers: [DbService, ROUTER_PROVIDERS],
- templateUrl: 'app/inbox-app.html',
- directives: ROUTER_DIRECTIVES,
-})
-@Routes([
- new Route({path: '/', component: InboxCmp}),
- new Route({path: '/inbox', component: InboxCmp}),
- new Route({path: '/drafts', component: DraftsCmp}),
- new Route({path: '/detail/:id', component: InboxDetailCmp})
-])
-export class InboxApp {
- constructor(private _location: Location) {}
- inboxPageActive() { return this._location.path() == ''; }
- draftsPageActive() { return this._location.path() == '/drafts'; }
-}
diff --git a/modules/playground/src/alt_routing/app/inbox-detail.html b/modules/playground/src/alt_routing/app/inbox-detail.html
deleted file mode 100644
index 38efc5e60b..0000000000
--- a/modules/playground/src/alt_routing/app/inbox-detail.html
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
{{ record.subject }}
-
-
- - ID: {{ record.id }}
- - Name: {{ record.firstName }} {{ record.lastName }}
- - Email: {{ record.email }}
- - Date: {{ record.date }}
-
-
-
- {{ record.content }}
-
-
-
- Back
-
-
-
-
-
- View Latest Messages
-
-
diff --git a/modules/playground/src/alt_routing/app/inbox.html b/modules/playground/src/alt_routing/app/inbox.html
deleted file mode 100644
index c33bdbdad6..0000000000
--- a/modules/playground/src/alt_routing/app/inbox.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
\ No newline at end of file
diff --git a/modules/playground/src/alt_routing/css/app.css b/modules/playground/src/alt_routing/css/app.css
deleted file mode 100644
index 42945f32a4..0000000000
--- a/modules/playground/src/alt_routing/css/app.css
+++ /dev/null
@@ -1,57 +0,0 @@
-body {
- background:#eee;
- color:black;
-}
-
-.inbox-list,
-.inbox-list li {
- list-style:none;
- padding:0;
- margin:0;
-}
-
-.inbox-list a {
- padding:5px;
- display:block;
-}
-
-inbox, drafts, inbox-side-menu {
- display:block;
-}
-
-inbox-side-menu .link {
- display:block;
- text-align:center;
- padding:1em;
-}
-
-inbox-side-menu .link.active {
- background:white;
-}
-
-inbox-side-menu .link:hover {
- background:#eee;
-}
-
-inbox-side-menu {
- position:fixed;
- left:0;
- top:0;
- bottom:0;
- width:200px;
- background:#ddd;
-}
-
-inbox-side-menu a {
- display: block;
-}
-
-inbox, drafts, inbox-detail {
- padding:1em;
- margin-left:200px;
-}
-
-inbox-detail {
- display:block;
- margin-left:200px;
-}
diff --git a/modules/playground/src/alt_routing/index.html b/modules/playground/src/alt_routing/index.html
deleted file mode 100644
index f9d15c8609..0000000000
--- a/modules/playground/src/alt_routing/index.html
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
- Routing Example
-
-
-
-
-
- Loading...
-
-
-
-
-
diff --git a/modules/playground/src/alt_routing/index.ts b/modules/playground/src/alt_routing/index.ts
deleted file mode 100644
index e829e12149..0000000000
--- a/modules/playground/src/alt_routing/index.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import {InboxApp} from './app/inbox-app';
-import {bootstrap} from '@angular/platform-browser-dynamic';
-import {HashLocationStrategy, LocationStrategy} from '@angular/common';
-import {ROUTER_PROVIDERS} from '@angular/router-deprecated';
-
-export function main() {
- bootstrap(InboxApp,
- [ROUTER_PROVIDERS, {provide: LocationStrategy, useClass: HashLocationStrategy}]);
-}
diff --git a/modules/playground/src/bootstrap.ts b/modules/playground/src/bootstrap.ts
index 0ae0731808..b7f2f7babd 100644
--- a/modules/playground/src/bootstrap.ts
+++ b/modules/playground/src/bootstrap.ts
@@ -25,7 +25,6 @@ declare var System: any;
'@angular/platform-browser-dynamic': '/packages-dist/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
'@angular/http': '/packages-dist/http/bundles/http.umd.js',
'@angular/upgrade': '/packages-dist/upgrade/bundles/upgrade.umd.js',
- '@angular/router': '/packages-dist/router/bundles/router.umd.js',
'@angular/router-deprecated': '/packages-dist/router-deprecated/bundles/router-deprecated.umd.js',
'@angular/core/src/facade': '/all/@angular/core/src/facade',
'rxjs': location.pathname.replace(/\w+\.html$/i, '') + 'rxjs'
@@ -50,8 +49,7 @@ declare var System: any;
'@angular/compiler': {main: 'index.js', defaultExtension: 'js'},
'@angular/common': {main: 'index.js', defaultExtension: 'js'},
'@angular/platform-browser': {main: 'index.js', defaultExtension: 'js'},
- '@angular/platform-browser-dynamic': {main: 'index.js', defaultExtension: 'js'},
- '@angular/router': {main: 'index.js', defaultExtension: 'js'},
+ '@angular/platform-browser-dynamic': {main: 'index.js', defaultExtension: 'js'}
// 'rxjs': {
// defaultExtension: 'js'
// }
diff --git a/modules/playground/src/web_workers/images/loader.js b/modules/playground/src/web_workers/images/loader.js
index 8e7648ffe0..a83602dd2e 100644
--- a/modules/playground/src/web_workers/images/loader.js
+++ b/modules/playground/src/web_workers/images/loader.js
@@ -16,7 +16,7 @@ System.config({
'@angular/compiler': {main: 'index.js', defaultExtension: 'js'},
'@angular/common': {main: 'index.js', defaultExtension: 'js'},
'@angular/platform-browser': {main: 'index.js', defaultExtension: 'js'},
- '@angular/router': {main: 'index.js', defaultExtension: 'js'},
+ '@angular/router-deprecated': {main: 'index.js', defaultExtension: 'js'},
'rxjs': {
defaultExtension: 'js'
}
diff --git a/modules/playground/src/web_workers/input/loader.js b/modules/playground/src/web_workers/input/loader.js
index c1dbcadac2..8fbfba90bd 100644
--- a/modules/playground/src/web_workers/input/loader.js
+++ b/modules/playground/src/web_workers/input/loader.js
@@ -16,7 +16,7 @@ System.config({
'@angular/common': {main: 'index.js', defaultExtension: 'js'},
'@angular/platform-browser': {main: 'index.js', defaultExtension: 'js'},
'@angular/platform-browser-dynamic': {main: 'index.js', defaultExtension: 'js'},
- '@angular/router': {main: 'index.js', defaultExtension: 'js'},
+ '@angular/router-deprecated': {main: 'index.js', defaultExtension: 'js'},
'rxjs': {
defaultExtension: 'js'
}
diff --git a/modules/playground/src/web_workers/kitchen_sink/loader.js b/modules/playground/src/web_workers/kitchen_sink/loader.js
index 53436e7535..6e7d397d45 100644
--- a/modules/playground/src/web_workers/kitchen_sink/loader.js
+++ b/modules/playground/src/web_workers/kitchen_sink/loader.js
@@ -16,7 +16,7 @@ System.config({
'@angular/common': {main: 'index.js', defaultExtension: 'js'},
'@angular/platform-browser': {main: 'index.js', defaultExtension: 'js'},
'@angular/platform-browser-dynamic': {main: 'index.js', defaultExtension: 'js'},
- '@angular/router': {main: 'index.js', defaultExtension: 'js'},
+ '@angular/router-deprecated': {main: 'index.js', defaultExtension: 'js'},
'rxjs': {
defaultExtension: 'js'
},
diff --git a/modules/playground/src/web_workers/message_broker/loader.js b/modules/playground/src/web_workers/message_broker/loader.js
index 8701b0620e..080ba9755f 100644
--- a/modules/playground/src/web_workers/message_broker/loader.js
+++ b/modules/playground/src/web_workers/message_broker/loader.js
@@ -16,7 +16,7 @@ System.config({
'@angular/common': {main: 'index.js', defaultExtension: 'js'},
'@angular/platform-browser': {main: 'index.js', defaultExtension: 'js'},
'@angular/platform-browser-dynamic': {main: 'index.js', defaultExtension: 'js'},
- '@angular/router': {main: 'index.js', defaultExtension: 'js'},
+ '@angular/router-deprecated': {main: 'index.js', defaultExtension: 'js'},
'rxjs': {
defaultExtension: 'js'
},
diff --git a/modules/playground/src/web_workers/router/loader.js b/modules/playground/src/web_workers/router/loader.js
index ac7ab9469f..7cb0f7ecff 100644
--- a/modules/playground/src/web_workers/router/loader.js
+++ b/modules/playground/src/web_workers/router/loader.js
@@ -16,7 +16,6 @@ System.config({
'@angular/common': {main: 'index.js', defaultExtension: 'js'},
'@angular/platform-browser': {main: 'index.js', defaultExtension: 'js'},
'@angular/platform-browser-dynamic': {main: 'index.js', defaultExtension: 'js'},
- '@angular/router': {main: 'index.js', defaultExtension: 'js'},
'@angular/router-deprecated': {main: 'index.js', defaultExtension: 'js'},
'rxjs': {
defaultExtension: 'js'
diff --git a/modules/playground/src/web_workers/todo/loader.js b/modules/playground/src/web_workers/todo/loader.js
index e5ea058175..f5f1488c27 100644
--- a/modules/playground/src/web_workers/todo/loader.js
+++ b/modules/playground/src/web_workers/todo/loader.js
@@ -16,7 +16,7 @@ System.config({
'@angular/common': {main: 'index.js', defaultExtension: 'js'},
'@angular/platform-browser': {main: 'index.js', defaultExtension: 'js'},
'@angular/platform-browser-dynamic': {main: 'index.js', defaultExtension: 'js'},
- '@angular/router': {main: 'index.js', defaultExtension: 'js'},
+ '@angular/router-deprecated': {main: 'index.js', defaultExtension: 'js'},
'rxjs': {
defaultExtension: 'js'
}
diff --git a/publish-packages.sh b/publish-packages.sh
index 9dbe891046..d39bcdc7f2 100755
--- a/publish-packages.sh
+++ b/publish-packages.sh
@@ -26,7 +26,6 @@ for PACKAGE in \
http \
platform-browser \
platform-server \
- router \
router-deprecated \
upgrade
do
diff --git a/scripts/ci/build_dart_ddc.sh b/scripts/ci/build_dart_ddc.sh
index 700870874c..fc2194ea2f 100755
--- a/scripts/ci/build_dart_ddc.sh
+++ b/scripts/ci/build_dart_ddc.sh
@@ -64,7 +64,6 @@ $DART_SDK/bin/dart $DDC_DIR/bin/dartdevc.dart \
src/person_management/index.dart \
src/relative_assets/index.dart \
src/routing/index.dart \
- src/alt_routing/index.dart \
src/sourcemap/index.dart \
src/svg/index.dart \
src/template_driven_forms/index.dart \
diff --git a/test-main.js b/test-main.js
index 644375ef08..a0118f8aff 100644
--- a/test-main.js
+++ b/test-main.js
@@ -41,10 +41,6 @@ System.config({
main: 'index.js',
defaultExtension: 'js'
},
- '@angular/router': {
- main: 'index.js',
- defaultExtension: 'js'
- },
'@angular/router-deprecated': {
main: 'index.js',
defaultExtension: 'js'
diff --git a/tools/broccoli/trees/browser_tree.ts b/tools/broccoli/trees/browser_tree.ts
index e63e65c382..add4c1d8f1 100644
--- a/tools/broccoli/trees/browser_tree.ts
+++ b/tools/broccoli/trees/browser_tree.ts
@@ -52,7 +52,6 @@ const kServedPaths = [
'playground/src/key_events',
'playground/src/relative_assets',
'playground/src/routing',
- 'playground/src/alt_routing',
'playground/src/sourcemap',
'playground/src/svg',
'playground/src/todo',
diff --git a/tools/typings-test/include-all.ts b/tools/typings-test/include-all.ts
index dd205706eb..60adc358b3 100644
--- a/tools/typings-test/include-all.ts
+++ b/tools/typings-test/include-all.ts
@@ -10,10 +10,8 @@ import * as platformBrowserDynmic from '@angular/platform-browser-dynamic';
import * as platformBrowser from '@angular/platform-browser/testing';
import * as platfomrServerTesting from '@angular/platform-server';
import * as platfomrServer from '@angular/platform-server/testing';
-import * as router from '@angular/router';
import * as routerDeprecatedTesting from '@angular/router-deprecated';
import * as routerDeprecated from '@angular/router-deprecated/testing';
-import * as routerTesting from '@angular/router/testing';
import * as upgrade from '@angular/upgrade';
export default {
@@ -29,8 +27,6 @@ export default {
platformBrowserDynmic,
platfomrServer,
platfomrServerTesting,
- router,
- routerTesting,
routerDeprecated,
routerDeprecatedTesting,
upgrade
diff --git a/tools/typings-test/test.sh b/tools/typings-test/test.sh
index ef20426d38..6532d52b91 100755
--- a/tools/typings-test/test.sh
+++ b/tools/typings-test/test.sh
@@ -3,7 +3,7 @@ set -ex -o pipefail
# These ones can be `npm link`ed for fast development
LINKABLE_PKGS=(
- $(pwd)/dist/packages-dist/{common,core,compiler,compiler-cli,http,router,router-deprecated,upgrade,platform-{browser,browser-dynamic,server}}
+ $(pwd)/dist/packages-dist/{common,core,compiler,compiler-cli,http,router-deprecated,upgrade,platform-{browser,browser-dynamic,server}}
)
TMPDIR=${TMPDIR:-/tmp/angular-build/}