You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by da...@apache.org on 2017/06/30 22:41:39 UTC

[09/52] [partial] incubator-trafficcontrol git commit: promotes TO experimental UI to the new Traffic Portal

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/parameters/profiles/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/parameters/profiles/index.js b/traffic_portal/app/src/modules/private/admin/parameters/profiles/index.js
new file mode 100644
index 0000000..3d4d59c
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/parameters/profiles/index.js
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.parameters.profiles', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficPortal.private.admin.parameters.profiles', {
+				url: '/{parameterId}/profiles',
+				views: {
+					parametersContent: {
+						templateUrl: 'common/modules/table/parameterProfiles/table.parameterProfiles.tpl.html',
+						controller: 'TableParameterProfilesController',
+						resolve: {
+							parameter: function($stateParams, parameterService) {
+								return parameterService.getParameter($stateParams.parameterId);
+							},
+							parameterProfiles: function($stateParams, profileService) {
+								return profileService.getParameterProfiles($stateParams.parameterId);
+							}
+						}
+					}
+				}
+			})
+		;
+		$urlRouterProvider.otherwise('/');
+	});

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/physLocations/PhysLocationsController.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/physLocations/PhysLocationsController.js b/traffic_portal/app/src/modules/private/admin/physLocations/PhysLocationsController.js
new file mode 100644
index 0000000..4879cab
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/physLocations/PhysLocationsController.js
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var PhysLocationsController = function() {
+};
+
+PhysLocationsController.$inject = [];
+module.exports = PhysLocationsController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/physLocations/edit/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/physLocations/edit/index.js b/traffic_portal/app/src/modules/private/admin/physLocations/edit/index.js
new file mode 100644
index 0000000..72b61cb
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/physLocations/edit/index.js
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.physLocations.edit', [])
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.physLocations.edit', {
+                url: '/{physLocationId:[0-9]{1,8}}',
+                views: {
+                    physLocationsContent: {
+                        templateUrl: 'common/modules/form/physLocation/form.physLocation.tpl.html',
+                        controller: 'FormEditPhysLocationController',
+                        resolve: {
+                            physLocation: function($stateParams, physLocationService) {
+                                return physLocationService.getPhysLocation($stateParams.physLocationId);
+                            }
+                        }
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/physLocations/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/physLocations/index.js b/traffic_portal/app/src/modules/private/admin/physLocations/index.js
new file mode 100644
index 0000000..5ce9a8f
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/physLocations/index.js
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.physLocations', [])
+    .controller('PhysLocationsController', require('./PhysLocationsController'))
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.physLocations', {
+                url: '/phys-locations',
+                abstract: true,
+                views: {
+                    adminContent: {
+                        templateUrl: 'modules/private/admin/physLocations/physLocations.tpl.html',
+                        controller: 'PhysLocationsController'
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/physLocations/list/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/physLocations/list/index.js b/traffic_portal/app/src/modules/private/admin/physLocations/list/index.js
new file mode 100644
index 0000000..a349255
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/physLocations/list/index.js
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.physLocations.list', [])
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.physLocations.list', {
+                url: '',
+                views: {
+                    physLocationsContent: {
+                        templateUrl: 'common/modules/table/physLocations/table.physLocations.tpl.html',
+                        controller: 'TablePhysLocationsController',
+                        resolve: {
+                            physLocations: function(physLocationService) {
+                                return physLocationService.getPhysLocations();
+                            }
+                        }
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/physLocations/new/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/physLocations/new/index.js b/traffic_portal/app/src/modules/private/admin/physLocations/new/index.js
new file mode 100644
index 0000000..ec689f4
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/physLocations/new/index.js
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.physLocations.new', [])
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.physLocations.new', {
+                url: '/new',
+                views: {
+                    physLocationsContent: {
+                        templateUrl: 'common/modules/form/physLocation/form.physLocation.tpl.html',
+                        controller: 'FormNewPhysLocationController',
+                        resolve: {
+                            physLocation: function() {
+                                return {};
+                            }
+                        }
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/physLocations/physLocations.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/physLocations/physLocations.tpl.html b/traffic_portal/app/src/modules/private/admin/physLocations/physLocations.tpl.html
new file mode 100644
index 0000000..dce6e52
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/physLocations/physLocations.tpl.html
@@ -0,0 +1,22 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<div id="locationsContainer">
+    <div ui-view="physLocationsContent"></div>
+</div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/physLocations/servers/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/physLocations/servers/index.js b/traffic_portal/app/src/modules/private/admin/physLocations/servers/index.js
new file mode 100644
index 0000000..7defcab
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/physLocations/servers/index.js
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.physLocations.servers', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficPortal.private.admin.physLocations.servers', {
+				url: '/{physLocationId}/servers',
+				views: {
+					physLocationsContent: {
+						templateUrl: 'common/modules/table/physLocationServers/table.physLocationServers.tpl.html',
+						controller: 'TablePhysLocationServersController',
+						resolve: {
+							physLocation: function($stateParams, physLocationService) {
+								return physLocationService.getPhysLocation($stateParams.physLocationId);
+							},
+							servers: function($stateParams, serverService) {
+								return serverService.getServers({ physLocation: $stateParams.physLocationId });
+							}
+						}
+					}
+				}
+			})
+		;
+		$urlRouterProvider.otherwise('/');
+	});

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/profiles/ProfilesController.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/profiles/ProfilesController.js b/traffic_portal/app/src/modules/private/admin/profiles/ProfilesController.js
new file mode 100644
index 0000000..f7e3264
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/profiles/ProfilesController.js
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var ProfilesController = function() {
+};
+
+ProfilesController.$inject = [];
+module.exports = ProfilesController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/profiles/deliveryServices/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/profiles/deliveryServices/index.js b/traffic_portal/app/src/modules/private/admin/profiles/deliveryServices/index.js
new file mode 100644
index 0000000..ea65412
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/profiles/deliveryServices/index.js
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.profiles.deliveryServices', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficPortal.private.admin.profiles.deliveryServices', {
+				url: '/{profileId}/delivery-services',
+				views: {
+					profilesContent: {
+						templateUrl: 'common/modules/table/profileDeliveryServices/table.profileDeliveryServices.tpl.html',
+						controller: 'TableProfileDeliveryServicesController',
+						resolve: {
+							profile: function($stateParams, profileService) {
+								return profileService.getProfile($stateParams.profileId);
+							},
+							deliveryServices: function($stateParams, deliveryServiceService) {
+								return deliveryServiceService.getDeliveryServices({ profile: $stateParams.profileId });
+							}
+						}
+					}
+				}
+			})
+		;
+		$urlRouterProvider.otherwise('/');
+	});

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/profiles/edit/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/profiles/edit/index.js b/traffic_portal/app/src/modules/private/admin/profiles/edit/index.js
new file mode 100644
index 0000000..c7765e8
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/profiles/edit/index.js
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.profiles.edit', [])
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.profiles.edit', {
+                url: '/{profileId:[0-9]{1,8}}',
+                views: {
+                    profilesContent: {
+                        templateUrl: 'common/modules/form/profile/form.profile.tpl.html',
+                        controller: 'FormEditProfileController',
+                        resolve: {
+                            profile: function($stateParams, profileService) {
+                                return profileService.getProfile($stateParams.profileId);
+                            }
+                        }
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/profiles/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/profiles/index.js b/traffic_portal/app/src/modules/private/admin/profiles/index.js
new file mode 100644
index 0000000..39af410
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/profiles/index.js
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.profiles', [])
+    .controller('ProfilesController', require('./ProfilesController'))
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.profiles', {
+                url: '/profiles',
+                abstract: true,
+                views: {
+                    adminContent: {
+                        templateUrl: 'modules/private/admin/profiles/profiles.tpl.html',
+                        controller: 'ProfilesController'
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/profiles/list/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/profiles/list/index.js b/traffic_portal/app/src/modules/private/admin/profiles/list/index.js
new file mode 100644
index 0000000..ab14cac
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/profiles/list/index.js
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.profiles.list', [])
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.profiles.list', {
+                url: '',
+                views: {
+                    profilesContent: {
+                        templateUrl: 'common/modules/table/profiles/table.profiles.tpl.html',
+                        controller: 'TableProfilesController',
+                        resolve: {
+                            profiles: function(profileService) {
+                                return profileService.getProfiles();
+                            }
+                        }
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/profiles/new/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/profiles/new/index.js b/traffic_portal/app/src/modules/private/admin/profiles/new/index.js
new file mode 100644
index 0000000..6ebc597
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/profiles/new/index.js
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.profiles.new', [])
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.profiles.new', {
+                url: '/new',
+                views: {
+                    profilesContent: {
+                        templateUrl: 'common/modules/form/profile/form.profile.tpl.html',
+                        controller: 'FormNewProfileController',
+                        resolve: {
+                            profile: function() {
+                                return {};
+                            }
+                        }
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/profiles/parameters/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/profiles/parameters/index.js b/traffic_portal/app/src/modules/private/admin/profiles/parameters/index.js
new file mode 100644
index 0000000..4a23692
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/profiles/parameters/index.js
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.profiles.parameters', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficPortal.private.admin.profiles.parameters', {
+				url: '/{profileId}/parameters',
+				views: {
+					profilesContent: {
+						templateUrl: 'common/modules/table/profileParameters/table.profileParameters.tpl.html',
+						controller: 'TableProfileParametersController',
+						resolve: {
+							profile: function($stateParams, profileService) {
+								return profileService.getProfile($stateParams.profileId);
+							},
+							profileParameters: function($stateParams, parameterService) {
+								return parameterService.getProfileParameters($stateParams.profileId);
+							}
+						}
+					}
+				}
+			})
+		;
+		$urlRouterProvider.otherwise('/');
+	});

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/profiles/profiles.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/profiles/profiles.tpl.html b/traffic_portal/app/src/modules/private/admin/profiles/profiles.tpl.html
new file mode 100644
index 0000000..4b35411
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/profiles/profiles.tpl.html
@@ -0,0 +1,22 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<div id="profilesContainer">
+    <div ui-view="profilesContent"></div>
+</div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/profiles/servers/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/profiles/servers/index.js b/traffic_portal/app/src/modules/private/admin/profiles/servers/index.js
new file mode 100644
index 0000000..f1f9569
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/profiles/servers/index.js
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.profiles.servers', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficPortal.private.admin.profiles.servers', {
+				url: '/{profileId}/servers',
+				views: {
+					profilesContent: {
+						templateUrl: 'common/modules/table/profileServers/table.profileServers.tpl.html',
+						controller: 'TableProfileServersController',
+						resolve: {
+							profile: function($stateParams, profileService) {
+								return profileService.getProfile($stateParams.profileId);
+							},
+							servers: function($stateParams, serverService) {
+								return serverService.getServers({ profileId: $stateParams.profileId });
+							}
+						}
+					}
+				}
+			})
+		;
+		$urlRouterProvider.otherwise('/');
+	});

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/regions/RegionsController.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/regions/RegionsController.js b/traffic_portal/app/src/modules/private/admin/regions/RegionsController.js
new file mode 100644
index 0000000..002d01e
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/regions/RegionsController.js
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var RegionsController = function() {
+};
+
+RegionsController.$inject = [];
+module.exports = RegionsController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/regions/_regions.scss
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/regions/_regions.scss b/traffic_portal/app/src/modules/private/admin/regions/_regions.scss
new file mode 100644
index 0000000..d57b9c6
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/regions/_regions.scss
@@ -0,0 +1,16 @@
+/*
+
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+*/

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/regions/edit/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/regions/edit/index.js b/traffic_portal/app/src/modules/private/admin/regions/edit/index.js
new file mode 100644
index 0000000..2373fd8
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/regions/edit/index.js
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.regions.edit', [])
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.regions.edit', {
+                url: '/{regionId:[0-9]{1,8}}',
+                views: {
+                    regionsContent: {
+                        templateUrl: 'common/modules/form/region/form.region.tpl.html',
+                        controller: 'FormEditRegionController',
+                        resolve: {
+                            region: function($stateParams, regionService) {
+                                return regionService.getRegion($stateParams.regionId);
+                            }
+                        }
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/regions/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/regions/index.js b/traffic_portal/app/src/modules/private/admin/regions/index.js
new file mode 100644
index 0000000..7d5f5cb
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/regions/index.js
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.regions', [])
+    .controller('RegionsController', require('./RegionsController'))
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.regions', {
+                url: '/regions',
+                abstract: true,
+                views: {
+                    adminContent: {
+                        templateUrl: 'modules/private/admin/regions/regions.tpl.html',
+                        controller: 'RegionsController'
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/regions/list/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/regions/list/index.js b/traffic_portal/app/src/modules/private/admin/regions/list/index.js
new file mode 100644
index 0000000..573a6b8
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/regions/list/index.js
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.regions.list', [])
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.regions.list', {
+                url: '',
+                views: {
+                    regionsContent: {
+                        templateUrl: 'common/modules/table/regions/table.regions.tpl.html',
+                        controller: 'TableRegionsController',
+                        resolve: {
+                            regions: function(regionService) {
+                                return regionService.getRegions();
+                            }
+                        }
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/regions/new/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/regions/new/index.js b/traffic_portal/app/src/modules/private/admin/regions/new/index.js
new file mode 100644
index 0000000..180e559
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/regions/new/index.js
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.regions.new', [])
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.regions.new', {
+                url: '/new',
+                views: {
+                    regionsContent: {
+                        templateUrl: 'common/modules/form/region/form.region.tpl.html',
+                        controller: 'FormNewRegionController',
+                        resolve: {
+                            region: function() {
+                                return {};
+                            }
+                        }
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/regions/physLocations/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/regions/physLocations/index.js b/traffic_portal/app/src/modules/private/admin/regions/physLocations/index.js
new file mode 100644
index 0000000..f691704
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/regions/physLocations/index.js
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.regions.physLocations', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficPortal.private.admin.regions.physLocations', {
+				url: '/{regionId}/phys-locations',
+				views: {
+					regionsContent: {
+						templateUrl: 'common/modules/table/regionPhysLocations/table.regionPhysLocations.tpl.html',
+						controller: 'TableRegionPhysLocationsController',
+						resolve: {
+							region: function($stateParams, regionService) {
+								return regionService.getRegion($stateParams.regionId);
+							},
+							physLocations: function($stateParams, physLocationService) {
+								return physLocationService.getPhysLocations({ region: $stateParams.regionId });
+							}
+						}
+					}
+				}
+			})
+		;
+		$urlRouterProvider.otherwise('/');
+	});

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/regions/regions.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/regions/regions.tpl.html b/traffic_portal/app/src/modules/private/admin/regions/regions.tpl.html
new file mode 100644
index 0000000..f9af711
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/regions/regions.tpl.html
@@ -0,0 +1,22 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<div id="regionsContainer">
+    <div ui-view="regionsContent"></div>
+</div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/statuses/StatusesController.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/statuses/StatusesController.js b/traffic_portal/app/src/modules/private/admin/statuses/StatusesController.js
new file mode 100644
index 0000000..f25aedf
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/statuses/StatusesController.js
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var StatusesController = function() {
+};
+
+StatusesController.$inject = [];
+module.exports = StatusesController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/statuses/edit/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/statuses/edit/index.js b/traffic_portal/app/src/modules/private/admin/statuses/edit/index.js
new file mode 100644
index 0000000..6b48f0c
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/statuses/edit/index.js
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.statuses.edit', [])
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.statuses.edit', {
+                url: '/{statusId:[0-9]{1,8}}',
+                views: {
+                    statusesContent: {
+                        templateUrl: 'common/modules/form/status/form.status.tpl.html',
+                        controller: 'FormEditStatusController',
+                        resolve: {
+                            status: function($stateParams, statusService) {
+                                return statusService.getStatus($stateParams.statusId);
+                            }
+                        }
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/statuses/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/statuses/index.js b/traffic_portal/app/src/modules/private/admin/statuses/index.js
new file mode 100644
index 0000000..9e93c29
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/statuses/index.js
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.statuses', [])
+    .controller('StatusesController', require('./StatusesController'))
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.statuses', {
+                url: '/statuses',
+                abstract: true,
+                views: {
+                    adminContent: {
+                        templateUrl: 'modules/private/admin/statuses/statuses.tpl.html',
+                        controller: 'StatusesController'
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/statuses/list/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/statuses/list/index.js b/traffic_portal/app/src/modules/private/admin/statuses/list/index.js
new file mode 100644
index 0000000..f620372
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/statuses/list/index.js
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.statuses.list', [])
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.statuses.list', {
+                url: '',
+                views: {
+                    statusesContent: {
+                        templateUrl: 'common/modules/table/statuses/table.statuses.tpl.html',
+                        controller: 'TableStatusesController',
+                        resolve: {
+                            statuses: function(statusService) {
+                                return statusService.getStatuses();
+                            }
+                        }
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/statuses/new/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/statuses/new/index.js b/traffic_portal/app/src/modules/private/admin/statuses/new/index.js
new file mode 100644
index 0000000..e82e9cc
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/statuses/new/index.js
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.statuses.new', [])
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.statuses.new', {
+                url: '/new',
+                views: {
+                    statusesContent: {
+                        templateUrl: 'common/modules/form/status/form.status.tpl.html',
+                        controller: 'FormNewStatusController',
+                        resolve: {
+                            status: function() {
+                                return {};
+                            }
+                        }
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/statuses/servers/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/statuses/servers/index.js b/traffic_portal/app/src/modules/private/admin/statuses/servers/index.js
new file mode 100644
index 0000000..dbf01be
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/statuses/servers/index.js
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.statuses.servers', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficPortal.private.admin.statuses.servers', {
+				url: '/{statusId}/servers',
+				views: {
+					statusesContent: {
+						templateUrl: 'common/modules/table/statusServers/table.statusServers.tpl.html',
+						controller: 'TableStatusServersController',
+						resolve: {
+							status: function($stateParams, statusService) {
+								return statusService.getStatus($stateParams.statusId);
+							},
+							servers: function(status, serverService) {
+								return serverService.getServers({ status: status.name });
+							}
+						}
+					}
+				}
+			})
+		;
+		$urlRouterProvider.otherwise('/');
+	});

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/statuses/statuses.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/statuses/statuses.tpl.html b/traffic_portal/app/src/modules/private/admin/statuses/statuses.tpl.html
new file mode 100644
index 0000000..fff7089
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/statuses/statuses.tpl.html
@@ -0,0 +1,22 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<div id="statusesContainer">
+    <div ui-view="statusesContent"></div>
+</div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/tenants/TenantsController.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/tenants/TenantsController.js b/traffic_portal/app/src/modules/private/admin/tenants/TenantsController.js
new file mode 100644
index 0000000..0657d69
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/tenants/TenantsController.js
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var TenantsController = function() {
+};
+
+TenantsController.$inject = [];
+module.exports = TenantsController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/tenants/_tenants.scss
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/tenants/_tenants.scss b/traffic_portal/app/src/modules/private/admin/tenants/_tenants.scss
new file mode 100644
index 0000000..d57b9c6
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/tenants/_tenants.scss
@@ -0,0 +1,16 @@
+/*
+
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+*/

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/tenants/edit/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/tenants/edit/index.js b/traffic_portal/app/src/modules/private/admin/tenants/edit/index.js
new file mode 100644
index 0000000..f066098
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/tenants/edit/index.js
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.tenants.edit', [])
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.tenants.edit', {
+                url: '/{tenantId:[0-9]{1,8}}',
+                views: {
+                    tenantsContent: {
+                        templateUrl: 'common/modules/form/tenant/form.tenant.tpl.html',
+                        controller: 'FormEditTenantController',
+                        resolve: {
+                            tenant: function($stateParams, tenantService) {
+                                return tenantService.getTenant($stateParams.tenantId);
+                            }
+                        }
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/tenants/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/tenants/index.js b/traffic_portal/app/src/modules/private/admin/tenants/index.js
new file mode 100644
index 0000000..276d05a
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/tenants/index.js
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.tenants', [])
+    .controller('TenantsController', require('./TenantsController'))
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.tenants', {
+                url: '/tenants',
+                abstract: true,
+                views: {
+                    adminContent: {
+                        templateUrl: 'modules/private/admin/tenants/tenants.tpl.html',
+                        controller: 'TenantsController'
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/tenants/list/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/tenants/list/index.js b/traffic_portal/app/src/modules/private/admin/tenants/list/index.js
new file mode 100644
index 0000000..f297749
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/tenants/list/index.js
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.tenants.list', [])
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.tenants.list', {
+                url: '',
+                views: {
+                    tenantsContent: {
+                        templateUrl: 'common/modules/table/tenants/table.tenants.tpl.html',
+                        controller: 'TableTenantsController',
+                        resolve: {
+                            tenants: function(tenantService) {
+                                return tenantService.getTenants();
+                            }
+                        }
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/tenants/new/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/tenants/new/index.js b/traffic_portal/app/src/modules/private/admin/tenants/new/index.js
new file mode 100644
index 0000000..bf76495
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/tenants/new/index.js
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.tenants.new', [])
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.tenants.new', {
+                url: '/new',
+                views: {
+                    tenantsContent: {
+                        templateUrl: 'common/modules/form/tenant/form.tenant.tpl.html',
+                        controller: 'FormNewTenantController',
+                        resolve: {
+                            tenant: function() {
+                                return {};
+                            }
+                        }
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/tenants/tenants.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/tenants/tenants.tpl.html b/traffic_portal/app/src/modules/private/admin/tenants/tenants.tpl.html
new file mode 100644
index 0000000..54556c3
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/tenants/tenants.tpl.html
@@ -0,0 +1,22 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<div id="tenantsContainer">
+    <div ui-view="tenantsContent"></div>
+</div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/types/TypesController.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/types/TypesController.js b/traffic_portal/app/src/modules/private/admin/types/TypesController.js
new file mode 100644
index 0000000..0325631
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/types/TypesController.js
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var TypesController = function() {
+};
+
+TypesController.$inject = [];
+module.exports = TypesController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/types/cacheGroups/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/types/cacheGroups/index.js b/traffic_portal/app/src/modules/private/admin/types/cacheGroups/index.js
new file mode 100644
index 0000000..161ba4f
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/types/cacheGroups/index.js
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.types.cacheGroups', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficPortal.private.admin.types.cacheGroups', {
+				url: '/{typeId}/cache-groups',
+				views: {
+					typesContent: {
+						templateUrl: 'common/modules/table/typeCacheGroups/table.typeCacheGroups.tpl.html',
+						controller: 'TableTypeCacheGroupsController',
+						resolve: {
+							type: function($stateParams, typeService) {
+								return typeService.getType($stateParams.typeId);
+							},
+							cacheGroups: function($stateParams, cacheGroupService) {
+								return cacheGroupService.getCacheGroups({ type: $stateParams.typeId });
+							}
+						}
+					}
+				}
+			})
+		;
+		$urlRouterProvider.otherwise('/');
+	});

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/types/deliveryServices/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/types/deliveryServices/index.js b/traffic_portal/app/src/modules/private/admin/types/deliveryServices/index.js
new file mode 100644
index 0000000..d713b88
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/types/deliveryServices/index.js
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.types.deliveryServices', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficPortal.private.admin.types.deliveryServices', {
+				url: '/{typeId}/delivery-services',
+				views: {
+					typesContent: {
+						templateUrl: 'common/modules/table/typeDeliveryServices/table.typeDeliveryServices.tpl.html',
+						controller: 'TableTypeDeliveryServicesController',
+						resolve: {
+							type: function($stateParams, typeService) {
+								return typeService.getType($stateParams.typeId);
+							},
+							deliveryServices: function($stateParams, deliveryServiceService) {
+								return deliveryServiceService.getDeliveryServices({ type: $stateParams.typeId });
+							}
+						}
+					}
+				}
+			})
+		;
+		$urlRouterProvider.otherwise('/');
+	});

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/types/edit/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/types/edit/index.js b/traffic_portal/app/src/modules/private/admin/types/edit/index.js
new file mode 100644
index 0000000..e65ef2d
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/types/edit/index.js
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.types.edit', [])
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.types.edit', {
+                url: '/{typeId:[0-9]{1,8}}',
+                views: {
+                    typesContent: {
+                        templateUrl: 'common/modules/form/type/form.type.tpl.html',
+                        controller: 'FormEditTypeController',
+                        resolve: {
+                            type: function($stateParams, typeService) {
+                                return typeService.getType($stateParams.typeId);
+                            }
+                        }
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/types/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/types/index.js b/traffic_portal/app/src/modules/private/admin/types/index.js
new file mode 100644
index 0000000..4cc63c1
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/types/index.js
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.types', [])
+    .controller('TypesController', require('./TypesController'))
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.types', {
+                url: '/types',
+                abstract: true,
+                views: {
+                    adminContent: {
+                        templateUrl: 'modules/private/admin/types/types.tpl.html',
+                        controller: 'TypesController'
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/types/list/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/types/list/index.js b/traffic_portal/app/src/modules/private/admin/types/list/index.js
new file mode 100644
index 0000000..2426e7e
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/types/list/index.js
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.types.list', [])
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.types.list', {
+                url: '',
+                views: {
+                    typesContent: {
+                        templateUrl: 'common/modules/table/types/table.types.tpl.html',
+                        controller: 'TableTypesController',
+                        resolve: {
+                            types: function(typeService) {
+                                return typeService.getTypes();
+                            }
+                        }
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/3195e0cc/traffic_portal/app/src/modules/private/admin/types/new/index.js
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/modules/private/admin/types/new/index.js b/traffic_portal/app/src/modules/private/admin/types/new/index.js
new file mode 100644
index 0000000..1055512
--- /dev/null
+++ b/traffic_portal/app/src/modules/private/admin/types/new/index.js
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficPortal.private.admin.types.new', [])
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficPortal.private.admin.types.new', {
+                url: '/new',
+                views: {
+                    typesContent: {
+                        templateUrl: 'common/modules/form/type/form.type.tpl.html',
+                        controller: 'FormNewTypeController',
+                        resolve: {
+                            type: function() {
+                                return {};
+                            }
+                        }
+                    }
+                }
+            })
+        ;
+        $urlRouterProvider.otherwise('/');
+    });