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/01/05 21:59:42 UTC

[01/11] incubator-trafficcontrol git commit: need to pass in serverid

Repository: incubator-trafficcontrol
Updated Branches:
  refs/heads/master d0e1fd3b0 -> 4ba5c5221


need to pass in serverid


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/aa70276f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/aa70276f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/aa70276f

Branch: refs/heads/master
Commit: aa70276f4ed48db02d1c1b4d62c84a080f64e987
Parents: d69e941
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Thu Jan 5 12:08:25 2017 -0700
Committer: Dan Kirkwood <da...@gmail.com>
Committed: Thu Jan 5 14:57:46 2017 -0700

----------------------------------------------------------------------
 .../modules/private/configure/servers/deliveryServices/index.js  | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/aa70276f/traffic_ops/experimental/ui/app/src/modules/private/configure/servers/deliveryServices/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/configure/servers/deliveryServices/index.js b/traffic_ops/experimental/ui/app/src/modules/private/configure/servers/deliveryServices/index.js
index 90ab145..fa35378 100644
--- a/traffic_ops/experimental/ui/app/src/modules/private/configure/servers/deliveryServices/index.js
+++ b/traffic_ops/experimental/ui/app/src/modules/private/configure/servers/deliveryServices/index.js
@@ -30,8 +30,8 @@ module.exports = angular.module('trafficOps.private.configure.servers.deliverySe
 							server: function($stateParams, serverService) {
 								return serverService.getServer($stateParams.serverId);
 							},
-							serverDeliveryServices: function(deliveryServiceService) {
-								return deliveryServiceService.getServerDeliveryServices();
+							serverDeliveryServices: function($stateParams, deliveryServiceService) {
+								return deliveryServiceService.getServerDeliveryServices($stateParams.serverId);
 							}
 						}
 					}


[03/11] incubator-trafficcontrol git commit: adds more views to TO experimental UI

Posted by da...@apache.org.
adds more views to TO experimental UI


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/d69e9415
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/d69e9415
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/d69e9415

Branch: refs/heads/master
Commit: d69e94152d8f7ede8b91908fa36216c1d649e174
Parents: bdd8e13
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Thu Jan 5 11:04:01 2017 -0700
Committer: Dan Kirkwood <da...@gmail.com>
Committed: Thu Jan 5 14:57:46 2017 -0700

----------------------------------------------------------------------
 traffic_ops/experimental/ui/app/src/app.js      | 12 ++++
 .../ui/app/src/common/api/ASNService.js         |  4 +-
 .../ui/app/src/common/api/CDNService.js         |  4 +-
 .../common/api/CacheGroupParameterService.js    | 29 ++++++++
 .../ui/app/src/common/api/CacheGroupService.js  |  4 +-
 .../src/common/api/DeliveryServiceService.js    | 12 +++-
 .../ui/app/src/common/api/DivisionService.js    |  4 +-
 .../ui/app/src/common/api/ParameterService.js   |  8 ++-
 .../app/src/common/api/PhysLocationService.js   |  4 +-
 .../ui/app/src/common/api/ProfileService.js     |  8 ++-
 .../ui/app/src/common/api/RegionService.js      |  4 +-
 .../ui/app/src/common/api/RoleService.js        |  4 +-
 .../ui/app/src/common/api/ServerService.js      |  9 ++-
 .../ui/app/src/common/api/StatusService.js      |  4 +-
 .../ui/app/src/common/api/TenantService.js      |  4 +-
 .../ui/app/src/common/api/TypeService.js        | 16 ++---
 .../ui/app/src/common/api/UserService.js        |  4 +-
 .../experimental/ui/app/src/common/api/index.js |  2 +-
 .../common/modules/form/asn/form.asn.tpl.html   |  2 +-
 .../form/cacheGroup/FormCacheGroupController.js |  6 +-
 .../form/cacheGroup/form.cacheGroup.tpl.html    | 11 +--
 .../common/modules/form/cdn/form.cdn.tpl.html   |  7 +-
 .../FormDeliveryServiceController.js            |  2 +-
 .../form.deliveryService.tpl.html               |  9 ++-
 .../form/division/form.division.tpl.html        | 14 +++-
 .../form/parameter/FormParameterController.js   |  8 ++-
 .../form/parameter/form.parameter.tpl.html      |  7 +-
 .../physLocation/form.physLocation.tpl.html     | 16 +++--
 .../modules/form/profile/form.profile.tpl.html  | 12 ++--
 .../modules/form/region/form.region.tpl.html    | 16 +++--
 .../modules/form/server/FormServerController.js |  2 +-
 .../modules/form/server/form.server.tpl.html    | 12 ++--
 .../modules/form/status/FormStatusController.js |  8 ++-
 .../modules/form/status/form.status.tpl.html    |  7 +-
 .../modules/form/tenant/form.tenant.tpl.html    |  2 +-
 .../modules/form/type/FormTypeController.js     | 16 ++++-
 .../common/modules/form/type/form.type.tpl.html |  9 ++-
 .../common/modules/form/user/form.user.tpl.html | 16 +++--
 .../modules/table/asns/table.asns.tpl.html      |  2 +-
 .../TableCacheGroupAsnsController.js            | 42 ++++++++++++
 .../modules/table/cacheGroupAsns/index.js       | 21 ++++++
 .../table.cacheGroupAsns.tpl.html               | 47 +++++++++++++
 .../TableCacheGroupParametersController.js      |  6 +-
 .../table.cacheGroupParameters.tpl.html         |  2 +-
 .../TableCacheGroupServersController.js         |  8 +--
 .../table.cacheGroupServers.tpl.html            |  6 +-
 .../cacheGroups/table.cacheGroups.tpl.html      |  2 +-
 .../cdnServers/TableCDNServersController.js     |  4 ++
 .../table/cdnServers/table.cdnServers.tpl.html  |  1 +
 .../modules/table/cdns/table.cdns.tpl.html      |  2 +-
 .../TableDeliveryServiceRegexesController.js    |  2 +-
 .../table.deliveryServiceRegexes.tpl.html       |  4 +-
 .../table.deliveryServiceServers.tpl.html       |  2 +-
 .../table.deliveryServices.tpl.html             |  2 +-
 .../table/divisions/table.divisions.tpl.html    |  2 +-
 .../TableParameterProfilesController.js         | 46 +++++++++++++
 .../modules/table/parameterProfiles/index.js    | 21 ++++++
 .../table.parameterProfiles.tpl.html            | 50 ++++++++++++++
 .../table/parameters/table.parameters.tpl.html  |  2 +-
 .../physLocations/table.physLocations.tpl.html  |  2 +-
 .../table.profileParameters.tpl.html            |  2 +-
 .../table/profiles/table.profiles.tpl.html      | 17 +++--
 .../table/regions/table.regions.tpl.html        |  2 +-
 .../table.serverDeliveryServices.tpl.html       | 15 ++++-
 .../table/servers/table.servers.tpl.html        | 14 +++-
 .../TableStatusServersController.js             | 42 ++++++++++++
 .../common/modules/table/statusServers/index.js | 22 ++++++
 .../statusServers/table.statusServers.tpl.html  | 69 +++++++++++++++++++
 .../table/statuses/table.statuses.tpl.html      |  2 +-
 .../table/tenants/table.tenants.tpl.html        |  2 +-
 .../TableTypeCacheGroupsController.js           | 42 ++++++++++++
 .../modules/table/typeCacheGroups/index.js      | 22 ++++++
 .../table.typeCacheGroups.tpl.html              | 53 +++++++++++++++
 .../TableTypeDeliveryServicesController.js      | 42 ++++++++++++
 .../modules/table/typeDeliveryServices/index.js | 22 ++++++
 .../table.typeDeliveryServices.tpl.html         | 71 ++++++++++++++++++++
 .../typeServers/TableTypeServersController.js   | 42 ++++++++++++
 .../common/modules/table/typeServers/index.js   | 22 ++++++
 .../typeServers/table.typeServers.tpl.html      | 69 +++++++++++++++++++
 .../modules/table/types/table.types.tpl.html    |  2 +-
 .../table.userDeliveryServices.tpl.html         |  3 +-
 .../modules/table/users/table.users.tpl.html    |  2 +-
 .../app/src/common/service/utils/FormUtils.js   |  4 +-
 .../admin/cdns/deliveryServices/index.js        |  4 +-
 .../modules/private/admin/cdns/servers/index.js |  4 +-
 .../private/admin/divisions/regions/index.js    |  2 +-
 .../private/admin/parameters/profiles/index.js  | 42 ++++++++++++
 .../admin/physLocations/servers/index.js        |  4 +-
 .../private/admin/profiles/parameters/index.js  |  4 +-
 .../private/admin/profiles/servers/index.js     |  2 +-
 .../admin/regions/physLocations/index.js        |  4 +-
 .../private/admin/statuses/servers/index.js     | 42 ++++++++++++
 .../private/admin/types/cacheGroups/index.js    | 42 ++++++++++++
 .../admin/types/deliveryServices/index.js       | 42 ++++++++++++
 .../private/admin/types/servers/index.js        | 42 ++++++++++++
 .../admin/users/deliveryServices/index.js       |  4 +-
 .../private/configure/cacheGroups/asns/index.js | 42 ++++++++++++
 .../configure/cacheGroups/parameters/index.js   |  4 +-
 .../configure/cacheGroups/servers/index.js      |  4 +-
 .../configure/deliveryServices/servers/index.js |  2 +-
 .../configure/servers/deliveryServices/index.js |  2 +-
 .../app/src/modules/public/login/login.tpl.html |  2 +-
 .../experimental/ui/app/src/styles/main.scss    |  5 ++
 103 files changed, 1318 insertions(+), 158 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/app.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/app.js b/traffic_ops/experimental/ui/app/src/app.js
index 18261f3..b54d85a 100644
--- a/traffic_ops/experimental/ui/app/src/app.js
+++ b/traffic_ops/experimental/ui/app/src/app.js
@@ -77,6 +77,7 @@ var trafficOps = angular.module('trafficOps', [
         require('./modules/private/admin/parameters/edit').name,
         require('./modules/private/admin/parameters/list').name,
         require('./modules/private/admin/parameters/new').name,
+        require('./modules/private/admin/parameters/profiles').name,
         require('./modules/private/admin/profiles').name,
         require('./modules/private/admin/profiles/edit').name,
         require('./modules/private/admin/profiles/list').name,
@@ -92,6 +93,7 @@ var trafficOps = angular.module('trafficOps', [
         require('./modules/private/admin/statuses/edit').name,
         require('./modules/private/admin/statuses/list').name,
         require('./modules/private/admin/statuses/new').name,
+        require('./modules/private/admin/statuses/servers').name,
         require('./modules/private/admin/tenants').name,
         require('./modules/private/admin/tenants/edit').name,
         require('./modules/private/admin/tenants/list').name,
@@ -100,6 +102,9 @@ var trafficOps = angular.module('trafficOps', [
         require('./modules/private/admin/types/edit').name,
         require('./modules/private/admin/types/list').name,
         require('./modules/private/admin/types/new').name,
+        require('./modules/private/admin/types/servers').name,
+        require('./modules/private/admin/types/cacheGroups').name,
+        require('./modules/private/admin/types/deliveryServices').name,
         require('./modules/private/admin/users').name,
         require('./modules/private/admin/users/deliveryServices').name,
         require('./modules/private/admin/users/edit').name,
@@ -112,6 +117,7 @@ var trafficOps = angular.module('trafficOps', [
         require('./modules/private/configure/cacheGroups/edit').name,
         require('./modules/private/configure/cacheGroups/list').name,
         require('./modules/private/configure/cacheGroups/new').name,
+        require('./modules/private/configure/cacheGroups/asns').name,
         require('./modules/private/configure/cacheGroups/parameters').name,
         require('./modules/private/configure/cacheGroups/servers').name,
         require('./modules/private/configure/deliveryServices').name,
@@ -191,6 +197,7 @@ var trafficOps = angular.module('trafficOps', [
 
         // tables
         require('./common/modules/table/cacheGroups').name,
+        require('./common/modules/table/cacheGroupAsns').name,
         require('./common/modules/table/cacheGroupParameters').name,
         require('./common/modules/table/cacheGroupServers').name,
         require('./common/modules/table/asns').name,
@@ -206,6 +213,7 @@ var trafficOps = angular.module('trafficOps', [
         require('./common/modules/table/physLocations').name,
         require('./common/modules/table/physLocationServers').name,
         require('./common/modules/table/parameters').name,
+        require('./common/modules/table/parameterProfiles').name,
         require('./common/modules/table/profileParameters').name,
         require('./common/modules/table/profileServers').name,
         require('./common/modules/table/profiles').name,
@@ -214,7 +222,11 @@ var trafficOps = angular.module('trafficOps', [
         require('./common/modules/table/servers').name,
         require('./common/modules/table/serverDeliveryServices').name,
         require('./common/modules/table/statuses').name,
+        require('./common/modules/table/statusServers').name,
         require('./common/modules/table/types').name,
+        require('./common/modules/table/typeCacheGroups').name,
+        require('./common/modules/table/typeDeliveryServices').name,
+        require('./common/modules/table/typeServers').name,
         require('./common/modules/table/users').name,
         require('./common/modules/table/userDeliveryServices').name,
 

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/api/ASNService.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/ASNService.js b/traffic_ops/experimental/ui/app/src/common/api/ASNService.js
index 51706cf..9cc604a 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/ASNService.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/ASNService.js
@@ -19,8 +19,8 @@
 
 var ASNService = function(Restangular, locationUtils, messageModel) {
 
-    this.getASNs = function() {
-        return Restangular.all('asns').getList();
+    this.getASNs = function(queryParams) {
+        return Restangular.all('asns').getList(queryParams);
     };
 
     this.getASN = function(id) {

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/api/CDNService.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/CDNService.js b/traffic_ops/experimental/ui/app/src/common/api/CDNService.js
index e446eb6..dd5f7dc 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/CDNService.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/CDNService.js
@@ -19,8 +19,8 @@
 
 var CDNService = function(Restangular, locationUtils, messageModel) {
 
-    this.getCDNs = function() {
-        return Restangular.all('cdns').getList();
+    this.getCDNs = function(queryParams) {
+        return Restangular.all('cdns').getList(queryParams);
     };
 
     this.getCDN = function(id) {

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/api/CacheGroupParameterService.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/CacheGroupParameterService.js b/traffic_ops/experimental/ui/app/src/common/api/CacheGroupParameterService.js
new file mode 100644
index 0000000..651385c
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/api/CacheGroupParameterService.js
@@ -0,0 +1,29 @@
+/*
+ * 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 CacheGroupParameterService = function(Restangular) {
+
+	this.getCacheGroupParameters = function(cachegroupId) {
+		return Restangular.one('cachegroups', cachegroupId).getList('parameters')
+	};
+
+};
+
+CacheGroupParameterService.$inject = ['Restangular'];
+module.exports = CacheGroupParameterService;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/api/CacheGroupService.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/CacheGroupService.js b/traffic_ops/experimental/ui/app/src/common/api/CacheGroupService.js
index cff779b..5f5f725 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/CacheGroupService.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/CacheGroupService.js
@@ -19,8 +19,8 @@
 
 var CacheGroupService = function(Restangular, locationUtils, messageModel) {
 
-    this.getCacheGroups = function() {
-        return Restangular.all('cachegroups').getList();
+    this.getCacheGroups = function(queryParams) {
+        return Restangular.all('cachegroups').getList(queryParams);
     };
 
     this.getCacheGroup = function(id) {

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/api/DeliveryServiceService.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/DeliveryServiceService.js b/traffic_ops/experimental/ui/app/src/common/api/DeliveryServiceService.js
index 4f9cd72..62b2e0d 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/DeliveryServiceService.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/DeliveryServiceService.js
@@ -19,8 +19,8 @@
 
 var DeliveryServiceService = function(Restangular, locationUtils, messageModel) {
 
-    this.getDeliveryServices = function() {
-        return Restangular.all('deliveryservices').getList();
+    this.getDeliveryServices = function(queryParams) {
+        return Restangular.all('deliveryservices').getList(queryParams);
     };
 
     this.getDeliveryService = function(id) {
@@ -64,6 +64,14 @@ var DeliveryServiceService = function(Restangular, locationUtils, messageModel)
             );
     };
 
+    this.getServerDeliveryServices = function(serverId) {
+        return Restangular.one('servers', serverId).getList('deliveryservices');
+    };
+
+    this.getUserDeliveryServices = function(userId) {
+        return Restangular.one('users', userId).getList('deliveryservices');
+    };
+
 };
 
 DeliveryServiceService.$inject = ['Restangular', 'locationUtils', 'messageModel'];

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/api/DivisionService.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/DivisionService.js b/traffic_ops/experimental/ui/app/src/common/api/DivisionService.js
index d10312e..6ffc6ee 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/DivisionService.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/DivisionService.js
@@ -19,8 +19,8 @@
 
 var DivisionService = function(Restangular, locationUtils, messageModel) {
 
-    this.getDivisions = function() {
-        return Restangular.all('divisions').getList();
+    this.getDivisions = function(queryParams) {
+        return Restangular.all('divisions').getList(queryParams);
     };
 
     this.getDivision = function(id) {

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/api/ParameterService.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/ParameterService.js b/traffic_ops/experimental/ui/app/src/common/api/ParameterService.js
index 8fccc22..46a9b43 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/ParameterService.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/ParameterService.js
@@ -19,8 +19,8 @@
 
 var ParameterService = function(Restangular, locationUtils, messageModel) {
 
-    this.getParameters = function() {
-        return Restangular.all('parameters').getList();
+    this.getParameters = function(queryParams) {
+        return Restangular.all('parameters').getList(queryParams);
     };
 
     this.getParameter = function(id) {
@@ -64,6 +64,10 @@ var ParameterService = function(Restangular, locationUtils, messageModel) {
         );
     };
 
+    this.getProfileParameters = function(profileId) {
+        return Restangular.one('profiles', profileId).getList('parameters');
+    };
+
 };
 
 ParameterService.$inject = ['Restangular', 'locationUtils', 'messageModel'];

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/api/PhysLocationService.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/PhysLocationService.js b/traffic_ops/experimental/ui/app/src/common/api/PhysLocationService.js
index 4d94592..9ddf07a 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/PhysLocationService.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/PhysLocationService.js
@@ -19,8 +19,8 @@
 
 var PhysLocationService = function(Restangular, locationUtils, messageModel) {
 
-    this.getPhysLocations = function() {
-        return Restangular.all('phys_locations').getList();
+    this.getPhysLocations = function(queryParams) {
+        return Restangular.all('phys_locations').getList(queryParams);
     };
 
     this.getPhysLocation = function(id) {

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/api/ProfileService.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/ProfileService.js b/traffic_ops/experimental/ui/app/src/common/api/ProfileService.js
index 67b322d..bbd3eb4 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/ProfileService.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/ProfileService.js
@@ -19,8 +19,8 @@
 
 var ProfileService = function(Restangular, locationUtils, messageModel) {
 
-    this.getProfiles = function() {
-        return Restangular.all('profiles').getList();
+    this.getProfiles = function(queryParams) {
+        return Restangular.all('profiles').getList(queryParams);
     };
 
     this.getProfile = function(id) {
@@ -64,6 +64,10 @@ var ProfileService = function(Restangular, locationUtils, messageModel) {
         );
     };
 
+    this.getParameterProfiles = function(paramId) {
+        return Restangular.one('parameters', paramId).getList('profiles');
+    };
+
 };
 
 ProfileService.$inject = ['Restangular', 'locationUtils', 'messageModel'];

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/api/RegionService.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/RegionService.js b/traffic_ops/experimental/ui/app/src/common/api/RegionService.js
index 1fbe78a..d8d87e9 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/RegionService.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/RegionService.js
@@ -19,8 +19,8 @@
 
 var RegionService = function(Restangular, messageModel) {
 
-    this.getRegions = function() {
-        return Restangular.all('regions').getList();
+    this.getRegions = function(queryParams) {
+        return Restangular.all('regions').getList(queryParams);
     };
 
     this.getRegion = function(id) {

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/api/RoleService.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/RoleService.js b/traffic_ops/experimental/ui/app/src/common/api/RoleService.js
index 26f283e..bcd9b3b 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/RoleService.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/RoleService.js
@@ -19,8 +19,8 @@
 
 var RoleService = function(Restangular, messageModel) {
 
-    this.getRoles = function() {
-        return Restangular.all('roles').getList();
+    this.getRoles = function(queryParams) {
+        return Restangular.all('roles').getList(queryParams);
     };
 
     this.getRole = function(id) {

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/api/ServerService.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/ServerService.js b/traffic_ops/experimental/ui/app/src/common/api/ServerService.js
index b764a69..c661e80 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/ServerService.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/ServerService.js
@@ -19,8 +19,8 @@
 
 var ServerService = function(Restangular, locationUtils, messageModel) {
 
-    this.getServers = function(dsId, profileId) {
-        return Restangular.all('servers').getList({ dsId: dsId, profileId: profileId });
+    this.getServers = function(queryParams) {
+        return Restangular.all('servers').getList(queryParams);
     };
 
     this.getServer = function(id) {
@@ -64,6 +64,11 @@ var ServerService = function(Restangular, locationUtils, messageModel) {
             );
     };
 
+    this.getDeliveryServiceServers = function(dsId) {
+        return Restangular.one('deliveryservices', dsId).getList('servers');
+    };
+
+
 };
 
 ServerService.$inject = ['Restangular', 'locationUtils', 'messageModel'];

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/api/StatusService.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/StatusService.js b/traffic_ops/experimental/ui/app/src/common/api/StatusService.js
index d648620..dd656d8 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/StatusService.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/StatusService.js
@@ -19,8 +19,8 @@
 
 var StatusService = function(Restangular, locationUtils, messageModel) {
 
-    this.getStatuses = function() {
-        return Restangular.all('statuses').getList();
+    this.getStatuses = function(queryParams) {
+        return Restangular.all('statuses').getList(queryParams);
     };
 
     this.getStatus = function(id) {

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/api/TenantService.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/TenantService.js b/traffic_ops/experimental/ui/app/src/common/api/TenantService.js
index 1541e9a..edec73e 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/TenantService.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/TenantService.js
@@ -19,8 +19,8 @@
 
 var TenantService = function(Restangular, messageModel) {
 
-    this.getTenants = function() {
-        return Restangular.all('tenant').getList();
+    this.getTenants = function(queryParams) {
+        return Restangular.all('tenant').getList(queryParams);
     };
 
     this.getTenant = function(id) {

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/api/TypeService.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/TypeService.js b/traffic_ops/experimental/ui/app/src/common/api/TypeService.js
index dd55d59..2ec57fd 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/TypeService.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/TypeService.js
@@ -19,8 +19,8 @@
 
 var TypeService = function(Restangular, locationUtils, messageModel) {
 
-    this.getTypes = function(useInTable) {
-        return Restangular.all('types').getList({ useInTable: useInTable });
+    this.getTypes = function(queryParams) {
+        return Restangular.all('types').getList(queryParams);
     };
 
     this.getType = function(id) {
@@ -43,12 +43,12 @@ var TypeService = function(Restangular, locationUtils, messageModel) {
     this.updateType = function(type) {
         return type.put()
             .then(
-            function() {
-                messageModel.setMessages([ { level: 'success', text: 'Type updated' } ], false);
-            },
-            function(fault) {
-                messageModel.setMessages(fault.data.alerts, false);
-            }
+                function() {
+                    messageModel.setMessages([ { level: 'success', text: 'Type updated' } ], false);
+                },
+                function(fault) {
+                    messageModel.setMessages(fault.data.alerts, false);
+                }
         );
     };
 

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/api/UserService.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/UserService.js b/traffic_ops/experimental/ui/app/src/common/api/UserService.js
index 8fc8fb7..37c1e78 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/UserService.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/UserService.js
@@ -61,8 +61,8 @@ var UserService = function(Restangular, $http, $location, $q, authService, locat
             );
     };
 
-    this.getUsers = function() {
-        return Restangular.all('users').getList();
+    this.getUsers = function(queryParams) {
+        return Restangular.all('users').getList(queryParams);
     };
 
     this.getUser = function(id) {

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/api/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/index.js b/traffic_ops/experimental/ui/app/src/common/api/index.js
index bd579f7..455e4dd 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/index.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/index.js
@@ -21,6 +21,7 @@ module.exports = angular.module('trafficOps.api', [])
     .service('authService', require('./AuthService'))
     .service('asnService', require('./ASNService'))
     .service('cacheGroupService', require('./CacheGroupService'))
+    .service('cacheGroupParameterService', require('./CacheGroupParameterService'))
     .service('cdnService', require('./CDNService'))
     .service('deliveryServiceService', require('./DeliveryServiceService'))
     .service('divisionService', require('./DivisionService'))
@@ -28,7 +29,6 @@ module.exports = angular.module('trafficOps.api', [])
     .service('physLocationService', require('./PhysLocationService'))
     .service('parameterService', require('./ParameterService'))
     .service('profileService', require('./ProfileService'))
-    .service('profileParameterService', require('./ProfileParameterService'))
     .service('roleService', require('./RoleService'))
     .service('regionService', require('./RegionService'))
     .service('regexService', require('./RegexService'))

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/form/asn/form.asn.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/asn/form.asn.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/form/asn/form.asn.tpl.html
index aa4fa66..6ba8a69 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/asn/form.asn.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/asn/form.asn.tpl.html
@@ -49,7 +49,7 @@ under the License.
             </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-danger" ng-show="!settings.isNew" ng-click="confirmDelete(asn)">Delete</button>
-                <button type="button" class="btn btn-primary" ng-disabled="asnForm.$pristine || asnForm.$invalid" ng-click="save(asn)">{{settings.saveLabel}}</button>
+                <button type="button" class="btn btn-success" ng-disabled="asnForm.$pristine || asnForm.$invalid" ng-click="save(asn)">{{settings.saveLabel}}</button>
             </div>
         </form>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/form/cacheGroup/FormCacheGroupController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/cacheGroup/FormCacheGroupController.js b/traffic_ops/experimental/ui/app/src/common/modules/form/cacheGroup/FormCacheGroupController.js
index 0ab458d..da8c881 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/cacheGroup/FormCacheGroupController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/cacheGroup/FormCacheGroupController.js
@@ -27,7 +27,7 @@ var FormCacheGroupController = function(cacheGroup, $scope, $location, formUtils
     };
 
     var getTypes = function() {
-        typeService.getTypes('cachegroup')
+        typeService.getTypes({ useInTable: 'cachegroup' })
             .then(function(result) {
                 $scope.types = result;
             });
@@ -43,6 +43,10 @@ var FormCacheGroupController = function(cacheGroup, $scope, $location, formUtils
         alert('not hooked up yet: dequeuing updates for all cachegroup servers');
     };
 
+    $scope.viewAsns = function() {
+        $location.path($location.path() + '/asns');
+    };
+
     $scope.viewParams = function() {
         $location.path($location.path() + '/parameters');
     };

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/form/cacheGroup/form.cacheGroup.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/cacheGroup/form.cacheGroup.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/form/cacheGroup/form.cacheGroup.tpl.html
index 689287e..7a720c2 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/cacheGroup/form.cacheGroup.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/cacheGroup/form.cacheGroup.tpl.html
@@ -23,10 +23,7 @@ under the License.
             <li><a ng-click="navigateToPath('/configure/cache-groups')">Cache Groups</a></li>
             <li class="active">{{cacheGroupName}}</li>
         </ol>
-        <div class="btn-group pull-right" role="group" ng-show="!settings.isNew">
-            <button class="btn btn-default" ng-click="viewServers()">Servers</button>
-            <button class="btn btn-default" ng-click="viewParams()">Parameters</button>
-
+        <div class="pull-right" ng-show="!settings.isNew">
             <div class="btn-group" role="group" uib-dropdown is-open="more.isopen">
                 <button type="button" class="btn btn-default dropdown-toggle" uib-dropdown-toggle aria-haspopup="true" aria-expanded="false">
                     More
@@ -35,6 +32,10 @@ under the License.
                 <ul class="dropdown-menu-right dropdown-menu" uib-dropdown-menu>
                     <li role="menuitem"><a ng-click="queueUpdates()">Queue Server Updates</a></li>
                     <li role="menuitem"><a ng-click="dequeueUpdates()">Dequeue Server Updates</a></li>
+                    <li class="divider"></li>
+                    <li role="menuitem"><a ng-click="viewAsns()">View ASNs</a></li>
+                    <li role="menuitem"><a ng-click="viewParams()">View Parameters</a></li>
+                    <li role="menuitem"><a ng-click="viewServers()">View Servers</a></li>
                 </ul>
             </div>
         </div>
@@ -107,7 +108,7 @@ under the License.
             </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-danger" ng-show="!settings.isNew" ng-click="confirmDelete(cacheGroup)">Delete</button>
-                <button type="button" class="btn btn-primary" ng-disabled="cacheGroupForm.$pristine || cacheGroupForm.$invalid" ng-click="save(cacheGroup)">{{settings.saveLabel}}</button>
+                <button type="button" class="btn btn-success" ng-disabled="cacheGroupForm.$pristine || cacheGroupForm.$invalid" ng-click="save(cacheGroup)">{{settings.saveLabel}}</button>
             </div>
         </form>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/form/cdn/form.cdn.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/cdn/form.cdn.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/form/cdn/form.cdn.tpl.html
index 39b6fed..3dbda0f 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/cdn/form.cdn.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/cdn/form.cdn.tpl.html
@@ -23,9 +23,8 @@ under the License.
             <li><a ng-click="navigateToPath('/admin/cdns')">CDNs</a></li>
             <li class="active">{{cdnName}}</li>
         </ol>
-        <div class="btn-group pull-right" role="group" ng-show="!settings.isNew">
-            <button class="btn btn-default" ng-click="manageSnapshots()">Snapshot</button>
-
+        <div class="pull-right" ng-show="!settings.isNew">
+            <button class="btn btn-primary" ng-click="manageSnapshots()">Snapshot CDN Config &nbsp;&nbsp;<i class="fa fa-camera"></i></button>
             <div class="btn-group" role="group" uib-dropdown is-open="more.isopen">
                 <button type="button" class="btn btn-default dropdown-toggle" uib-dropdown-toggle aria-haspopup="true" aria-expanded="false">
                     More
@@ -67,7 +66,7 @@ under the License.
             </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-danger" ng-show="!settings.isNew" ng-click="confirmDelete(cdn)">Delete</button>
-                <button type="button" class="btn btn-primary" ng-disabled="cdnForm.$pristine || cdnForm.$invalid" ng-click="save(cdn)">{{settings.saveLabel}}</button>
+                <button type="button" class="btn btn-success" ng-disabled="cdnForm.$pristine || cdnForm.$invalid" ng-click="save(cdn)">{{settings.saveLabel}}</button>
             </div>
         </form>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js b/traffic_ops/experimental/ui/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js
index 74ef020..507d51a 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js
@@ -20,7 +20,7 @@
 var FormDeliveryServiceController = function(deliveryService, $scope, $location, formUtils, locationUtils, cdnService, profileService, typeService) {
 
     var getTypes = function() {
-        typeService.getTypes('deliveryservice')
+        typeService.getTypes({ useInTable: 'deliveryservice' })
             .then(function(result) {
                 $scope.types = result;
             });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/form/deliveryService/form.deliveryService.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/deliveryService/form.deliveryService.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/form/deliveryService/form.deliveryService.tpl.html
index e3e70f3..bbaf158 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/deliveryService/form.deliveryService.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/deliveryService/form.deliveryService.tpl.html
@@ -23,10 +23,9 @@ under the License.
             <li><a ng-click="navigateToPath('/configure/delivery-services')">Delivery Services</a></li>
             <li class="active">{{deliveryServiceName}}</li>
         </ol>
-        <div class="btn-group pull-right" role="group" ng-show="!settings.isNew">
-            <button class="btn btn-default" ng-click="assignServers()">Servers</button>
-            <button class="btn btn-default" ng-click="viewRegexes()">Regexes</button>
-
+        <div class="pull-right" role="group" ng-show="!settings.isNew">
+            <button class="btn btn-primary" ng-click="assignServers()">Assign Servers &nbsp;&nbsp;<i class="fa fa-server"></i></button>
+            <button class="btn btn-primary" ng-click="viewRegexes()">Edit Regexes &nbsp;&nbsp;<i class="fa fa-edit"></i></button>
             <div class="btn-group" role="group" uib-dropdown is-open="more.isopen">
                 <button type="button" class="btn btn-default dropdown-toggle" uib-dropdown-toggle aria-haspopup="true" aria-expanded="false">
                     More
@@ -473,7 +472,7 @@ under the License.
             
             <div class="modal-footer">
                 <button type="button" class="btn btn-danger" ng-show="!settings.isNew" ng-click="confirmDelete(deliveryService)">Delete</button>
-                <button type="button" class="btn btn-primary" ng-disabled="deliveryServiceForm.$pristine || deliveryServiceForm.$invalid" ng-click="save(deliveryService)">{{settings.saveLabel}}</button>
+                <button type="button" class="btn btn-success" ng-disabled="deliveryServiceForm.$pristine || deliveryServiceForm.$invalid" ng-click="save(deliveryService)">{{settings.saveLabel}}</button>
             </div>
         </form>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/form/division/form.division.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/division/form.division.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/form/division/form.division.tpl.html
index 839deb9..33f61fb 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/division/form.division.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/division/form.division.tpl.html
@@ -23,8 +23,16 @@ under the License.
             <li><a ng-click="navigateToPath('/admin/divisions')">Divisions</a></li>
             <li class="active">{{divisionName}}</li>
         </ol>
-        <div class="btn-group pull-right" role="group" ng-show="!settings.isNew">
-            <button class="btn btn-default" ng-click="viewRegions()">Regions</button>
+        <div class="pull-right" ng-show="!settings.isNew">
+            <div class="btn-group" role="group" uib-dropdown is-open="more.isopen">
+                <button type="button" class="btn btn-default dropdown-toggle" uib-dropdown-toggle aria-haspopup="true" aria-expanded="false">
+                    More
+                    <span class="caret"></span>
+                </button>
+                <ul class="dropdown-menu-right dropdown-menu" uib-dropdown-menu>
+                    <li role="menuitem"><a ng-click="viewRegions()">View Regions</a></li>
+                </ul>
+            </div>
         </div>
         <div class="clearfix"></div>
     </div>
@@ -42,7 +50,7 @@ under the License.
             </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-danger" ng-show="!settings.isNew" ng-click="confirmDelete(division)">Delete</button>
-                <button type="button" class="btn btn-primary" ng-disabled="divisionForm.$pristine || divisionForm.$invalid" ng-click="save(division)">{{settings.saveLabel}}</button>
+                <button type="button" class="btn btn-success" ng-disabled="divisionForm.$pristine || divisionForm.$invalid" ng-click="save(division)">{{settings.saveLabel}}</button>
             </div>
         </form>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/form/parameter/FormParameterController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/parameter/FormParameterController.js b/traffic_ops/experimental/ui/app/src/common/modules/form/parameter/FormParameterController.js
index aa877ea..d398735 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/parameter/FormParameterController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/parameter/FormParameterController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var FormParameterController = function(parameter, $scope, formUtils, stringUtils, locationUtils) {
+var FormParameterController = function(parameter, $scope, $location, formUtils, stringUtils, locationUtils) {
 
     $scope.parameter = parameter;
 
@@ -29,6 +29,10 @@ var FormParameterController = function(parameter, $scope, formUtils, stringUtils
 
     $scope.labelize = stringUtils.labelize;
 
+    $scope.viewProfiles = function() {
+        $location.path($location.path() + '/profiles');
+    };
+
     $scope.navigateToPath = locationUtils.navigateToPath;
 
     $scope.hasError = formUtils.hasError;
@@ -37,5 +41,5 @@ var FormParameterController = function(parameter, $scope, formUtils, stringUtils
 
 };
 
-FormParameterController.$inject = ['parameter', '$scope', 'formUtils', 'stringUtils', 'locationUtils'];
+FormParameterController.$inject = ['parameter', '$scope', '$location', 'formUtils', 'stringUtils', 'locationUtils'];
 module.exports = FormParameterController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/form/parameter/form.parameter.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/parameter/form.parameter.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/form/parameter/form.parameter.tpl.html
index 0bd86e5..e38a3f1 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/parameter/form.parameter.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/parameter/form.parameter.tpl.html
@@ -19,10 +19,13 @@ under the License.
 
 <div class="x_panel">
     <div class="x_title">
-        <ol class="breadcrumb">
+        <ol class="breadcrumb pull-left">
             <li><a ng-click="navigateToPath('/admin/parameters')">Parameters</a></li>
             <li class="active">{{parameterName}}</li>
         </ol>
+        <div class="pull-right" role="group" ng-show="!settings.isNew">
+            <button class="btn btn-primary" ng-click="viewProfiles()">View Profiles &nbsp;&nbsp;<i class="fa fa-sticky-note"></i></button>
+        </div>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">
@@ -39,7 +42,7 @@ under the License.
             </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-danger" ng-show="!settings.isNew" ng-click="confirmDelete(parameter)">Delete</button>
-                <button type="button" class="btn btn-primary" ng-disabled="parameterForm.$pristine || parameterForm.$invalid" ng-click="save(parameter)">{{settings.saveLabel}}</button>
+                <button type="button" class="btn btn-success" ng-disabled="parameterForm.$pristine || parameterForm.$invalid" ng-click="save(parameter)">{{settings.saveLabel}}</button>
             </div>
         </form>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/form.physLocation.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/form.physLocation.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/form.physLocation.tpl.html
index 5e1b695..fc7757e 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/form.physLocation.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/form.physLocation.tpl.html
@@ -19,12 +19,20 @@ under the License.
 
 <div class="x_panel">
     <div class="x_title">
-        <ol class="breadcrumb">
+        <ol class="breadcrumb pull-left">
             <li><a ng-click="navigateToPath('/admin/phys-locations')">Physical Locations</a></li>
             <li class="active">{{physLocationName}}</li>
         </ol>
-        <div class="btn-group pull-right" role="group" ng-show="!settings.isNew">
-            <button class="btn btn-default" ng-click="viewServers()">Servers</button>
+        <div class="pull-right" ng-show="!settings.isNew">
+            <div class="btn-group" role="group" uib-dropdown is-open="more.isopen">
+                <button type="button" class="btn btn-default dropdown-toggle" uib-dropdown-toggle aria-haspopup="true" aria-expanded="false">
+                    More
+                    <span class="caret"></span>
+                </button>
+                <ul class="dropdown-menu-right dropdown-menu" uib-dropdown-menu>
+                    <li role="menuitem"><a ng-click="viewServers()">View Servers</a></li>
+                </ul>
+            </div>
         </div>
         <div class="clearfix"></div>
     </div>
@@ -57,7 +65,7 @@ under the License.
             </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-danger" ng-show="!settings.isNew" ng-click="confirmDelete(physLocation)">Delete</button>
-                <button type="button" class="btn btn-primary" ng-disabled="physLocationForm.$pristine || physLocationForm.$invalid" ng-click="save(physLocation)">{{settings.saveLabel}}</button>
+                <button type="button" class="btn btn-success" ng-disabled="physLocationForm.$pristine || physLocationForm.$invalid" ng-click="save(physLocation)">{{settings.saveLabel}}</button>
             </div>
         </form>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/form/profile/form.profile.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/profile/form.profile.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/form/profile/form.profile.tpl.html
index 94a1fbe..3e314d2 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/profile/form.profile.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/profile/form.profile.tpl.html
@@ -23,9 +23,9 @@ under the License.
             <li><a ng-click="navigateToPath('/admin/profiles')">Profiles</a></li>
             <li class="active">{{profileName}}</li>
         </ol>
-        <div class="btn-group pull-right" role="group" ng-show="!settings.isNew">
-            <button class="btn btn-default" ng-click="viewServers()">Servers</button>
-            <button class="btn btn-default" ng-click="viewParams()">Parameters</button>
+        <div class="pull-right" role="group" ng-show="!settings.isNew">
+            <button class="btn btn-primary" ng-click="viewParams()">View Parameters &nbsp;&nbsp;<i class="fa fa-sticky-note"></i></button>
+            <button class="btn btn-primary" ng-click="viewServers()">View Servers &nbsp;&nbsp;<i class="fa fa-server"></i></button>
 
             <div class="btn-group" role="group" uib-dropdown is-open="more.isopen">
                 <button type="button" class="btn btn-default dropdown-toggle" uib-dropdown-toggle aria-haspopup="true" aria-expanded="false">
@@ -33,8 +33,8 @@ under the License.
                     <span class="caret"></span>
                 </button>
                 <ul class="dropdown-menu-right dropdown-menu" uib-dropdown-menu>
-                    <li role="menuitem"><a ng-click="clone()">Clone Profile</a></li>
-                    <li role="menuitem"><a ng-click="export()">Export Profile</a></li>
+                    <li role="menuitem"><a ng-click="cloneProfile()">Clone Profile</a></li>
+                    <li role="menuitem"><a ng-click="exportProfile()">Export Profile</a></li>
                 </ul>
             </div>
         </div>
@@ -60,7 +60,7 @@ under the License.
             </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-danger" ng-show="!settings.isNew" ng-click="confirmDelete(profile)">Delete</button>
-                <button type="button" class="btn btn-primary" ng-disabled="profileForm.$pristine || profileForm.$invalid" ng-click="save(profile)">{{settings.saveLabel}}</button>
+                <button type="button" class="btn btn-success" ng-disabled="profileForm.$pristine || profileForm.$invalid" ng-click="save(profile)">{{settings.saveLabel}}</button>
             </div>
         </form>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/form/region/form.region.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/region/form.region.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/form/region/form.region.tpl.html
index c3c7be5..7e43281 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/region/form.region.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/region/form.region.tpl.html
@@ -19,12 +19,20 @@ under the License.
 
 <div class="x_panel">
     <div class="x_title">
-        <ol class="breadcrumb">
+        <ol class="breadcrumb pull-left">
             <li><a ng-click="navigateToPath('/admin/regions')">Regions</a></li>
             <li class="active">{{regionName}}</li>
         </ol>
-        <div class="btn-group pull-right" role="group" ng-show="!settings.isNew">
-            <button class="btn btn-default" ng-click="viewPhysLocations()">Phys Locations</button>
+        <div class="pull-right" ng-show="!settings.isNew">
+            <div class="btn-group" role="group" uib-dropdown is-open="more.isopen">
+                <button type="button" class="btn btn-default dropdown-toggle" uib-dropdown-toggle aria-haspopup="true" aria-expanded="false">
+                    More
+                    <span class="caret"></span>
+                </button>
+                <ul class="dropdown-menu-right dropdown-menu" uib-dropdown-menu>
+                    <li role="menuitem"><a ng-click="viewPhysLocations()">View Physical Locations</a></li>
+                </ul>
+            </div>
         </div>
         <div class="clearfix"></div>
     </div>
@@ -51,7 +59,7 @@ under the License.
             </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-danger" ng-show="!settings.isNew" ng-click="confirmDelete(region)">Delete</button>
-                <button type="button" class="btn btn-primary" ng-disabled="regionForm.$pristine || regionForm.$invalid" ng-click="save(region)">{{settings.saveLabel}}</button>
+                <button type="button" class="btn btn-success" ng-disabled="regionForm.$pristine || regionForm.$invalid" ng-click="save(region)">{{settings.saveLabel}}</button>
             </div>
         </form>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/form/server/FormServerController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/server/FormServerController.js b/traffic_ops/experimental/ui/app/src/common/modules/form/server/FormServerController.js
index a84000a..f35759e 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/server/FormServerController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/server/FormServerController.js
@@ -34,7 +34,7 @@ var FormServerController = function(server, $scope, $location, formUtils, string
     };
 
     var getTypes = function() {
-        typeService.getTypes('server')
+        typeService.getTypes({ useInTable: 'server' })
             .then(function(result) {
                 $scope.types = result;
             });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/form/server/form.server.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/server/form.server.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/form/server/form.server.tpl.html
index 4eb5938..cadd289 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/server/form.server.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/server/form.server.tpl.html
@@ -23,11 +23,11 @@ under the License.
             <li><a ng-click="navigateToPath('/configure/servers')">Servers</a></li>
             <li class="active">{{serverName}}</li>
         </ol>
-        <div class="btn-group pull-right" role="group" ng-show="!settings.isNew">
-            <button class="btn btn-default" ng-show="server.status == 'REPORTED'" ng-click="offlineServer()">Offline Server</button>
-            <button class="btn btn-default" ng-show="server.status != 'REPORTED'" ng-click="onlineServer()">Online Server</button>
-            <button class="btn btn-default" ng-show="!server.updPending" ng-click="queueUpdates()">Queue Updates</button>
-            <button class="btn btn-default" ng-show="server.updPending" ng-click="dequeueUpdates()">Dequeue Updates</button>
+        <div class="pull-right" role="group" ng-show="!settings.isNew">
+            <button class="btn btn-danger" ng-click="offlineServer()">Offline Server</button>
+            <button class="btn btn-success" ng-click="onlineServer()">Online Server</button>
+            <button class="btn btn-primary" ng-show="!server.updPending" ng-click="queueUpdates()">Queue Update &nbsp;&nbsp;<i class="fa fa-flag"></i></button>
+            <button class="btn btn-primary" ng-show="server.updPending" ng-click="dequeueUpdates()">Dequeue Update &nbsp;&nbsp;<i class="fa fa-flag"></i></button>
 
             <div class="btn-group" role="group" uib-dropdown is-open="more.isopen">
                 <button type="button" class="btn btn-default dropdown-toggle" uib-dropdown-toggle aria-haspopup="true" aria-expanded="false">
@@ -119,7 +119,7 @@ under the License.
 
             <div class="modal-footer">
                 <button type="button" class="btn btn-danger" ng-show="!settings.isNew" ng-click="confirmDelete(server)">Delete</button>
-                <button type="button" class="btn btn-primary" ng-disabled="serverForm.$pristine || serverForm.$invalid" ng-click="save(server)">{{settings.saveLabel}}</button>
+                <button type="button" class="btn btn-success" ng-disabled="serverForm.$pristine || serverForm.$invalid" ng-click="save(server)">{{settings.saveLabel}}</button>
             </div>
         </form>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/form/status/FormStatusController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/status/FormStatusController.js b/traffic_ops/experimental/ui/app/src/common/modules/form/status/FormStatusController.js
index 88697d9..fd015db 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/status/FormStatusController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/status/FormStatusController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var FormStatusController = function(status, $scope, formUtils, stringUtils, locationUtils) {
+var FormStatusController = function(status, $scope, $location, formUtils, stringUtils, locationUtils) {
 
     $scope.status = status;
 
@@ -25,6 +25,10 @@ var FormStatusController = function(status, $scope, formUtils, stringUtils, loca
         { name: 'name', type: 'text', required: true, maxLength: 45 }
     ];
 
+    $scope.viewServers = function() {
+        $location.path($location.path() + '/servers');
+    };
+
     $scope.labelize = stringUtils.labelize;
 
     $scope.navigateToPath = locationUtils.navigateToPath;
@@ -35,5 +39,5 @@ var FormStatusController = function(status, $scope, formUtils, stringUtils, loca
 
 };
 
-FormStatusController.$inject = ['status', '$scope', 'formUtils', 'stringUtils', 'locationUtils'];
+FormStatusController.$inject = ['status', '$scope', '$location', 'formUtils', 'stringUtils', 'locationUtils'];
 module.exports = FormStatusController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/form/status/form.status.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/status/form.status.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/form/status/form.status.tpl.html
index 629558f..d1ac71c 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/status/form.status.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/status/form.status.tpl.html
@@ -19,10 +19,13 @@ under the License.
 
 <div class="x_panel">
     <div class="x_title">
-        <ol class="breadcrumb">
+        <ol class="breadcrumb pull-left">
             <li><a ng-click="navigateToPath('/admin/statuses')">Statuses</a></li>
             <li class="active">{{statusName}}</li>
         </ol>
+        <div class="pull-right" role="group" ng-show="!settings.isNew">
+            <button class="btn btn-primary" ng-click="viewServers()">View Servers &nbsp;&nbsp;<i class="fa fa-server"></i></button>
+        </div>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">
@@ -45,7 +48,7 @@ under the License.
             </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-danger" ng-show="!settings.isNew" ng-click="confirmDelete(status)">Delete</button>
-                <button type="button" class="btn btn-primary" ng-disabled="statusForm.$pristine || statusForm.$invalid" ng-click="save(status)">{{settings.saveLabel}}</button>
+                <button type="button" class="btn btn-success" ng-disabled="statusForm.$pristine || statusForm.$invalid" ng-click="save(status)">{{settings.saveLabel}}</button>
             </div>
         </form>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/form/tenant/form.tenant.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/tenant/form.tenant.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/form/tenant/form.tenant.tpl.html
index c28c7d6..d80aea0 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/tenant/form.tenant.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/tenant/form.tenant.tpl.html
@@ -39,7 +39,7 @@ under the License.
             </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-danger" ng-show="!settings.isNew" ng-click="confirmDelete(tenant)">Delete</button>
-                <button type="button" class="btn btn-primary" ng-disabled="tenantForm.$pristine || tenantForm.$invalid" ng-click="save(tenant)">{{settings.saveLabel}}</button>
+                <button type="button" class="btn btn-success" ng-disabled="tenantForm.$pristine || tenantForm.$invalid" ng-click="save(tenant)">{{settings.saveLabel}}</button>
             </div>
         </form>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/form/type/FormTypeController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/type/FormTypeController.js b/traffic_ops/experimental/ui/app/src/common/modules/form/type/FormTypeController.js
index 0bf7aeb..9fb493a 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/type/FormTypeController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/type/FormTypeController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var FormTypeController = function(type, $scope, formUtils, stringUtils, locationUtils) {
+var FormTypeController = function(type, $scope, $location, formUtils, stringUtils, locationUtils) {
 
     $scope.type = type;
 
@@ -28,6 +28,18 @@ var FormTypeController = function(type, $scope, formUtils, stringUtils, location
 
     $scope.labelize = stringUtils.labelize;
 
+    $scope.viewServers = function() {
+        $location.path($location.path() + '/servers');
+    };
+
+    $scope.viewDeliveryServices = function() {
+        $location.path($location.path() + '/delivery-services');
+    };
+
+    $scope.viewCacheGroups = function() {
+        $location.path($location.path() + '/cache-groups');
+    };
+
     $scope.navigateToPath = locationUtils.navigateToPath;
 
     $scope.hasError = formUtils.hasError;
@@ -36,5 +48,5 @@ var FormTypeController = function(type, $scope, formUtils, stringUtils, location
 
 };
 
-FormTypeController.$inject = ['type', '$scope', 'formUtils', 'stringUtils', 'locationUtils'];
+FormTypeController.$inject = ['type', '$scope', '$location', 'formUtils', 'stringUtils', 'locationUtils'];
 module.exports = FormTypeController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/form/type/form.type.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/type/form.type.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/form/type/form.type.tpl.html
index eefd66f..27454ae 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/type/form.type.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/type/form.type.tpl.html
@@ -19,10 +19,15 @@ under the License.
 
 <div class="x_panel">
     <div class="x_title">
-        <ol class="breadcrumb">
+        <ol class="breadcrumb pull-left">
             <li><a ng-click="navigateToPath('/admin/types')">Types</a></li>
             <li class="active">{{typeName}}</li>
         </ol>
+        <div class="pull-right" role="group" ng-show="!settings.isNew">
+            <button class="btn btn-primary" ng-show="type.useInTable == 'server'" ng-click="viewServers()">View Servers &nbsp;&nbsp;<i class="fa fa-server"></i></button>
+            <button class="btn btn-primary" ng-show="type.useInTable == 'deliveryservice'" ng-click="viewDeliveryServices()">View Delivery Services &nbsp;&nbsp;<i class="fa fa-server"></i></button>
+            <button class="btn btn-primary" ng-show="type.useInTable == 'cachegroup'" ng-click="viewCacheGroups()">View Cache Groups &nbsp;&nbsp;<i class="fa fa-server"></i></button>
+        </div>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">
@@ -45,7 +50,7 @@ under the License.
             </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-danger" ng-show="!settings.isNew" ng-click="confirmDelete(type)">Delete</button>
-                <button type="button" class="btn btn-primary" ng-disabled="typeForm.$pristine || typeForm.$invalid" ng-click="save(type)">{{settings.saveLabel}}</button>
+                <button type="button" class="btn btn-success" ng-disabled="typeForm.$pristine || typeForm.$invalid" ng-click="save(type)">{{settings.saveLabel}}</button>
             </div>
         </form>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/form/user/form.user.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/user/form.user.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/form/user/form.user.tpl.html
index d9391b1..0f4cffd 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/user/form.user.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/user/form.user.tpl.html
@@ -20,12 +20,20 @@ under the License.
 
 <div class="x_panel">
     <div class="x_title">
-        <ol class="breadcrumb">
+        <ol class="breadcrumb pull-left">
             <li><a ng-click="navigateToPath('/admin/users')">Users</a></li>
             <li class="active">{{userName}}</li>
         </ol>
-        <div class="btn-group pull-right" role="group" ng-show="!settings.isNew">
-            <button class="btn btn-default" ng-click="viewDeliveryServices()">Assigned Delivery Services</button>
+        <div class="pull-right" ng-show="!settings.isNew">
+            <div class="btn-group" role="group" uib-dropdown is-open="more.isopen">
+                <button type="button" class="btn btn-default dropdown-toggle" uib-dropdown-toggle aria-haspopup="true" aria-expanded="false">
+                    More
+                    <span class="caret"></span>
+                </button>
+                <ul class="dropdown-menu-right dropdown-menu" uib-dropdown-menu>
+                    <li role="menuitem"><a ng-click="viewDeliveryServices()">View Assigned Delivery Services</a></li>
+                </ul>
+            </div>
         </div>
         <div class="clearfix"></div>
     </div>
@@ -89,7 +97,7 @@ under the License.
             </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-danger" ng-show="!settings.isNew" ng-click="confirmDelete(user)">Delete</button>
-                <button type="button" class="btn btn-primary" ng-disabled="userForm.$pristine || userForm.$invalid" ng-click="confirmSave(user, userForm.username)">{{settings.saveLabel}}</button>
+                <button type="button" class="btn btn-success" ng-disabled="userForm.$pristine || userForm.$invalid" ng-click="confirmSave(user, userForm.username)">{{settings.saveLabel}}</button>
             </div>
         </form>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/asns/table.asns.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/asns/table.asns.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/asns/table.asns.tpl.html
index 78cbb07..70ccb22 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/asns/table.asns.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/asns/table.asns.tpl.html
@@ -22,7 +22,7 @@ under the License.
         <ol class="breadcrumb pull-left">
             <li class="active">ASNs</li>
         </ol>
-        <button class="btn btn-primary pull-right" ng-click="createASN()">New</button>
+        <button class="btn btn-primary pull-right" ng-click="createASN()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create ASN</button>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupAsns/TableCacheGroupAsnsController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupAsns/TableCacheGroupAsnsController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupAsns/TableCacheGroupAsnsController.js
new file mode 100644
index 0000000..72264b7
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupAsns/TableCacheGroupAsnsController.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.
+ */
+
+var TableCacheGroupAsnsController = function(cacheGroup, asns, $scope, locationUtils) {
+
+	$scope.cacheGroup = cacheGroup;
+
+	$scope.asns = asns;
+
+	$scope.editASN = function(id) {
+		locationUtils.navigateToPath('/admin/asns/' + id);
+	};
+
+	$scope.navigateToPath = locationUtils.navigateToPath;
+
+	angular.element(document).ready(function () {
+		$('#parametersTable').dataTable({
+			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
+			"iDisplayLength": 100
+		});
+	});
+
+};
+
+TableCacheGroupAsnsController.$inject = ['cacheGroup', 'asns', '$scope', 'locationUtils'];
+module.exports = TableCacheGroupAsnsController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupAsns/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupAsns/index.js b/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupAsns/index.js
new file mode 100644
index 0000000..48050e0
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupAsns/index.js
@@ -0,0 +1,21 @@
+/*
+ * 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('trafficOps.table.cacheGroupAsns', [])
+	.controller('TableCacheGroupAsnsController', require('./TableCacheGroupAsnsController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupAsns/table.cacheGroupAsns.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupAsns/table.cacheGroupAsns.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupAsns/table.cacheGroupAsns.tpl.html
new file mode 100644
index 0000000..165c212
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupAsns/table.cacheGroupAsns.tpl.html
@@ -0,0 +1,47 @@
+<!--
+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 class="x_panel">
+    <div class="x_title">
+        <ol class="breadcrumb pull-left">
+            <li><a ng-click="navigateToPath('/configure/cache-groups')">Cache Groups</a></li>
+            <li><a ng-click="navigateToPath('/configure/cache-groups/' + cacheGroup.id)">{{cacheGroup.name}}</a></li>
+            <li class="active">ASNs</li>
+        </ol>
+        <div class="clearfix"></div>
+    </div>
+    <div class="x_content">
+        <br>
+        <table id="asnsTable" class="table responsive-utilities jambo_table">
+            <thead>
+                <tr class="headings">
+                    <th>asn</th>
+                    <th>cachegroup</th>
+                </tr>
+            </thead>
+            <tbody>
+                <tr ng-click="editASN(asn.id)" ng-repeat="asn in asns">
+                    <td>{{asn.asn}}</td>
+                    <td>{{asn.cachegroup}}</td>
+                </tr>
+            </tbody>
+        </table>
+    </div>
+</div>
+

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupParameters/TableCacheGroupParametersController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupParameters/TableCacheGroupParametersController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupParameters/TableCacheGroupParametersController.js
index 401e5a7..d455e7b 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupParameters/TableCacheGroupParametersController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupParameters/TableCacheGroupParametersController.js
@@ -17,11 +17,11 @@
  * under the License.
  */
 
-var TableCacheGroupParametersController = function(cacheGroup, parameters, $scope, locationUtils) {
+var TableCacheGroupParametersController = function(cacheGroup, cacheGroupParameters, $scope, locationUtils) {
 
 	$scope.cacheGroup = cacheGroup;
 
-	$scope.parameters = parameters;
+	$scope.cacheGroupParameters = cacheGroupParameters;
 
 	$scope.addParameter = function() {
 		alert('not hooked up yet: add parameter to cache group');
@@ -42,5 +42,5 @@ var TableCacheGroupParametersController = function(cacheGroup, parameters, $scop
 
 };
 
-TableCacheGroupParametersController.$inject = ['cacheGroup', 'parameters', '$scope', 'locationUtils'];
+TableCacheGroupParametersController.$inject = ['cacheGroup', 'cacheGroupParameters', '$scope', 'locationUtils'];
 module.exports = TableCacheGroupParametersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupParameters/table.cacheGroupParameters.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupParameters/table.cacheGroupParameters.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupParameters/table.cacheGroupParameters.tpl.html
index 6cdf36f..4a6566d 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupParameters/table.cacheGroupParameters.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupParameters/table.cacheGroupParameters.tpl.html
@@ -40,7 +40,7 @@ under the License.
             </tr>
             </thead>
             <tbody>
-            <tr ng-repeat="parameter in parameters">
+            <tr ng-repeat="parameter in cacheGroupParameters">
                 <td>{{parameter.id}}</td>
                 <td>{{parameter.name}}</td>
                 <td>{{parameter.configFile}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupServers/TableCacheGroupServersController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupServers/TableCacheGroupServersController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupServers/TableCacheGroupServersController.js
index d1a135c..89c44d4 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupServers/TableCacheGroupServersController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupServers/TableCacheGroupServersController.js
@@ -23,12 +23,12 @@ var TableCacheGroupsServersController = function(cacheGroup, servers, $scope, lo
 
 	$scope.servers = servers;
 
-	$scope.addServer = function() {
-		alert('not hooked up yet: addServer to cg');
+	$scope.editServer = function(id) {
+		locationUtils.navigateToPath('/configure/servers/' + id);
 	};
 
-	$scope.removeServer = function() {
-		alert('not hooked up yet: removeServer from cg');
+	$scope.queueUpdates = function() {
+		alert('not hooked up yet: queuing updates for all cdn servers');
 	};
 
 	$scope.navigateToPath = locationUtils.navigateToPath;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupServers/table.cacheGroupServers.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupServers/table.cacheGroupServers.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupServers/table.cacheGroupServers.tpl.html
index 43c1b1d..3b821b5 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupServers/table.cacheGroupServers.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupServers/table.cacheGroupServers.tpl.html
@@ -24,7 +24,7 @@ under the License.
             <li><a ng-click="navigateToPath('/configure/cache-groups/' + cacheGroup.id)">{{cacheGroup.name}}</a></li>
             <li class="active">Servers</li>
         </ol>
-        <button class="btn btn-primary pull-right" ng-click="addServer()">Add</button>
+        <button class="btn btn-primary pull-right" ng-click="queueUpdates()">Queue Updates &nbsp;&nbsp;<i class="fa fa-flag"></i></button>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">
@@ -45,11 +45,10 @@ under the License.
                 <th>profile</th>
                 <th>iloIpAddress</th>
                 <th>iloIpGateway</th>
-                <th></th>
             </tr>
             </thead>
             <tbody>
-            <tr ng-repeat="server in servers" ng-class="{'active': server.updPending}">
+            <tr ng-click="editServer(server.id)" ng-repeat="server in servers" ng-class="{'active': server.updPending}">
                 <td>{{server.updPending}}</td>
                 <td>{{server.hostName}}</td>
                 <td>{{server.domainName}}</td>
@@ -63,7 +62,6 @@ under the License.
                 <td>{{server.profile}}</td>
                 <td>{{server.iloIpAddress}}</td>
                 <td>{{server.iloIpGateway}}</td>
-                <td><button type="button" class="btn btn-link" title="Remove from Delivery Service" ng-click="removeServer()"><i class="fa fa-trash-o"></i></button></td>
             </tr>
             </tbody>
         </table>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroups/table.cacheGroups.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroups/table.cacheGroups.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroups/table.cacheGroups.tpl.html
index a473f0d..59d8604 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroups/table.cacheGroups.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroups/table.cacheGroups.tpl.html
@@ -22,7 +22,7 @@ under the License.
         <ol class="breadcrumb pull-left">
             <li class="active">Cache Groups</li>
         </ol>
-        <button class="btn btn-primary pull-right" ng-click="createCacheGroup()">New</button>
+        <button class="btn btn-primary pull-right" ng-click="createCacheGroup()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create Cache Group</button>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/TableCDNServersController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/TableCDNServersController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/TableCDNServersController.js
index 006c61b..9401375 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/TableCDNServersController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/TableCDNServersController.js
@@ -27,6 +27,10 @@ var TableCDNServersController = function(cdn, servers, $scope, locationUtils) {
 		locationUtils.navigateToPath('/configure/servers/' + id);
 	};
 
+	$scope.queueUpdates = function() {
+		alert('not hooked up yet: queuing updates for all cdn servers');
+	};
+
 	$scope.navigateToPath = locationUtils.navigateToPath;
 
 	angular.element(document).ready(function () {

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/table.cdnServers.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/table.cdnServers.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/table.cdnServers.tpl.html
index 707a750..0d3a365 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/table.cdnServers.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/table.cdnServers.tpl.html
@@ -24,6 +24,7 @@ under the License.
             <li><a ng-click="navigateToPath('/admin/cdns/' + cdn.id)">{{cdn.name}}</a></li>
             <li class="active">Servers</li>
         </ol>
+        <button class="btn btn-primary pull-right" ng-click="queueUpdates()">Queue Updates &nbsp;&nbsp;<i class="fa fa-flag"></i></button>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/cdns/table.cdns.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cdns/table.cdns.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/cdns/table.cdns.tpl.html
index bc3aeee..17a8768 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/cdns/table.cdns.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cdns/table.cdns.tpl.html
@@ -22,7 +22,7 @@ under the License.
         <ol class="breadcrumb pull-left">
             <li class="active">CDNs</li>
         </ol>
-        <button class="btn btn-primary pull-right" ng-click="createCDN()">New</button>
+        <button class="btn btn-primary pull-right" ng-click="createCDN()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create CDN</button>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceRegexes/TableDeliveryServiceRegexesController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceRegexes/TableDeliveryServiceRegexesController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceRegexes/TableDeliveryServiceRegexesController.js
index 93a2e28..cdc04e0 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceRegexes/TableDeliveryServiceRegexesController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceRegexes/TableDeliveryServiceRegexesController.js
@@ -21,7 +21,7 @@ var TableDeliveryServiceRegexesController = function(deliveryService, regexes, $
 
 	$scope.deliveryService = deliveryService;
 
-	$scope.regexes = regexes[0].regexes;
+	$scope.regexes = _.find(regexes, function(dsRegexes) { return dsRegexes.dsName == deliveryService.xmlId; });
 
 	$scope.addRegex = function() {
 		alert('not hooked up yet: addRegex to ds');



[08/11] incubator-trafficcontrol git commit: adds more relational tables. i.e. cdns/4/servers and cdns/4/delivery-services

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/new/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/new/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/new/index.js
new file mode 100644
index 0000000..ed21486
--- /dev/null
+++ b/traffic_ops/experimental/ui/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('trafficOps.private.admin.physLocations.new', [])
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficOps.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/625ba56f/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/physLocations.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/physLocations.tpl.html b/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/physLocations.tpl.html
new file mode 100644
index 0000000..dce6e52
--- /dev/null
+++ b/traffic_ops/experimental/ui/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/625ba56f/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/servers/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/servers/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/servers/index.js
new file mode 100644
index 0000000..111d6c1
--- /dev/null
+++ b/traffic_ops/experimental/ui/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('trafficOps.private.admin.physLocations.servers', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficOps.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(serverService) {
+								return serverService.getServers();
+							}
+						}
+					}
+				}
+			})
+		;
+		$urlRouterProvider.otherwise('/');
+	});

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/modules/private/admin/profiles/servers/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/profiles/servers/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/profiles/servers/index.js
new file mode 100644
index 0000000..8900ea6
--- /dev/null
+++ b/traffic_ops/experimental/ui/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('trafficOps.private.admin.profiles.servers', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficOps.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(null, $stateParams.profileId);
+							}
+						}
+					}
+				}
+			})
+		;
+		$urlRouterProvider.otherwise('/');
+	});

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/modules/private/admin/regions/physLocations/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/regions/physLocations/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/regions/physLocations/index.js
new file mode 100644
index 0000000..4973a47
--- /dev/null
+++ b/traffic_ops/experimental/ui/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('trafficOps.private.admin.regions.physLocations', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficOps.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(physLocationService) {
+								return physLocationService.getPhysLocations();
+							}
+						}
+					}
+				}
+			})
+		;
+		$urlRouterProvider.otherwise('/');
+	});

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/modules/private/configure/deliveryServices/regexes/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/configure/deliveryServices/regexes/index.js b/traffic_ops/experimental/ui/app/src/modules/private/configure/deliveryServices/regexes/index.js
new file mode 100644
index 0000000..15384f5
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/modules/private/configure/deliveryServices/regexes/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('trafficOps.private.configure.deliveryServices.regexes', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficOps.private.configure.deliveryServices.regexes', {
+				url: '/{deliveryServiceId}/regexes',
+				views: {
+					deliveryServicesContent: {
+						templateUrl: 'common/modules/table/deliveryServiceRegexes/table.deliveryServiceRegexes.tpl.html',
+						controller: 'TableDeliveryServiceRegexesController',
+						resolve: {
+							deliveryService: function($stateParams, deliveryServiceService) {
+								return deliveryServiceService.getDeliveryService($stateParams.deliveryServiceId);
+							},
+							regexes: function($stateParams, regexService) {
+								return regexService.getRegexes($stateParams.deliveryServiceId);
+							}
+						}
+					}
+				}
+			})
+		;
+		$urlRouterProvider.otherwise('/');
+	});

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/modules/private/configure/deliveryServices/users/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/configure/deliveryServices/users/index.js b/traffic_ops/experimental/ui/app/src/modules/private/configure/deliveryServices/users/index.js
new file mode 100644
index 0000000..4f01833
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/modules/private/configure/deliveryServices/users/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('trafficOps.private.configure.deliveryServices.users', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficOps.private.configure.deliveryServices.users', {
+				url: '/{deliveryServiceId}/users',
+				views: {
+					deliveryServicesContent: {
+						templateUrl: 'common/modules/table/deliveryServiceUsers/table.deliveryServiceUsers.tpl.html',
+						controller: 'TableDeliveryServiceUsersController',
+						resolve: {
+							deliveryService: function($stateParams, deliveryServiceService) {
+								return deliveryServiceService.getDeliveryService($stateParams.deliveryServiceId);
+							},
+							users: function($stateParams, userService) {
+								return userService.getUsers();
+							}
+						}
+					}
+				}
+			})
+		;
+		$urlRouterProvider.otherwise('/');
+	});

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/styles/main.scss
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/styles/main.scss b/traffic_ops/experimental/ui/app/src/styles/main.scss
index 6950ae8..a2e2e61 100755
--- a/traffic_ops/experimental/ui/app/src/styles/main.scss
+++ b/traffic_ops/experimental/ui/app/src/styles/main.scss
@@ -44,7 +44,7 @@ $fa-font-path: "../assets/fonts";
 // admin
 @import "../modules/private/admin/admin";
 @import "../modules/private/admin/divisions/divisions";
-@import "../modules/private/admin/locations/locations";
+@import "../modules/private/admin/physLocations/physLocations";
 @import "../modules/private/admin/regions/regions";
 @import "../modules/private/admin/tenants/tenants";
 @import "../modules/private/admin/users/users";


[07/11] incubator-trafficcontrol git commit: adds cg params and profile params page

Posted by da...@apache.org.
adds cg params and profile params page


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/41c93bce
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/41c93bce
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/41c93bce

Branch: refs/heads/master
Commit: 41c93bce2571fbd972c6d7539500f97a9e9c6c7f
Parents: d0e1fd3
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Wed Nov 30 16:16:40 2016 -0700
Committer: Dan Kirkwood <da...@gmail.com>
Committed: Thu Jan 5 14:57:46 2017 -0700

----------------------------------------------------------------------
 .../common/modules/form/cacheGroup/FormCacheGroupController.js   | 4 ++++
 1 file changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/41c93bce/traffic_ops/experimental/ui/app/src/common/modules/form/cacheGroup/FormCacheGroupController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/cacheGroup/FormCacheGroupController.js b/traffic_ops/experimental/ui/app/src/common/modules/form/cacheGroup/FormCacheGroupController.js
index a26277d..ef13fe0 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/cacheGroup/FormCacheGroupController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/cacheGroup/FormCacheGroupController.js
@@ -51,6 +51,10 @@ var FormCacheGroupController = function(cacheGroup, $scope, $location, formUtils
         $location.path($location.path() + '/servers');
     };
 
+    $scope.viewParams = function() {
+        $location.path($location.path() + '/parameters');
+    };
+
     $scope.navigateToPath = locationUtils.navigateToPath;
 
     $scope.hasError = formUtils.hasError;


[10/11] incubator-trafficcontrol git commit: adds more relational tables. i.e. cdns/4/servers and cdns/4/delivery-services

Posted by da...@apache.org.
adds more relational tables. i.e. cdns/4/servers and cdns/4/delivery-services


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/625ba56f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/625ba56f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/625ba56f

Branch: refs/heads/master
Commit: 625ba56f8356d2efaf0f9cd84977a9c8cb030730
Parents: 86c5a54
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Wed Dec 14 16:51:58 2016 -0700
Committer: Dan Kirkwood <da...@gmail.com>
Committed: Thu Jan 5 14:57:46 2017 -0700

----------------------------------------------------------------------
 traffic_ops/experimental/ui/app/src/app.js      | 32 ++++++---
 .../ui/app/src/common/api/LocationService.js    | 71 -------------------
 .../app/src/common/api/PhysLocationService.js   | 71 +++++++++++++++++++
 .../ui/app/src/common/api/RegexService.js       | 29 ++++++++
 .../ui/app/src/common/api/ServerService.js      |  4 +-
 .../experimental/ui/app/src/common/api/index.js |  4 +-
 .../modules/form/cdn/FormCDNController.js       | 12 +++-
 .../common/modules/form/cdn/form.cdn.tpl.html   |  2 +
 .../FormDeliveryServiceController.js            |  4 ++
 .../form.deliveryService.tpl.html               |  1 +
 .../form/location/FormLocationController.js     | 63 -----------------
 .../location/edit/FormEditLocationController.js | 72 -------------------
 .../common/modules/form/location/edit/index.js  | 21 ------
 .../form/location/form.location.tpl.html        | 64 -----------------
 .../src/common/modules/form/location/index.js   | 21 ------
 .../location/new/FormNewLocationController.js   | 39 -----------
 .../common/modules/form/location/new/index.js   | 21 ------
 .../physLocation/FormPhysLocationController.js  | 63 +++++++++++++++++
 .../edit/FormEditPhysLocationController.js      | 72 +++++++++++++++++++
 .../modules/form/physLocation/edit/index.js     | 21 ++++++
 .../physLocation/form.physLocation.tpl.html     | 64 +++++++++++++++++
 .../common/modules/form/physLocation/index.js   | 21 ++++++
 .../new/FormNewPhysLocationController.js        | 39 +++++++++++
 .../modules/form/physLocation/new/index.js      | 21 ++++++
 .../form/profile/FormProfileController.js       |  4 ++
 .../modules/form/profile/form.profile.tpl.html  |  1 +
 .../modules/form/region/FormRegionController.js |  8 ++-
 .../modules/form/region/form.region.tpl.html    |  3 +
 .../modules/form/server/FormServerController.js | 12 ++--
 .../modules/form/server/form.server.tpl.html    |  8 +--
 .../modules/navigation/navigation.tpl.html      |  2 +-
 .../TableCDNDeliveryServicesController.js       | 42 +++++++++++
 .../modules/table/cdnDeliveryServices/index.js  | 21 ++++++
 .../table.cdnDeliveryServices.tpl.html          | 74 ++++++++++++++++++++
 .../cdnServers/TableCDNServersController.js     | 42 +++++++++++
 .../common/modules/table/cdnServers/index.js    | 21 ++++++
 .../table/cdnServers/table.cdnServers.tpl.html  | 70 ++++++++++++++++++
 .../TableDeliveryServiceRegexesController.js    | 46 ++++++++++++
 .../table/deliveryServiceRegexes/index.js       | 21 ++++++
 .../table.deliveryServiceRegexes.tpl.html       | 52 ++++++++++++++
 .../TableDeliveryServiceUsersController.js      | 50 +++++++++++++
 .../modules/table/deliveryServiceUsers/index.js | 21 ++++++
 .../table.deliveryServiceUsers.tpl.html         | 57 +++++++++++++++
 .../TableDivisionRegionsController.js           |  8 +--
 .../table.divisionRegions.tpl.html              |  5 +-
 .../TableLocationServersController.js           | 38 ----------
 .../modules/table/locationServers/index.js      | 21 ------
 .../table.locationServers.tpl.html              | 70 ------------------
 .../table/locations/TableLocationsController.js | 42 -----------
 .../src/common/modules/table/locations/index.js | 21 ------
 .../table/locations/table.locations.tpl.html    | 55 ---------------
 .../TablePhysLocationServersController.js       | 42 +++++++++++
 .../modules/table/physLocationServers/index.js  | 21 ++++++
 .../table.physLocationServers.tpl.html          | 70 ++++++++++++++++++
 .../TablePhysLocationsController.js             | 42 +++++++++++
 .../common/modules/table/physLocations/index.js | 21 ++++++
 .../physLocations/table.physLocations.tpl.html  | 55 +++++++++++++++
 .../TableProfileServersController.js            | 42 +++++++++++
 .../modules/table/profileServers/index.js       | 22 ++++++
 .../table.profileServers.tpl.html               | 69 ++++++++++++++++++
 .../TableRegionPhysLocationsController.js       | 46 ++++++++++++
 .../modules/table/regionPhysLocations/index.js  | 21 ++++++
 .../table.regionPhysLocations.tpl.html          | 56 +++++++++++++++
 .../admin/cdns/deliveryServices/index.js        | 42 +++++++++++
 .../modules/private/admin/cdns/servers/index.js | 42 +++++++++++
 .../admin/locations/LocationsController.js      | 24 -------
 .../private/admin/locations/_locations.scss     | 16 -----
 .../private/admin/locations/edit/index.js       | 39 -----------
 .../modules/private/admin/locations/index.js    | 36 ----------
 .../private/admin/locations/list/index.js       | 39 -----------
 .../private/admin/locations/locations.tpl.html  | 22 ------
 .../private/admin/locations/new/index.js        | 39 -----------
 .../private/admin/locations/servers/index.js    | 42 -----------
 .../physLocations/PhysLocationsController.js    | 24 +++++++
 .../admin/physLocations/_physLocations.scss     | 16 +++++
 .../private/admin/physLocations/edit/index.js   | 39 +++++++++++
 .../private/admin/physLocations/index.js        | 36 ++++++++++
 .../private/admin/physLocations/list/index.js   | 39 +++++++++++
 .../private/admin/physLocations/new/index.js    | 39 +++++++++++
 .../admin/physLocations/physLocations.tpl.html  | 22 ++++++
 .../admin/physLocations/servers/index.js        | 42 +++++++++++
 .../private/admin/profiles/servers/index.js     | 42 +++++++++++
 .../admin/regions/physLocations/index.js        | 42 +++++++++++
 .../configure/deliveryServices/regexes/index.js | 42 +++++++++++
 .../configure/deliveryServices/users/index.js   | 42 +++++++++++
 .../experimental/ui/app/src/styles/main.scss    |  2 +-
 86 files changed, 2006 insertions(+), 916 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/app.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/app.js b/traffic_ops/experimental/ui/app/src/app.js
index 8e9362a..18261f3 100644
--- a/traffic_ops/experimental/ui/app/src/app.js
+++ b/traffic_ops/experimental/ui/app/src/app.js
@@ -58,19 +58,21 @@ var trafficOps = angular.module('trafficOps', [
         require('./modules/private/admin/asns/list').name,
         require('./modules/private/admin/asns/new').name,
         require('./modules/private/admin/cdns').name,
+        require('./modules/private/admin/cdns/deliveryServices').name,
         require('./modules/private/admin/cdns/edit').name,
         require('./modules/private/admin/cdns/list').name,
         require('./modules/private/admin/cdns/new').name,
+        require('./modules/private/admin/cdns/servers').name,
         require('./modules/private/admin/divisions').name,
         require('./modules/private/admin/divisions/edit').name,
         require('./modules/private/admin/divisions/list').name,
         require('./modules/private/admin/divisions/new').name,
         require('./modules/private/admin/divisions/regions').name,
-        require('./modules/private/admin/locations').name,
-        require('./modules/private/admin/locations/edit').name,
-        require('./modules/private/admin/locations/list').name,
-        require('./modules/private/admin/locations/new').name,
-        require('./modules/private/admin/locations/servers').name,
+        require('./modules/private/admin/physLocations').name,
+        require('./modules/private/admin/physLocations/edit').name,
+        require('./modules/private/admin/physLocations/list').name,
+        require('./modules/private/admin/physLocations/new').name,
+        require('./modules/private/admin/physLocations/servers').name,
         require('./modules/private/admin/parameters').name,
         require('./modules/private/admin/parameters/edit').name,
         require('./modules/private/admin/parameters/list').name,
@@ -80,9 +82,11 @@ var trafficOps = angular.module('trafficOps', [
         require('./modules/private/admin/profiles/list').name,
         require('./modules/private/admin/profiles/new').name,
         require('./modules/private/admin/profiles/parameters').name,
+        require('./modules/private/admin/profiles/servers').name,
         require('./modules/private/admin/regions').name,
         require('./modules/private/admin/regions/edit').name,
         require('./modules/private/admin/regions/list').name,
+        require('./modules/private/admin/regions/physLocations').name,
         require('./modules/private/admin/regions/new').name,
         require('./modules/private/admin/statuses').name,
         require('./modules/private/admin/statuses/edit').name,
@@ -114,7 +118,9 @@ var trafficOps = angular.module('trafficOps', [
         require('./modules/private/configure/deliveryServices/edit').name,
         require('./modules/private/configure/deliveryServices/list').name,
         require('./modules/private/configure/deliveryServices/new').name,
+        require('./modules/private/configure/deliveryServices/regexes').name,
         require('./modules/private/configure/deliveryServices/servers').name,
+        require('./modules/private/configure/deliveryServices/users').name,
         require('./modules/private/configure/servers').name,
         require('./modules/private/configure/servers/deliveryServices').name,
         require('./modules/private/configure/servers/edit').name,
@@ -155,9 +161,9 @@ var trafficOps = angular.module('trafficOps', [
         require('./common/modules/form/division').name,
         require('./common/modules/form/division/edit').name,
         require('./common/modules/form/division/new').name,
-        require('./common/modules/form/location').name,
-        require('./common/modules/form/location/edit').name,
-        require('./common/modules/form/location/new').name,
+        require('./common/modules/form/physLocation').name,
+        require('./common/modules/form/physLocation/edit').name,
+        require('./common/modules/form/physLocation/new').name,
         require('./common/modules/form/parameter').name,
         require('./common/modules/form/parameter/edit').name,
         require('./common/modules/form/parameter/new').name,
@@ -189,16 +195,22 @@ var trafficOps = angular.module('trafficOps', [
         require('./common/modules/table/cacheGroupServers').name,
         require('./common/modules/table/asns').name,
         require('./common/modules/table/cdns').name,
+        require('./common/modules/table/cdnDeliveryServices').name,
+        require('./common/modules/table/cdnServers').name,
         require('./common/modules/table/deliveryServices').name,
+        require('./common/modules/table/deliveryServiceRegexes').name,
         require('./common/modules/table/deliveryServiceServers').name,
+        require('./common/modules/table/deliveryServiceUsers').name,
         require('./common/modules/table/divisions').name,
         require('./common/modules/table/divisionRegions').name,
-        require('./common/modules/table/locations').name,
-        require('./common/modules/table/locationServers').name,
+        require('./common/modules/table/physLocations').name,
+        require('./common/modules/table/physLocationServers').name,
         require('./common/modules/table/parameters').name,
         require('./common/modules/table/profileParameters').name,
+        require('./common/modules/table/profileServers').name,
         require('./common/modules/table/profiles').name,
         require('./common/modules/table/regions').name,
+        require('./common/modules/table/regionPhysLocations').name,
         require('./common/modules/table/servers').name,
         require('./common/modules/table/serverDeliveryServices').name,
         require('./common/modules/table/statuses').name,

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/api/LocationService.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/LocationService.js b/traffic_ops/experimental/ui/app/src/common/api/LocationService.js
deleted file mode 100644
index 81f94db..0000000
--- a/traffic_ops/experimental/ui/app/src/common/api/LocationService.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 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 LocationService = function(Restangular, locationUtils, messageModel) {
-
-    this.getLocations = function() {
-        return Restangular.all('phys_locations').getList();
-    };
-
-    this.getLocation = function(id) {
-        return Restangular.one("phys_locations", id).get();
-    };
-
-    this.createLocation = function(location) {
-        return Restangular.service('phys_locations').post(location)
-            .then(
-                function() {
-                    messageModel.setMessages([ { level: 'success', text: 'Location created' } ], true);
-                    locationUtils.navigateToPath('/admin/locations');
-
-                },
-                function(fault) {
-                    messageModel.setMessages(fault.data.alerts, false);
-                }
-            );
-    };
-
-    this.updateLocation = function(location) {
-        return location.put()
-            .then(
-                function() {
-                    messageModel.setMessages([ { level: 'success', text: 'Location updated' } ], false);
-                },
-                function(fault) {
-                    messageModel.setMessages(fault.data.alerts, false);
-                }
-            );
-    };
-
-    this.deleteLocation = function(id) {
-        return Restangular.one("phys_locations", id).remove()
-            .then(
-                function() {
-                    messageModel.setMessages([ { level: 'success', text: 'Location deleted' } ], true);
-                },
-                function(fault) {
-                    messageModel.setMessages(fault.data.alerts, true);
-                }
-            );
-    };
-
-};
-
-LocationService.$inject = ['Restangular', 'locationUtils', 'messageModel'];
-module.exports = LocationService;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/api/PhysLocationService.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/PhysLocationService.js b/traffic_ops/experimental/ui/app/src/common/api/PhysLocationService.js
new file mode 100644
index 0000000..4d94592
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/api/PhysLocationService.js
@@ -0,0 +1,71 @@
+/*
+ * 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 PhysLocationService = function(Restangular, locationUtils, messageModel) {
+
+    this.getPhysLocations = function() {
+        return Restangular.all('phys_locations').getList();
+    };
+
+    this.getPhysLocation = function(id) {
+        return Restangular.one("phys_locations", id).get();
+    };
+
+    this.createPhysLocation = function(physLocation) {
+        return Restangular.service('phys_locations').post(physLocation)
+            .then(
+                function() {
+                    messageModel.setMessages([ { level: 'success', text: 'Physical location created' } ], true);
+                    locationUtils.navigateToPath('/admin/phys-locations');
+
+                },
+                function(fault) {
+                    messageModel.setMessages(fault.data.alerts, false);
+                }
+            );
+    };
+
+    this.updatePhysLocation = function(physLocation) {
+        return physLocation.put()
+            .then(
+                function() {
+                    messageModel.setMessages([ { level: 'success', text: 'Physical location updated' } ], false);
+                },
+                function(fault) {
+                    messageModel.setMessages(fault.data.alerts, false);
+                }
+            );
+    };
+
+    this.deletePhysLocation = function(id) {
+        return Restangular.one("phys_locations", id).remove()
+            .then(
+                function() {
+                    messageModel.setMessages([ { level: 'success', text: 'Physical location deleted' } ], true);
+                },
+                function(fault) {
+                    messageModel.setMessages(fault.data.alerts, true);
+                }
+            );
+    };
+
+};
+
+PhysLocationService.$inject = ['Restangular', 'locationUtils', 'messageModel'];
+module.exports = PhysLocationService;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/api/RegexService.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/RegexService.js b/traffic_ops/experimental/ui/app/src/common/api/RegexService.js
new file mode 100644
index 0000000..fcd3a64
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/api/RegexService.js
@@ -0,0 +1,29 @@
+/*
+ * 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 RegexService = function(Restangular, locationUtils, messageModel) {
+
+	this.getRegexes = function(dsId) {
+		return Restangular.all('deliveryservices_regexes').getList({ dsId: dsId });
+	};
+
+};
+
+RegexService.$inject = ['Restangular', 'locationUtils', 'messageModel'];
+module.exports = RegexService;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/api/ServerService.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/ServerService.js b/traffic_ops/experimental/ui/app/src/common/api/ServerService.js
index 831d835..b764a69 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/ServerService.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/ServerService.js
@@ -19,8 +19,8 @@
 
 var ServerService = function(Restangular, locationUtils, messageModel) {
 
-    this.getServers = function(dsId) {
-        return Restangular.all('servers').getList({ dsId: dsId });
+    this.getServers = function(dsId, profileId) {
+        return Restangular.all('servers').getList({ dsId: dsId, profileId: profileId });
     };
 
     this.getServer = function(id) {

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/api/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/index.js b/traffic_ops/experimental/ui/app/src/common/api/index.js
index 79a6601..bd579f7 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/index.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/index.js
@@ -25,13 +25,13 @@ module.exports = angular.module('trafficOps.api', [])
     .service('deliveryServiceService', require('./DeliveryServiceService'))
     .service('divisionService', require('./DivisionService'))
     .service('httpService', require('./HttpService'))
-    .service('locationService', require('./LocationService'))
-    .service('locationService', require('./LocationService'))
+    .service('physLocationService', require('./PhysLocationService'))
     .service('parameterService', require('./ParameterService'))
     .service('profileService', require('./ProfileService'))
     .service('profileParameterService', require('./ProfileParameterService'))
     .service('roleService', require('./RoleService'))
     .service('regionService', require('./RegionService'))
+    .service('regexService', require('./RegexService'))
     .service('serverService', require('./ServerService'))
     .service('statusService', require('./StatusService'))
     .service('tenantService', require('./TenantService'))

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/cdn/FormCDNController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/cdn/FormCDNController.js b/traffic_ops/experimental/ui/app/src/common/modules/form/cdn/FormCDNController.js
index 35ed8ee..ee1684a 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/cdn/FormCDNController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/cdn/FormCDNController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var FormCDNController = function(cdn, $scope, formUtils, stringUtils, locationUtils) {
+var FormCDNController = function(cdn, $scope, $location, formUtils, stringUtils, locationUtils) {
 
     $scope.cdn = cdn;
 
@@ -56,6 +56,14 @@ var FormCDNController = function(cdn, $scope, formUtils, stringUtils, locationUt
         alert('not hooked up yet: manageSnapshots for CDN');
     };
 
+    $scope.viewServers = function() {
+        $location.path($location.path() + '/servers');
+    };
+
+    $scope.viewDeliveryServices = function() {
+        $location.path($location.path() + '/delivery-services');
+    };
+
     $scope.navigateToPath = locationUtils.navigateToPath;
 
     $scope.hasError = formUtils.hasError;
@@ -64,5 +72,5 @@ var FormCDNController = function(cdn, $scope, formUtils, stringUtils, locationUt
 
 };
 
-FormCDNController.$inject = ['cdn', '$scope', 'formUtils', 'stringUtils', 'locationUtils'];
+FormCDNController.$inject = ['cdn', '$scope', '$location', 'formUtils', 'stringUtils', 'locationUtils'];
 module.exports = FormCDNController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/cdn/form.cdn.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/cdn/form.cdn.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/form/cdn/form.cdn.tpl.html
index 23f356e..39b6fed 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/cdn/form.cdn.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/cdn/form.cdn.tpl.html
@@ -39,6 +39,8 @@ under the License.
                     <li role="menuitem"><a ng-click="dequeueUpdates()">Dequeue Server Updates</a></li>
                     <li class="divider"></li>
                     <li role="menuitem"><a ng-click="cachegroupHealth()">View Cachegroup Health</a></li>
+                    <li role="menuitem"><a ng-click="viewServers()">View Servers</a></li>
+                    <li role="menuitem"><a ng-click="viewDeliveryServices()">View Delivery Services</a></li>
                 </ul>
             </div>
         </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js b/traffic_ops/experimental/ui/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js
index 32843ee..74ef020 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js
@@ -126,6 +126,10 @@ var FormDeliveryServiceController = function(deliveryService, $scope, $location,
         $location.path($location.path() + '/servers');
     };
 
+    $scope.viewRegexes = function() {
+        $location.path($location.path() + '/regexes');
+    };
+
     $scope.cachegroupHealth = function() {
         alert('not hooked up yet: cachegroupHealth for DS');
     };

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/deliveryService/form.deliveryService.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/deliveryService/form.deliveryService.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/form/deliveryService/form.deliveryService.tpl.html
index f195bad..e3e70f3 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/deliveryService/form.deliveryService.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/deliveryService/form.deliveryService.tpl.html
@@ -25,6 +25,7 @@ under the License.
         </ol>
         <div class="btn-group pull-right" role="group" ng-show="!settings.isNew">
             <button class="btn btn-default" ng-click="assignServers()">Servers</button>
+            <button class="btn btn-default" ng-click="viewRegexes()">Regexes</button>
 
             <div class="btn-group" role="group" uib-dropdown is-open="more.isopen">
                 <button type="button" class="btn btn-default dropdown-toggle" uib-dropdown-toggle aria-haspopup="true" aria-expanded="false">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/location/FormLocationController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/location/FormLocationController.js b/traffic_ops/experimental/ui/app/src/common/modules/form/location/FormLocationController.js
deleted file mode 100644
index 2280bc2..0000000
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/location/FormLocationController.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * 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 FormLocationController = function(location, $scope, $location, formUtils, stringUtils, locationUtils, regionService) {
-
-    var getRegions = function() {
-        regionService.getRegions()
-            .then(function(result) {
-                $scope.regions = result;
-            });
-    };
-
-    $scope.location = location;
-
-    $scope.props = [
-        { name: 'name', type: 'text', required: true, maxLength: 45 },
-        { name: 'shortName', type: 'text', required: true, maxLength: 12 },
-        { name: 'address', type: 'text', required: true, maxLength: 128 },
-        { name: 'city', type: 'text', required: true, maxLength: 128 },
-        { name: 'state', type: 'text', required: true, maxLength: 2 },
-        { name: 'zip', type: 'text', required: true, maxLength: 5 },
-        { name: 'poc', type: 'text', required: false, maxLength: 128 },
-        { name: 'phone', type: 'text', required: false, maxLength: 45 },
-        { name: 'email', type: 'email', required: false, maxLength: 128 }
-    ];
-
-    $scope.labelize = stringUtils.labelize;
-
-    $scope.viewServers = function() {
-        $location.path($location.path() + '/servers');
-    };
-
-    $scope.navigateToPath = locationUtils.navigateToPath;
-
-    $scope.hasError = formUtils.hasError;
-
-    $scope.hasPropertyError = formUtils.hasPropertyError;
-
-    var init = function () {
-        getRegions();
-    };
-    init();
-
-};
-
-FormLocationController.$inject = ['location', '$scope', '$location', 'formUtils', 'stringUtils', 'locationUtils', 'regionService'];
-module.exports = FormLocationController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/location/edit/FormEditLocationController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/location/edit/FormEditLocationController.js b/traffic_ops/experimental/ui/app/src/common/modules/form/location/edit/FormEditLocationController.js
deleted file mode 100644
index 420461a..0000000
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/location/edit/FormEditLocationController.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * 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 FormEditLocationController = function(location, $scope, $controller, $uibModal, $anchorScroll, locationUtils, locationService) {
-
-    // extends the FormLocationController to inherit common methods
-    angular.extend(this, $controller('FormLocationController', { location: location, $scope: $scope }));
-
-    var deleteLocation = function(location) {
-        locationService.deleteLocation(location.id)
-            .then(function() {
-                locationUtils.navigateToPath('/admin/locations');
-            });
-    };
-
-    $scope.locationName = angular.copy(location.name);
-
-    $scope.settings = {
-        isNew: false,
-        saveLabel: 'Update'
-    };
-
-    $scope.save = function(location) {
-        locationService.updateLocation(location).
-            then(function() {
-                $scope.locationName = angular.copy(location.name);
-                $anchorScroll(); // scrolls window to top
-            });
-    };
-
-    $scope.confirmDelete = function(location) {
-        var params = {
-            title: 'Delete Location: ' + location.name,
-            key: location.name
-        };
-        var modalInstance = $uibModal.open({
-            templateUrl: 'common/modules/dialog/delete/dialog.delete.tpl.html',
-            controller: 'DialogDeleteController',
-            size: 'md',
-            resolve: {
-                params: function () {
-                    return params;
-                }
-            }
-        });
-        modalInstance.result.then(function() {
-            deleteLocation(location);
-        }, function () {
-            // do nothing
-        });
-    };
-
-};
-
-FormEditLocationController.$inject = ['location', '$scope', '$controller', '$uibModal', '$anchorScroll', 'locationUtils', 'locationService'];
-module.exports = FormEditLocationController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/location/edit/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/location/edit/index.js b/traffic_ops/experimental/ui/app/src/common/modules/form/location/edit/index.js
deleted file mode 100644
index b143206..0000000
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/location/edit/index.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * 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('trafficOps.form.location.edit', [])
-    .controller('FormEditLocationController', require('./FormEditLocationController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/location/form.location.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/location/form.location.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/form/location/form.location.tpl.html
deleted file mode 100644
index 45c44f8..0000000
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/location/form.location.tpl.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<!--
-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 class="x_panel">
-    <div class="x_title">
-        <ol class="breadcrumb">
-            <li><a ng-click="navigateToPath('/admin/locations')">Physical Locations</a></li>
-            <li class="active">{{locationName}}</li>
-        </ol>
-        <div class="btn-group pull-right" role="group" ng-show="!settings.isNew">
-            <button class="btn btn-default" ng-click="viewServers()">Servers</button>
-        </div>
-        <div class="clearfix"></div>
-    </div>
-    <div class="x_content">
-        <br>
-        <form name="locationForm" class="form-horizontal form-label-left" novalidate>
-            <div class="form-group" ng-class="{'has-error': hasError(locationForm[prop.name]), 'has-feedback': hasError(locationForm[prop.name])}" ng-repeat="prop in props">
-                <label class="control-label col-md-2 col-sm-2 col-xs-12">{{labelize(prop.name)}} <span ng-show="prop.required">*</span></label>
-                <div class="col-md-10 col-sm-10 col-xs-12">
-                    <input id="{{prop.name}}" name="{{prop.name}}" type="{{prop.type}}" class="form-control" ng-model="location[prop.name]" ng-readonly="prop.readonly" ng-required="prop.required" ng-maxlength="prop.maxLength" autofocus>
-                    <small class="input-error" ng-show="hasPropertyError(locationForm[prop.name], 'required')">Required</small>
-                    <small class="input-error" ng-show="hasPropertyError(locationForm[prop.name], 'maxlength')">Too Long</small>
-                    <span ng-show="hasError(locationForm[prop.name])" class="form-control-feedback"><i class="fa fa-times"></i></span>
-                </div>
-            </div>
-            <div class="form-group" ng-class="{'has-error': hasError(locationForm.region), 'has-feedback': hasError(locationForm.region)}">
-                <label class="control-label col-md-2 col-sm-2 col-xs-12">Region *</label>
-                <div class="col-md-10 col-sm-10 col-xs-12">
-                    <select id="region" name="region" class="form-control" ng-model="location.regionId" ng-options="region.id as region.name for region in regions" required>
-                        <option value="">Select...</option>
-                    </select>
-                    <small class="input-error" ng-show="hasPropertyError(locationForm.region, 'required')">Required</small>
-                </div>
-            </div>
-            <div class="form-group">
-                <label class="control-label col-md-2 col-sm-2 col-xs-12">Comments</label>
-                <div class="col-md-10 col-sm-10 col-xs-12">
-                    <textarea id="comments" name="comments" rows="5" cols="17" class="form-control" ng-model="location.comments" maxlength="256"></textarea>
-                </div>
-            </div>
-            <div class="modal-footer">
-                <button type="button" class="btn btn-danger" ng-show="!settings.isNew" ng-click="confirmDelete(location)">Delete</button>
-                <button type="button" class="btn btn-primary" ng-disabled="locationForm.$pristine || locationForm.$invalid" ng-click="save(location)">{{settings.saveLabel}}</button>
-            </div>
-        </form>
-    </div>
-</div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/location/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/location/index.js b/traffic_ops/experimental/ui/app/src/common/modules/form/location/index.js
deleted file mode 100644
index 978649a..0000000
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/location/index.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * 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('trafficOps.form.location', [])
-    .controller('FormLocationController', require('./FormLocationController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/location/new/FormNewLocationController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/location/new/FormNewLocationController.js b/traffic_ops/experimental/ui/app/src/common/modules/form/location/new/FormNewLocationController.js
deleted file mode 100644
index 70a9769..0000000
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/location/new/FormNewLocationController.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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 FormNewLocationController = function(location, $scope, $controller, locationService) {
-
-    // extends the FormLocationController to inherit common methods
-    angular.extend(this, $controller('FormLocationController', { location: location, $scope: $scope }));
-
-    $scope.locationName = 'New';
-
-    $scope.settings = {
-        isNew: true,
-        saveLabel: 'Create'
-    };
-
-    $scope.save = function(location) {
-        locationService.createLocation(location);
-    };
-
-};
-
-FormNewLocationController.$inject = ['location', '$scope', '$controller', 'locationService'];
-module.exports = FormNewLocationController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/location/new/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/location/new/index.js b/traffic_ops/experimental/ui/app/src/common/modules/form/location/new/index.js
deleted file mode 100644
index 3544d29..0000000
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/location/new/index.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * 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('trafficOps.form.location.new', [])
-    .controller('FormNewLocationController', require('./FormNewLocationController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/FormPhysLocationController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/FormPhysLocationController.js b/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/FormPhysLocationController.js
new file mode 100644
index 0000000..d7f78fc
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/FormPhysLocationController.js
@@ -0,0 +1,63 @@
+/*
+ * 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 FormPhysLocationController = function(physLocation, $scope, $location, formUtils, stringUtils, locationUtils, regionService) {
+
+    var getRegions = function() {
+        regionService.getRegions()
+            .then(function(result) {
+                $scope.regions = result;
+            });
+    };
+
+    $scope.physLocation = physLocation;
+
+    $scope.props = [
+        { name: 'name', type: 'text', required: true, maxLength: 45 },
+        { name: 'shortName', type: 'text', required: true, maxLength: 12 },
+        { name: 'address', type: 'text', required: true, maxLength: 128 },
+        { name: 'city', type: 'text', required: true, maxLength: 128 },
+        { name: 'state', type: 'text', required: true, maxLength: 2 },
+        { name: 'zip', type: 'text', required: true, maxLength: 5 },
+        { name: 'poc', type: 'text', required: false, maxLength: 128 },
+        { name: 'phone', type: 'text', required: false, maxLength: 45 },
+        { name: 'email', type: 'email', required: false, maxLength: 128 }
+    ];
+
+    $scope.labelize = stringUtils.labelize;
+
+    $scope.viewServers = function() {
+        $location.path($location.path() + '/servers');
+    };
+
+    $scope.navigateToPath = locationUtils.navigateToPath;
+
+    $scope.hasError = formUtils.hasError;
+
+    $scope.hasPropertyError = formUtils.hasPropertyError;
+
+    var init = function () {
+        getRegions();
+    };
+    init();
+
+};
+
+FormPhysLocationController.$inject = ['physLocation', '$scope', '$location', 'formUtils', 'stringUtils', 'locationUtils', 'regionService'];
+module.exports = FormPhysLocationController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/edit/FormEditPhysLocationController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/edit/FormEditPhysLocationController.js b/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/edit/FormEditPhysLocationController.js
new file mode 100644
index 0000000..688829a
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/edit/FormEditPhysLocationController.js
@@ -0,0 +1,72 @@
+/*
+ * 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 FormEditPhysLocationController = function(physLocation, $scope, $controller, $uibModal, $anchorScroll, locationUtils, physLocationService) {
+
+    // extends the FormPhysLocationController to inherit common methods
+    angular.extend(this, $controller('FormPhysLocationController', { physLocation: physLocation, $scope: $scope }));
+
+    var deletePhysLocation = function(physLocation) {
+        physLocationService.deletePhysLocation(physLocation.id)
+            .then(function() {
+                locationUtils.navigateToPath('/admin/phys-locations');
+            });
+    };
+
+    $scope.physLocationName = angular.copy(physLocation.name);
+
+    $scope.settings = {
+        isNew: false,
+        saveLabel: 'Update'
+    };
+
+    $scope.save = function(physLocation) {
+        physLocationService.updatePhysLocation(physLocation).
+            then(function() {
+                $scope.physLocationName = angular.copy(physLocation.name);
+                $anchorScroll(); // scrolls window to top
+            });
+    };
+
+    $scope.confirmDelete = function(physLocation) {
+        var params = {
+            title: 'Delete Physical Location: ' + physLocation.name,
+            key: physLocation.name
+        };
+        var modalInstance = $uibModal.open({
+            templateUrl: 'common/modules/dialog/delete/dialog.delete.tpl.html',
+            controller: 'DialogDeleteController',
+            size: 'md',
+            resolve: {
+                params: function () {
+                    return params;
+                }
+            }
+        });
+        modalInstance.result.then(function() {
+            deletePhysLocation(physLocation);
+        }, function () {
+            // do nothing
+        });
+    };
+
+};
+
+FormEditPhysLocationController.$inject = ['physLocation', '$scope', '$controller', '$uibModal', '$anchorScroll', 'locationUtils', 'physLocationService'];
+module.exports = FormEditPhysLocationController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/edit/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/edit/index.js b/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/edit/index.js
new file mode 100644
index 0000000..cd6612d
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/edit/index.js
@@ -0,0 +1,21 @@
+/*
+ * 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('trafficOps.form.physLocation.edit', [])
+    .controller('FormEditPhysLocationController', require('./FormEditPhysLocationController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/form.physLocation.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/form.physLocation.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/form.physLocation.tpl.html
new file mode 100644
index 0000000..5e1b695
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/form.physLocation.tpl.html
@@ -0,0 +1,64 @@
+<!--
+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 class="x_panel">
+    <div class="x_title">
+        <ol class="breadcrumb">
+            <li><a ng-click="navigateToPath('/admin/phys-locations')">Physical Locations</a></li>
+            <li class="active">{{physLocationName}}</li>
+        </ol>
+        <div class="btn-group pull-right" role="group" ng-show="!settings.isNew">
+            <button class="btn btn-default" ng-click="viewServers()">Servers</button>
+        </div>
+        <div class="clearfix"></div>
+    </div>
+    <div class="x_content">
+        <br>
+        <form name="physLocationForm" class="form-horizontal form-label-left" novalidate>
+            <div class="form-group" ng-class="{'has-error': hasError(physLocationForm[prop.name]), 'has-feedback': hasError(physLocationForm[prop.name])}" ng-repeat="prop in props">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">{{labelize(prop.name)}} <span ng-show="prop.required">*</span></label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="{{prop.name}}" name="{{prop.name}}" type="{{prop.type}}" class="form-control" ng-model="physLocation[prop.name]" ng-readonly="prop.readonly" ng-required="prop.required" ng-maxlength="prop.maxLength" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(physLocationForm[prop.name], 'required')">Required</small>
+                    <small class="input-error" ng-show="hasPropertyError(physLocationForm[prop.name], 'maxlength')">Too Long</small>
+                    <span ng-show="hasError(physLocationForm[prop.name])" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(physLocationForm.region), 'has-feedback': hasError(physLocationForm.region)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Region *</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <select id="region" name="region" class="form-control" ng-model="physLocation.regionId" ng-options="region.id as region.name for region in regions" required>
+                        <option value="">Select...</option>
+                    </select>
+                    <small class="input-error" ng-show="hasPropertyError(physLocationForm.region, 'required')">Required</small>
+                </div>
+            </div>
+            <div class="form-group">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Comments</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <textarea id="comments" name="comments" rows="5" cols="17" class="form-control" ng-model="physLocation.comments" maxlength="256"></textarea>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-danger" ng-show="!settings.isNew" ng-click="confirmDelete(physLocation)">Delete</button>
+                <button type="button" class="btn btn-primary" ng-disabled="physLocationForm.$pristine || physLocationForm.$invalid" ng-click="save(physLocation)">{{settings.saveLabel}}</button>
+            </div>
+        </form>
+    </div>
+</div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/index.js b/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/index.js
new file mode 100644
index 0000000..d38a0c3
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/index.js
@@ -0,0 +1,21 @@
+/*
+ * 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('trafficOps.form.physLocation', [])
+    .controller('FormPhysLocationController', require('./FormPhysLocationController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/new/FormNewPhysLocationController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/new/FormNewPhysLocationController.js b/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/new/FormNewPhysLocationController.js
new file mode 100644
index 0000000..ba4aaa3
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/new/FormNewPhysLocationController.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.
+ */
+
+var FormNewPhysLocationController = function(physLocation, $scope, $controller, physLocationService) {
+
+    // extends the FormPhysLocationController to inherit common methods
+    angular.extend(this, $controller('FormPhysLocationController', { physLocation: physLocation, $scope: $scope }));
+
+    $scope.physLocationName = 'New';
+
+    $scope.settings = {
+        isNew: true,
+        saveLabel: 'Create'
+    };
+
+    $scope.save = function(physLocation) {
+        physLocationService.createPhysLocation(physLocation);
+    };
+
+};
+
+FormNewPhysLocationController.$inject = ['physLocation', '$scope', '$controller', 'physLocationService'];
+module.exports = FormNewPhysLocationController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/new/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/new/index.js b/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/new/index.js
new file mode 100644
index 0000000..d8fda0f
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/physLocation/new/index.js
@@ -0,0 +1,21 @@
+/*
+ * 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('trafficOps.form.physLocation.new', [])
+    .controller('FormNewPhysLocationController', require('./FormNewPhysLocationController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/profile/FormProfileController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/profile/FormProfileController.js b/traffic_ops/experimental/ui/app/src/common/modules/form/profile/FormProfileController.js
index 8bef869..14822d8 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/profile/FormProfileController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/profile/FormProfileController.js
@@ -31,6 +31,10 @@ var FormProfileController = function(profile, $scope, $location, formUtils, stri
         $location.path($location.path() + '/parameters');
     };
 
+    $scope.viewServers = function() {
+        $location.path($location.path() + '/servers');
+    };
+
     $scope.cloneProfile = function() {
         alert('not hooked up yet: cloneProfile');
     };

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/profile/form.profile.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/profile/form.profile.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/form/profile/form.profile.tpl.html
index 735b8a2..94a1fbe 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/profile/form.profile.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/profile/form.profile.tpl.html
@@ -24,6 +24,7 @@ under the License.
             <li class="active">{{profileName}}</li>
         </ol>
         <div class="btn-group pull-right" role="group" ng-show="!settings.isNew">
+            <button class="btn btn-default" ng-click="viewServers()">Servers</button>
             <button class="btn btn-default" ng-click="viewParams()">Parameters</button>
 
             <div class="btn-group" role="group" uib-dropdown is-open="more.isopen">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/region/FormRegionController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/region/FormRegionController.js b/traffic_ops/experimental/ui/app/src/common/modules/form/region/FormRegionController.js
index 3eda152..83c0bef 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/region/FormRegionController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/region/FormRegionController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var FormRegionController = function(region, $scope, formUtils, stringUtils, locationUtils, divisionService) {
+var FormRegionController = function(region, $scope, $location, formUtils, stringUtils, locationUtils, divisionService) {
 
     var getDivisions = function() {
         divisionService.getDivisions()
@@ -34,6 +34,10 @@ var FormRegionController = function(region, $scope, formUtils, stringUtils, loca
 
     $scope.labelize = stringUtils.labelize;
 
+    $scope.viewPhysLocations = function() {
+        $location.path($location.path() + '/phys-locations');
+    };
+
     $scope.navigateToPath = locationUtils.navigateToPath;
 
     $scope.hasError = formUtils.hasError;
@@ -47,5 +51,5 @@ var FormRegionController = function(region, $scope, formUtils, stringUtils, loca
 
 };
 
-FormRegionController.$inject = ['region', '$scope', 'formUtils', 'stringUtils', 'locationUtils', 'divisionService'];
+FormRegionController.$inject = ['region', '$scope', '$location', 'formUtils', 'stringUtils', 'locationUtils', 'divisionService'];
 module.exports = FormRegionController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/region/form.region.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/region/form.region.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/form/region/form.region.tpl.html
index a941f69..c3c7be5 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/region/form.region.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/region/form.region.tpl.html
@@ -23,6 +23,9 @@ under the License.
             <li><a ng-click="navigateToPath('/admin/regions')">Regions</a></li>
             <li class="active">{{regionName}}</li>
         </ol>
+        <div class="btn-group pull-right" role="group" ng-show="!settings.isNew">
+            <button class="btn btn-default" ng-click="viewPhysLocations()">Phys Locations</button>
+        </div>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/server/FormServerController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/server/FormServerController.js b/traffic_ops/experimental/ui/app/src/common/modules/form/server/FormServerController.js
index a6c22db..a84000a 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/server/FormServerController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/server/FormServerController.js
@@ -17,12 +17,12 @@
  * under the License.
  */
 
-var FormServerController = function(server, $scope, $location, formUtils, stringUtils, locationUtils, cacheGroupService, cdnService, locationService, profileService, statusService, typeService) {
+var FormServerController = function(server, $scope, $location, formUtils, stringUtils, locationUtils, cacheGroupService, cdnService, physLocationService, profileService, statusService, typeService) {
 
-    var getLocations = function() {
-        locationService.getLocations()
+    var getPhysLocations = function() {
+        physLocationService.getPhysLocations()
             .then(function(result) {
-                $scope.locations = result;
+                $scope.physLocations = result;
             });
     };
 
@@ -132,7 +132,7 @@ var FormServerController = function(server, $scope, $location, formUtils, string
     $scope.hasPropertyError = formUtils.hasPropertyError;
 
     var init = function () {
-        getLocations();
+        getPhysLocations();
         getCacheGroups();
         getTypes();
         getCDNs();
@@ -143,5 +143,5 @@ var FormServerController = function(server, $scope, $location, formUtils, string
 
 };
 
-FormServerController.$inject = ['server', '$scope', '$location', 'formUtils', 'stringUtils', 'locationUtils', 'cacheGroupService', 'cdnService', 'locationService', 'profileService', 'statusService', 'typeService'];
+FormServerController.$inject = ['server', '$scope', '$location', 'formUtils', 'stringUtils', 'locationUtils', 'cacheGroupService', 'cdnService', 'physLocationService', 'profileService', 'statusService', 'typeService'];
 module.exports = FormServerController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/form/server/form.server.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/server/form.server.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/form/server/form.server.tpl.html
index 70afbfc..4eb5938 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/server/form.server.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/server/form.server.tpl.html
@@ -64,13 +64,13 @@ under the License.
                     <small class="input-error" ng-show="hasPropertyError(serverForm.cdn, 'required')">Required</small>
                 </div>
             </div>
-            <div class="form-group" ng-class="{'has-error': hasError(serverForm.location), 'has-feedback': hasError(serverForm.location)}">
-                <label class="control-label col-md-2 col-sm-2 col-xs-12">Location *</label>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.physLocation), 'has-feedback': hasError(serverForm.physLocation)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Phys Location *</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">
-                    <select id="location" name="location" class="form-control" ng-model="server.physLocationId" ng-options="location.id as location.name for location in locations" required>
+                    <select id="physLocation" name="physLocation" class="form-control" ng-model="server.physLocationId" ng-options="physLocation.id as physLocation.name for physLocation in physLocations" required>
                         <option value="">Select...</option>
                     </select>
-                    <small class="input-error" ng-show="hasPropertyError(serverForm.location, 'required')">Required</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.physLocation, 'required')">Required</small>
                 </div>
             </div>
             <div class="form-group" ng-class="{'has-error': hasError(serverForm.cachegroup), 'has-feedback': hasError(serverForm.cachegroup)}">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/navigation/navigation.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/navigation/navigation.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/navigation/navigation.tpl.html
index 83885e2..1930758 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/navigation/navigation.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/navigation/navigation.tpl.html
@@ -44,7 +44,7 @@ under the License.
                         <li class="side-menu-category-item" ng-class="{'current-page': isState('trafficOps.private.admin.asns')}"><a ng-click="navigateToPath('/admin/asns')">ASNs</a></li>
                         <li class="side-menu-category-item" ng-class="{'current-page': isState('trafficOps.private.admin.cdns')}"><a ng-click="navigateToPath('/admin/cdns')">CDNs</a></li>
                         <li class="side-menu-category-item" ng-class="{'current-page': isState('trafficOps.private.admin.divisions')}"><a ng-click="navigateToPath('/admin/divisions')">Divisions</a></li>
-                        <li class="side-menu-category-item" ng-class="{'current-page': isState('trafficOps.private.admin.locations')}"><a ng-click="navigateToPath('/admin/locations')">Phys Locations</a></li>
+                        <li class="side-menu-category-item" ng-class="{'current-page': isState('trafficOps.private.admin.locations')}"><a ng-click="navigateToPath('/admin/phys-locations')">Phys Locations</a></li>
                         <li class="side-menu-category-item" ng-class="{'current-page': isState('trafficOps.private.admin.parameters')}"><a ng-click="navigateToPath('/admin/parameters')">Parameters</a></li>
                         <li class="side-menu-category-item" ng-class="{'current-page': isState('trafficOps.private.admin.profiles')}"><a ng-click="navigateToPath('/admin/profiles')">Profiles</a></li>
                         <li class="side-menu-category-item" ng-class="{'current-page': isState('trafficOps.private.admin.regions')}"><a ng-click="navigateToPath('/admin/regions')">Regions</a></li>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/cdnDeliveryServices/TableCDNDeliveryServicesController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cdnDeliveryServices/TableCDNDeliveryServicesController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnDeliveryServices/TableCDNDeliveryServicesController.js
new file mode 100644
index 0000000..2a71d10
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnDeliveryServices/TableCDNDeliveryServicesController.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.
+ */
+
+var TableCDNDeliveryServicesController = function(cdn, deliveryServices, $scope, locationUtils) {
+
+	$scope.cdn = cdn;
+
+	$scope.deliveryServices = deliveryServices;
+
+	$scope.editDeliveryService = function(id) {
+		locationUtils.navigateToPath('/configure/delivery-services/' + id);
+	};
+
+	$scope.navigateToPath = locationUtils.navigateToPath;
+
+	angular.element(document).ready(function () {
+		$('#deliveryServicesTable').dataTable({
+			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
+			"iDisplayLength": -1
+		});
+	});
+
+};
+
+TableCDNDeliveryServicesController.$inject = ['cdn', 'deliveryServices', '$scope', 'locationUtils'];
+module.exports = TableCDNDeliveryServicesController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/cdnDeliveryServices/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cdnDeliveryServices/index.js b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnDeliveryServices/index.js
new file mode 100644
index 0000000..05fca9d
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnDeliveryServices/index.js
@@ -0,0 +1,21 @@
+/*
+ * 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('trafficOps.table.cdnDeliveryServices', [])
+	.controller('TableCDNDeliveryServicesController', require('./TableCDNDeliveryServicesController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/cdnDeliveryServices/table.cdnDeliveryServices.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cdnDeliveryServices/table.cdnDeliveryServices.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnDeliveryServices/table.cdnDeliveryServices.tpl.html
new file mode 100644
index 0000000..1eec09a
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnDeliveryServices/table.cdnDeliveryServices.tpl.html
@@ -0,0 +1,74 @@
+<!--
+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 class="x_panel">
+    <div class="x_title">
+        <ol class="breadcrumb pull-left">
+            <li><a ng-click="navigateToPath('/admin/cdns')">CDNs</a></li>
+            <li><a ng-click="navigateToPath('/admin/cdns/' + cdn.id)">{{cdn.name}}</a></li>
+            <li class="active">Delivery Services</li>
+        </ol>
+        <div class="clearfix"></div>
+    </div>
+    <div class="x_content">
+        <br>
+        <table id="deliveryServicesTable" class="table responsive-utilities jambo_table">
+            <thead>
+            <tr class="headings">
+                <th>xmlId</th>
+                <th>orgServerFqdn</th>
+                <th>cdn</th>
+                <th>profile</th>
+                <th>ccrDnsTtl</th>
+                <th>active</th>
+                <th>type</th>
+                <th>dscp</th>
+                <th>signed</th>
+                <th>qstringIgnore</th>
+                <th>geoLimit</th>
+                <th>protocol</th>
+                <th>ipv6RoutingEnabled</th>
+                <th>rangeRequestHandling</th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr ng-click="editDeliveryService(deliveryService.id)" ng-repeat="deliveryService in deliveryServices">
+                <td>{{deliveryService.xmlId}}</td>
+                <td>{{deliveryService.orgServerFqdn}}</td>
+                <td>{{deliveryService.cdnName}}</td>
+                <td>{{deliveryService.profileName}}</td>
+                <td>{{deliveryService.ccrDnsTtl}}</td>
+                <td>{{deliveryService.active}}</td>
+                <td>{{deliveryService.type}}</td>
+                <td>{{deliveryService.dscp}}</td>
+                <td>{{deliveryService.signed}}</td>
+                <td>{{deliveryService.qstringIgnore}}</td>
+                <td>{{deliveryService.geoLimit}}</td>
+                <td>{{deliveryService.protocol}}</td>
+                <td>{{deliveryService.ipv6RoutingEnabled}}</td>
+                <td>{{deliveryService.rangeRequestHandling}}</td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+</div>
+
+
+
+

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/TableCDNServersController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/TableCDNServersController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/TableCDNServersController.js
new file mode 100644
index 0000000..006c61b
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/TableCDNServersController.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.
+ */
+
+var TableCDNServersController = function(cdn, servers, $scope, locationUtils) {
+
+	$scope.cdn = cdn;
+
+	$scope.servers = servers;
+
+	$scope.editServer = function(id) {
+		locationUtils.navigateToPath('/configure/servers/' + id);
+	};
+
+	$scope.navigateToPath = locationUtils.navigateToPath;
+
+	angular.element(document).ready(function () {
+		$('#serversTable').dataTable({
+			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
+			"iDisplayLength": 100
+		});
+	});
+
+};
+
+TableCDNServersController.$inject = ['cdn', 'servers', '$scope', 'locationUtils'];
+module.exports = TableCDNServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/index.js b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/index.js
new file mode 100644
index 0000000..cefe4c5
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/index.js
@@ -0,0 +1,21 @@
+/*
+ * 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('trafficOps.table.cdnServers', [])
+	.controller('TableCDNServersController', require('./TableCDNServersController'));


[04/11] incubator-trafficcontrol git commit: adds placeholder functionality for experimental TO UI

Posted by da...@apache.org.
adds placeholder functionality for experimental TO UI


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/1bd400da
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/1bd400da
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/1bd400da

Branch: refs/heads/master
Commit: 1bd400da42d60ab40e9c636a2cb1712ff1026e84
Parents: 41c93bc
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Wed Dec 7 12:37:08 2016 -0700
Committer: Dan Kirkwood <da...@gmail.com>
Committed: Thu Jan 5 14:57:46 2017 -0700

----------------------------------------------------------------------
 .../common/modules/form/cacheGroup/FormCacheGroupController.js   | 4 ++++
 1 file changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/1bd400da/traffic_ops/experimental/ui/app/src/common/modules/form/cacheGroup/FormCacheGroupController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/cacheGroup/FormCacheGroupController.js b/traffic_ops/experimental/ui/app/src/common/modules/form/cacheGroup/FormCacheGroupController.js
index ef13fe0..0ab458d 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/cacheGroup/FormCacheGroupController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/cacheGroup/FormCacheGroupController.js
@@ -55,6 +55,10 @@ var FormCacheGroupController = function(cacheGroup, $scope, $location, formUtils
         $location.path($location.path() + '/parameters');
     };
 
+    $scope.viewServers = function() {
+        $location.path($location.path() + '/servers');
+    };
+
     $scope.navigateToPath = locationUtils.navigateToPath;
 
     $scope.hasError = formUtils.hasError;


[02/11] incubator-trafficcontrol git commit: adds more views to TO experimental UI

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceRegexes/table.deliveryServiceRegexes.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceRegexes/table.deliveryServiceRegexes.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceRegexes/table.deliveryServiceRegexes.tpl.html
index 2c0c4e3..298319f 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceRegexes/table.deliveryServiceRegexes.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceRegexes/table.deliveryServiceRegexes.tpl.html
@@ -24,7 +24,7 @@ under the License.
             <li><a ng-click="navigateToPath('/configure/delivery-services/' + deliveryService.id)">{{deliveryService.displayName}}</a></li>
             <li class="active">Regexes</li>
         </ol>
-        <button class="btn btn-primary pull-right" ng-click="addRegex()">Add</button>
+        <button class="btn btn-primary pull-right" ng-click="addRegex()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Add Regex to DS</button>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">
@@ -39,7 +39,7 @@ under the License.
             </tr>
             </thead>
             <tbody>
-            <tr ng-repeat="regex in regexes">
+            <tr ng-repeat="regex in regexes.regexes | orderBy:['setNumber']">
                 <td>{{regex.type}}</td>
                 <td>{{regex.pattern}}</td>
                 <td>{{regex.setNumber}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceServers/table.deliveryServiceServers.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceServers/table.deliveryServiceServers.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceServers/table.deliveryServiceServers.tpl.html
index cee878b..0eb0633 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceServers/table.deliveryServiceServers.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceServers/table.deliveryServiceServers.tpl.html
@@ -24,7 +24,7 @@ under the License.
             <li><a ng-click="navigateToPath('/configure/delivery-services/' + deliveryService.id)">{{deliveryService.displayName}}</a></li>
             <li class="active">Servers</li>
         </ol>
-        <button class="btn btn-primary pull-right" ng-click="addServer()">Add</button>
+        <button class="btn btn-primary pull-right" ng-click="addServer()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Add Server to DS</button>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServices/table.deliveryServices.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServices/table.deliveryServices.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServices/table.deliveryServices.tpl.html
index fa4fbde..f1910a9 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServices/table.deliveryServices.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServices/table.deliveryServices.tpl.html
@@ -22,7 +22,7 @@ under the License.
         <ol class="breadcrumb pull-left">
             <li class="active">Delivery Services</li>
         </ol>
-        <button class="btn btn-primary pull-right" ng-click="createDeliveryService()">New</button>
+        <button class="btn btn-primary pull-right" ng-click="createDeliveryService()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create Delivery Service</button>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/divisions/table.divisions.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/divisions/table.divisions.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/divisions/table.divisions.tpl.html
index 97abea6..9dc8a97 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/divisions/table.divisions.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/divisions/table.divisions.tpl.html
@@ -22,7 +22,7 @@ under the License.
         <ol class="breadcrumb pull-left">
             <li class="active">Divisions</li>
         </ol>
-        <button class="btn btn-primary pull-right" ng-click="createDivision()">New</button>
+        <button class="btn btn-primary pull-right" ng-click="createDivision()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create Division</button>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/parameterProfiles/TableParameterProfilesController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/parameterProfiles/TableParameterProfilesController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/parameterProfiles/TableParameterProfilesController.js
new file mode 100644
index 0000000..3c89c58
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/parameterProfiles/TableParameterProfilesController.js
@@ -0,0 +1,46 @@
+/*
+ * 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 TableParameterProfilesController = function(parameter, parameterProfiles, $scope, locationUtils) {
+
+	$scope.parameter = parameter;
+
+	$scope.parameterProfiles = parameterProfiles;
+
+	$scope.addProfile = function() {
+		alert('not hooked up yet: add profile to parameter');
+	};
+
+	$scope.removeProfile = function() {
+		alert('not hooked up yet: remove profile from parameter');
+	};
+
+	$scope.navigateToPath = locationUtils.navigateToPath;
+
+	angular.element(document).ready(function () {
+		$('#parametersTable').dataTable({
+			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
+			"iDisplayLength": 100
+		});
+	});
+
+};
+
+TableParameterProfilesController.$inject = ['parameter', 'parameterProfiles', '$scope', 'locationUtils'];
+module.exports = TableParameterProfilesController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/parameterProfiles/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/parameterProfiles/index.js b/traffic_ops/experimental/ui/app/src/common/modules/table/parameterProfiles/index.js
new file mode 100644
index 0000000..b5b0968
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/parameterProfiles/index.js
@@ -0,0 +1,21 @@
+/*
+ * 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('trafficOps.table.parameterProfiles', [])
+	.controller('TableParameterProfilesController', require('./TableParameterProfilesController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/parameterProfiles/table.parameterProfiles.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/parameterProfiles/table.parameterProfiles.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/parameterProfiles/table.parameterProfiles.tpl.html
new file mode 100644
index 0000000..42fbae4
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/parameterProfiles/table.parameterProfiles.tpl.html
@@ -0,0 +1,50 @@
+<!--
+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 class="x_panel">
+    <div class="x_title">
+        <ol class="breadcrumb pull-left">
+            <li><a ng-click="navigateToPath('/admin/parameters')">Parameters</a></li>
+            <li><a ng-click="navigateToPath('/admin/parameters/' + parameter.id)">{{parameter.name}}</a></li>
+            <li class="active">Profiles</li>
+        </ol>
+        <button class="btn btn-primary pull-right" ng-click="addProfile()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Add Profile to Param</button>
+        <div class="clearfix"></div>
+    </div>
+    <div class="x_content">
+        <br>
+        <table id="parameterProfilesTable" class="table responsive-utilities jambo_table">
+            <thead>
+            <tr class="headings">
+                <th>name</th>
+                <th>description</th>
+                <th></th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr ng-repeat="parameterProfile in parameterProfiles">
+                <td>{{parameterProfile.name}}</td>
+                <td>{{parameterProfile.description}}</td>
+                <td><button type="button" class="btn btn-link" title="Remove from Parameter" ng-click="removeProfile()"><i class="fa fa-trash-o"></i></button></td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+</div>
+

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/parameters/table.parameters.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/parameters/table.parameters.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/parameters/table.parameters.tpl.html
index 984af8c..9ef579b 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/parameters/table.parameters.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/parameters/table.parameters.tpl.html
@@ -22,7 +22,7 @@ under the License.
         <ol class="breadcrumb pull-left">
             <li class="active">Parameters</li>
         </ol>
-        <button class="btn btn-primary pull-right" ng-click="createParameter()">New</button>
+        <button class="btn btn-primary pull-right" ng-click="createParameter()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create Parameter</button>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/physLocations/table.physLocations.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/physLocations/table.physLocations.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/physLocations/table.physLocations.tpl.html
index dd8dc2e..5001bcb 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/physLocations/table.physLocations.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/physLocations/table.physLocations.tpl.html
@@ -22,7 +22,7 @@ under the License.
         <ol class="breadcrumb pull-left">
             <li class="active">Physical Locations</li>
         </ol>
-        <button class="btn btn-primary pull-right" ng-click="createPhysLocation()">New</button>
+        <button class="btn btn-primary pull-right" ng-click="createPhysLocation()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create Phys Location</button>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/profileParameters/table.profileParameters.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/profileParameters/table.profileParameters.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/profileParameters/table.profileParameters.tpl.html
index 4b8575a..6fc8734 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/profileParameters/table.profileParameters.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/profileParameters/table.profileParameters.tpl.html
@@ -24,7 +24,7 @@ under the License.
             <li><a ng-click="navigateToPath('/admin/profiles/' + profile.id)">{{profile.name}}</a></li>
             <li class="active">Parameters</li>
         </ol>
-        <button class="btn btn-primary pull-right" ng-click="addParameter()">Add</button>
+        <button class="btn btn-primary pull-right" ng-click="addParameter()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Add Parameter To Profile</button>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/profiles/table.profiles.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/profiles/table.profiles.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/profiles/table.profiles.tpl.html
index 2d79fb4..1245fa7 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/profiles/table.profiles.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/profiles/table.profiles.tpl.html
@@ -22,10 +22,19 @@ under the License.
         <ol class="breadcrumb pull-left">
             <li class="active">Profiles</li>
         </ol>
-
-        <button class="btn btn-primary pull-right" ng-click="createProfile()">New</button>
-        <button class="btn btn-default pull-right" ng-click="importProfile()">Import</button>
-        <button class="btn btn-default pull-right" ng-click="compareProfiles()">Compare</button>
+        <div class="pull-right">
+            <button class="btn btn-primary" ng-click="createProfile()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create Profile</button>
+            <div class="btn-group" role="group" uib-dropdown is-open="more.isopen">
+                <button type="button" class="btn btn-default dropdown-toggle" uib-dropdown-toggle aria-haspopup="true" aria-expanded="false">
+                    More
+                    <span class="caret"></span>
+                </button>
+                <ul class="dropdown-menu-right dropdown-menu" uib-dropdown-menu>
+                    <li role="menuitem"><a ng-click="importProfile()">Import Profile</a></li>
+                    <li role="menuitem"><a ng-click="compareProfiles()">Compare Profiles</a></li>
+                </ul>
+            </div>
+        </div>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/regions/table.regions.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/regions/table.regions.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/regions/table.regions.tpl.html
index 32dd17a..a20d0c3 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/regions/table.regions.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/regions/table.regions.tpl.html
@@ -22,7 +22,7 @@ under the License.
         <ol class="breadcrumb pull-left">
             <li class="active">Regions</li>
         </ol>
-        <button class="btn btn-primary pull-right" ng-click="createRegion()">New</button>
+        <button class="btn btn-primary pull-right" ng-click="createRegion()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create Region</button>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/serverDeliveryServices/table.serverDeliveryServices.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/serverDeliveryServices/table.serverDeliveryServices.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/serverDeliveryServices/table.serverDeliveryServices.tpl.html
index f8cde74..82f665c 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/serverDeliveryServices/table.serverDeliveryServices.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/serverDeliveryServices/table.serverDeliveryServices.tpl.html
@@ -24,9 +24,18 @@ under the License.
             <li><a ng-click="navigateToPath('/configure/servers/' + server.id)">{{server.hostName}}</a></li>
             <li class="active">Delivery Services</li>
         </ol>
-        <button class="btn btn-primary pull-right" ng-click="addDeliveryService()">Add</button>
-        <button class="btn btn-default pull-right" ng-click="cloneDsAssignments()">Clone Assignments</button>
-
+        <div class="pull-right" role="group">
+            <button class="btn btn-primary" ng-click="addDeliveryService()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Add Delivery Service To Server</button>
+            <div class="btn-group" role="group" uib-dropdown is-open="more.isopen">
+                <button type="button" class="btn btn-default dropdown-toggle" uib-dropdown-toggle aria-haspopup="true" aria-expanded="false">
+                    More
+                    <span class="caret"></span>
+                </button>
+                <ul class="dropdown-menu-right dropdown-menu" uib-dropdown-menu>
+                    <li><a ng-click="cloneDsAssignments()">Clone Assignments</a></li>
+                </ul>
+            </div>
+        </div>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/servers/table.servers.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/servers/table.servers.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/servers/table.servers.tpl.html
index 6ba550a..d1aea1f 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/servers/table.servers.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/servers/table.servers.tpl.html
@@ -22,8 +22,18 @@ under the License.
         <ol class="breadcrumb pull-left">
             <li class="active">Servers</li>
         </ol>
-        <button class="btn btn-primary pull-right" ng-click="createServer()">New</button>
-        <button class="btn btn-default pull-right" ng-click="uploadServerCSV()">Upload CSV</button>
+        <div class="pull-right">
+            <button class="btn btn-primary" ng-click="createServer()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create Server</button>
+            <div class="btn-group" role="group" uib-dropdown is-open="more.isopen">
+                <button type="button" class="btn btn-default dropdown-toggle" uib-dropdown-toggle aria-haspopup="true" aria-expanded="false">
+                    More
+                    <span class="caret"></span>
+                </button>
+                <ul class="dropdown-menu-right dropdown-menu" uib-dropdown-menu>
+                    <li role="menuitem"><a ng-click="uploadServerCSV()">Upload Bulk CSV</a></li>
+                </ul>
+            </div>
+        </div>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/statusServers/TableStatusServersController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/statusServers/TableStatusServersController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/statusServers/TableStatusServersController.js
new file mode 100644
index 0000000..636b17c
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/statusServers/TableStatusServersController.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.
+ */
+
+var TableStatusServersController = function(status, servers, $scope, locationUtils) {
+
+	$scope.status = status;
+
+	$scope.servers = servers;
+
+	$scope.editServer = function(id) {
+		locationUtils.navigateToPath('/configure/servers/' + id);
+	};
+
+	$scope.navigateToPath = locationUtils.navigateToPath;
+
+	angular.element(document).ready(function () {
+		$('#serversTable').dataTable({
+			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
+			"iDisplayLength": 100
+		});
+	});
+
+};
+
+TableStatusServersController.$inject = ['status', 'servers', '$scope', 'locationUtils'];
+module.exports = TableStatusServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/statusServers/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/statusServers/index.js b/traffic_ops/experimental/ui/app/src/common/modules/table/statusServers/index.js
new file mode 100644
index 0000000..9923c18
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/statusServers/index.js
@@ -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.
+ */
+
+module.exports = angular.module('trafficOps.table.statusServers', [])
+	.controller('TableStatusServersController', require('./TableStatusServersController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/statusServers/table.statusServers.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/statusServers/table.statusServers.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/statusServers/table.statusServers.tpl.html
new file mode 100644
index 0000000..0b5f850
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/statusServers/table.statusServers.tpl.html
@@ -0,0 +1,69 @@
+<!--
+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 class="x_panel">
+    <div class="x_title">
+        <ol class="breadcrumb pull-left">
+            <li><a ng-click="navigateToPath('/admin/statuses')">Statuses</a></li>
+            <li><a ng-click="navigateToPath('/admin/statuses/' + status.id)">{{status.name}}</a></li>
+            <li class="active">Servers</li>
+        </ol>
+        <div class="clearfix"></div>
+    </div>
+    <div class="x_content">
+        <br>
+        <table id="serversTable" class="table responsive-utilities jambo_table">
+            <thead>
+            <tr class="headings">
+                <th>Update?</th>
+                <th>hostName</th>
+                <th>domainName</th>
+                <th>cdn</th>
+                <th>cachegroup</th>
+                <th>type</th>
+                <th>location</th>
+                <th>ipAddress</th>
+                <th>ip6Address</th>
+                <th>status</th>
+                <th>profile</th>
+                <th>iloIpAddress</th>
+                <th>iloIpGateway</th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr ng-click="editServer(server.id)" ng-repeat="server in servers" ng-class="{'active': server.updPending}">
+                <td>{{server.updPending}}</td>
+                <td>{{server.hostName}}</td>
+                <td>{{server.domainName}}</td>
+                <td>{{server.cdnName}}</td>
+                <td>{{server.cachegroup}}</td>
+                <td>{{server.type}}</td>
+                <td>{{server.physLocation}}</td>
+                <td>{{server.ipAddress}}</td>
+                <td>{{server.ip6Address}}</td>
+                <td>{{server.status}}</td>
+                <td>{{server.profile}}</td>
+                <td>{{server.iloIpAddress}}</td>
+                <td>{{server.iloIpGateway}}</td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+</div>
+

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/statuses/table.statuses.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/statuses/table.statuses.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/statuses/table.statuses.tpl.html
index 503f674..ce09d01 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/statuses/table.statuses.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/statuses/table.statuses.tpl.html
@@ -22,7 +22,7 @@ under the License.
         <ol class="breadcrumb pull-left">
             <li class="active">Statuses</li>
         </ol>
-        <button class="btn btn-primary pull-right" ng-click="createStatus()">New</button>
+        <button class="btn btn-primary pull-right" ng-click="createStatus()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create Status</button>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/tenants/table.tenants.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/tenants/table.tenants.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/tenants/table.tenants.tpl.html
index 15ed605..c8f4b97 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/tenants/table.tenants.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/tenants/table.tenants.tpl.html
@@ -22,7 +22,7 @@ under the License.
         <ol class="breadcrumb pull-left">
             <li class="active">Tenants</li>
         </ol>
-        <button class="btn btn-primary pull-right" ng-click="createTenant()">New</button>
+        <button class="btn btn-primary pull-right" ng-click="createTenant()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create Tenant</button>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/typeCacheGroups/TableTypeCacheGroupsController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/typeCacheGroups/TableTypeCacheGroupsController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/typeCacheGroups/TableTypeCacheGroupsController.js
new file mode 100644
index 0000000..45e3ed7
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/typeCacheGroups/TableTypeCacheGroupsController.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.
+ */
+
+var TableTypeCacheGroupsController = function(type, cacheGroups, $scope, locationUtils) {
+
+	$scope.type = type;
+
+	$scope.cacheGroups = cacheGroups;
+
+	$scope.editCacheGroup = function(id) {
+		locationUtils.navigateToPath('/configure/cache-groups/' + id);
+	};
+
+	$scope.navigateToPath = locationUtils.navigateToPath;
+
+	angular.element(document).ready(function () {
+		$('#cacheGroupsTable').dataTable({
+			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
+			"iDisplayLength": -1
+		});
+	});
+
+};
+
+TableTypeCacheGroupsController.$inject = ['type', 'cacheGroups', '$scope', 'locationUtils'];
+module.exports = TableTypeCacheGroupsController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/typeCacheGroups/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/typeCacheGroups/index.js b/traffic_ops/experimental/ui/app/src/common/modules/table/typeCacheGroups/index.js
new file mode 100644
index 0000000..f0237ff
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/typeCacheGroups/index.js
@@ -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.
+ */
+
+module.exports = angular.module('trafficOps.table.typeCacheGroups', [])
+	.controller('TableTypeCacheGroupsController', require('./TableTypeCacheGroupsController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/typeCacheGroups/table.typeCacheGroups.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/typeCacheGroups/table.typeCacheGroups.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/typeCacheGroups/table.typeCacheGroups.tpl.html
new file mode 100644
index 0000000..b3fafe3
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/typeCacheGroups/table.typeCacheGroups.tpl.html
@@ -0,0 +1,53 @@
+<!--
+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 class="x_panel">
+    <div class="x_title">
+        <ol class="breadcrumb pull-left">
+            <li><a ng-click="navigateToPath('/admin/types')">Types</a></li>
+            <li><a ng-click="navigateToPath('/admin/types/' + type.id)">{{type.name}}</a></li>
+            <li class="active">Cache Groups</li>
+        </ol>
+        <div class="clearfix"></div>
+    </div>
+    <div class="x_content">
+        <br>
+        <table id="cacheGroupsTable" class="table responsive-utilities jambo_table">
+            <thead>
+            <tr class="headings">
+                <th>name</th>
+                <th>shortName</th>
+                <th>type</th>
+                <th>latitude</th>
+                <th>longitude</th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr ng-click="editCacheGroup(cacheGroup.id)" ng-repeat="cacheGroup in cacheGroups">
+                <td>{{cacheGroup.name}}</td>
+                <td>{{cacheGroup.shortName}}</td>
+                <td>{{cacheGroup.typeName}}</td>
+                <td>{{cacheGroup.latitude}}</td>
+                <td>{{cacheGroup.longitude}}</td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+</div>
+

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/typeDeliveryServices/TableTypeDeliveryServicesController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/typeDeliveryServices/TableTypeDeliveryServicesController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/typeDeliveryServices/TableTypeDeliveryServicesController.js
new file mode 100644
index 0000000..4720047
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/typeDeliveryServices/TableTypeDeliveryServicesController.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.
+ */
+
+var TableTypeDeliveryServicesController = function(type, deliveryServices, $scope, locationUtils) {
+
+	$scope.type = type;
+
+	$scope.deliveryServices = deliveryServices;
+
+	$scope.editDeliveryServices = function(id) {
+		locationUtils.navigateToPath('/configure/delivery-services/' + id);
+	};
+
+	$scope.navigateToPath = locationUtils.navigateToPath;
+
+	angular.element(document).ready(function () {
+		$('#deliveryServicesTable').dataTable({
+			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
+			"iDisplayLength": -1
+		});
+	});
+
+};
+
+TableTypeDeliveryServicesController.$inject = ['type', 'deliveryServices', '$scope', 'locationUtils'];
+module.exports = TableTypeDeliveryServicesController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/typeDeliveryServices/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/typeDeliveryServices/index.js b/traffic_ops/experimental/ui/app/src/common/modules/table/typeDeliveryServices/index.js
new file mode 100644
index 0000000..7c90933
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/typeDeliveryServices/index.js
@@ -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.
+ */
+
+module.exports = angular.module('trafficOps.table.typeDeliveryServices', [])
+	.controller('TableTypeDeliveryServicesController', require('./TableTypeDeliveryServicesController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/typeDeliveryServices/table.typeDeliveryServices.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/typeDeliveryServices/table.typeDeliveryServices.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/typeDeliveryServices/table.typeDeliveryServices.tpl.html
new file mode 100644
index 0000000..4bc2437
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/typeDeliveryServices/table.typeDeliveryServices.tpl.html
@@ -0,0 +1,71 @@
+<!--
+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 class="x_panel">
+    <div class="x_title">
+        <ol class="breadcrumb pull-left">
+            <li><a ng-click="navigateToPath('/admin/types')">Types</a></li>
+            <li><a ng-click="navigateToPath('/admin/types/' + type.id)">{{type.name}}</a></li>
+            <li class="active">Delivery Services</li>
+        </ol>
+        <div class="clearfix"></div>
+    </div>
+    <div class="x_content">
+        <br>
+        <table id="deliveryServicesTable" class="table responsive-utilities jambo_table">
+            <thead>
+            <tr class="headings">
+                <th>xmlId</th>
+                <th>orgServerFqdn</th>
+                <th>cdn</th>
+                <th>profile</th>
+                <th>ccrDnsTtl</th>
+                <th>active</th>
+                <th>type</th>
+                <th>dscp</th>
+                <th>signed</th>
+                <th>qstringIgnore</th>
+                <th>geoLimit</th>
+                <th>protocol</th>
+                <th>ipv6RoutingEnabled</th>
+                <th>rangeRequestHandling</th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr ng-click="editDeliveryService(deliveryService.id)" ng-repeat="deliveryService in deliveryServices">
+                <td>{{deliveryService.xmlId}}</td>
+                <td>{{deliveryService.orgServerFqdn}}</td>
+                <td>{{deliveryService.cdnName}}</td>
+                <td>{{deliveryService.profileName}}</td>
+                <td>{{deliveryService.ccrDnsTtl}}</td>
+                <td>{{deliveryService.active}}</td>
+                <td>{{deliveryService.type}}</td>
+                <td>{{deliveryService.dscp}}</td>
+                <td>{{deliveryService.signed}}</td>
+                <td>{{deliveryService.qstringIgnore}}</td>
+                <td>{{deliveryService.geoLimit}}</td>
+                <td>{{deliveryService.protocol}}</td>
+                <td>{{deliveryService.ipv6RoutingEnabled}}</td>
+                <td>{{deliveryService.rangeRequestHandling}}</td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+</div>
+

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/typeServers/TableTypeServersController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/typeServers/TableTypeServersController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/typeServers/TableTypeServersController.js
new file mode 100644
index 0000000..3b58dbf
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/typeServers/TableTypeServersController.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.
+ */
+
+var TableTypeServersController = function(type, servers, $scope, locationUtils) {
+
+	$scope.type = type;
+
+	$scope.servers = servers;
+
+	$scope.editServer = function(id) {
+		locationUtils.navigateToPath('/configure/servers/' + id);
+	};
+
+	$scope.navigateToPath = locationUtils.navigateToPath;
+
+	angular.element(document).ready(function () {
+		$('#serversTable').dataTable({
+			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
+			"iDisplayLength": 100
+		});
+	});
+
+};
+
+TableTypeServersController.$inject = ['type', 'servers', '$scope', 'locationUtils'];
+module.exports = TableTypeServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/typeServers/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/typeServers/index.js b/traffic_ops/experimental/ui/app/src/common/modules/table/typeServers/index.js
new file mode 100644
index 0000000..45d23c9
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/typeServers/index.js
@@ -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.
+ */
+
+module.exports = angular.module('trafficOps.table.typeServers', [])
+	.controller('TableTypeServersController', require('./TableTypeServersController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/typeServers/table.typeServers.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/typeServers/table.typeServers.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/typeServers/table.typeServers.tpl.html
new file mode 100644
index 0000000..90cb997
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/typeServers/table.typeServers.tpl.html
@@ -0,0 +1,69 @@
+<!--
+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 class="x_panel">
+    <div class="x_title">
+        <ol class="breadcrumb pull-left">
+            <li><a ng-click="navigateToPath('/admin/types')">Types</a></li>
+            <li><a ng-click="navigateToPath('/admin/types/' + type.id)">{{type.name}}</a></li>
+            <li class="active">Servers</li>
+        </ol>
+        <div class="clearfix"></div>
+    </div>
+    <div class="x_content">
+        <br>
+        <table id="serversTable" class="table responsive-utilities jambo_table">
+            <thead>
+            <tr class="headings">
+                <th>Update?</th>
+                <th>hostName</th>
+                <th>domainName</th>
+                <th>cdn</th>
+                <th>cachegroup</th>
+                <th>type</th>
+                <th>location</th>
+                <th>ipAddress</th>
+                <th>ip6Address</th>
+                <th>status</th>
+                <th>profile</th>
+                <th>iloIpAddress</th>
+                <th>iloIpGateway</th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr ng-click="editServer(server.id)" ng-repeat="server in servers" ng-class="{'active': server.updPending}">
+                <td>{{server.updPending}}</td>
+                <td>{{server.hostName}}</td>
+                <td>{{server.domainName}}</td>
+                <td>{{server.cdnName}}</td>
+                <td>{{server.cachegroup}}</td>
+                <td>{{server.type}}</td>
+                <td>{{server.physLocation}}</td>
+                <td>{{server.ipAddress}}</td>
+                <td>{{server.ip6Address}}</td>
+                <td>{{server.status}}</td>
+                <td>{{server.profile}}</td>
+                <td>{{server.iloIpAddress}}</td>
+                <td>{{server.iloIpGateway}}</td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+</div>
+

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/types/table.types.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/types/table.types.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/types/table.types.tpl.html
index 621800f..5d3ef35 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/types/table.types.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/types/table.types.tpl.html
@@ -22,7 +22,7 @@ under the License.
         <ol class="breadcrumb pull-left">
             <li class="active">Types</li>
         </ol>
-        <button class="btn btn-primary pull-right" ng-click="createType()">New</button>
+        <button class="btn btn-primary pull-right" ng-click="createType()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create Type</button>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/userDeliveryServices/table.userDeliveryServices.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/userDeliveryServices/table.userDeliveryServices.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/userDeliveryServices/table.userDeliveryServices.tpl.html
index 0709409..9cb4c57 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/userDeliveryServices/table.userDeliveryServices.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/userDeliveryServices/table.userDeliveryServices.tpl.html
@@ -24,8 +24,7 @@ under the License.
             <li><a ng-click="navigateToPath('/admin/users/' + user.id)">{{user.username}}</a></li>
             <li class="active">Delivery Services</li>
         </ol>
-        <button class="btn btn-primary pull-right" ng-click="addDeliveryService()">Add</button>
-
+        <button class="btn btn-primary pull-right" ng-click="addDeliveryService()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Add Delivery Services To User</button>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/modules/table/users/table.users.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/users/table.users.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/users/table.users.tpl.html
index 51f3d39..282159f 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/users/table.users.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/users/table.users.tpl.html
@@ -22,7 +22,7 @@ under the License.
         <ol class="breadcrumb pull-left">
             <li class="active">Users</li>
         </ol>
-        <button class="btn btn-primary pull-right" ng-click="createUser()">New</button>
+        <button class="btn btn-primary pull-right" ng-click="createUser()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create User</button>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/common/service/utils/FormUtils.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/service/utils/FormUtils.js b/traffic_ops/experimental/ui/app/src/common/service/utils/FormUtils.js
index 1c2d85b..e930043 100644
--- a/traffic_ops/experimental/ui/app/src/common/service/utils/FormUtils.js
+++ b/traffic_ops/experimental/ui/app/src/common/service/utils/FormUtils.js
@@ -20,11 +20,11 @@
 var FormUtils = function() {
 
     this.hasError = function(input) {
-        return !input.$focused && input.$dirty && input.$invalid;
+        return input && !input.$focused && input.$dirty && input.$invalid;
     };
 
     this.hasPropertyError = function(input, property) {
-        return !input.$focused && input.$dirty && input.$error[property];
+        return input && !input.$focused && input.$dirty && input.$error[property];
     };
 
 };

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/modules/private/admin/cdns/deliveryServices/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/cdns/deliveryServices/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/cdns/deliveryServices/index.js
index 88bf7e5..a582378 100644
--- a/traffic_ops/experimental/ui/app/src/modules/private/admin/cdns/deliveryServices/index.js
+++ b/traffic_ops/experimental/ui/app/src/modules/private/admin/cdns/deliveryServices/index.js
@@ -30,8 +30,8 @@ module.exports = angular.module('trafficOps.private.admin.cdns.deliveryServices'
 							cdn: function($stateParams, cdnService) {
 								return cdnService.getCDN($stateParams.cdnId);
 							},
-							deliveryServices: function(deliveryServiceService) {
-								return deliveryServiceService.getDeliveryServices();
+							deliveryServices: function($stateParams, deliveryServiceService) {
+								return deliveryServiceService.getDeliveryServices({ cdn: $stateParams.cdnId });
 							}
 						}
 					}

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/modules/private/admin/cdns/servers/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/cdns/servers/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/cdns/servers/index.js
index 30c228a..d969b3d 100644
--- a/traffic_ops/experimental/ui/app/src/modules/private/admin/cdns/servers/index.js
+++ b/traffic_ops/experimental/ui/app/src/modules/private/admin/cdns/servers/index.js
@@ -30,8 +30,8 @@ module.exports = angular.module('trafficOps.private.admin.cdns.servers', [])
 							cdn: function($stateParams, cdnService) {
 								return cdnService.getCDN($stateParams.cdnId);
 							},
-							servers: function(serverService) {
-								return serverService.getServers();
+							servers: function($stateParams, serverService) {
+								return serverService.getServers({ cdn: $stateParams.cdnId });
 							}
 						}
 					}

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/modules/private/admin/divisions/regions/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/divisions/regions/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/divisions/regions/index.js
index 76a2608..8e75ec1 100644
--- a/traffic_ops/experimental/ui/app/src/modules/private/admin/divisions/regions/index.js
+++ b/traffic_ops/experimental/ui/app/src/modules/private/admin/divisions/regions/index.js
@@ -31,7 +31,7 @@ module.exports = angular.module('trafficOps.private.admin.divisions.regions', []
 								return divisionService.getDivision($stateParams.divisionId);
 							},
 							divisionRegions: function($stateParams, regionService) {
-								return regionService.getRegions();
+								return regionService.getRegions({ division: $stateParams.divisionId });
 							}
 						}
 					}

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/modules/private/admin/parameters/profiles/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/parameters/profiles/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/parameters/profiles/index.js
new file mode 100644
index 0000000..8b63900
--- /dev/null
+++ b/traffic_ops/experimental/ui/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('trafficOps.private.admin.parameters.profiles', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficOps.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/d69e9415/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/servers/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/servers/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/servers/index.js
index 111d6c1..42339a0 100644
--- a/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/servers/index.js
+++ b/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/servers/index.js
@@ -30,8 +30,8 @@ module.exports = angular.module('trafficOps.private.admin.physLocations.servers'
 							physLocation: function($stateParams, physLocationService) {
 								return physLocationService.getPhysLocation($stateParams.physLocationId);
 							},
-							servers: function(serverService) {
-								return serverService.getServers();
+							servers: function($stateParams, serverService) {
+								return serverService.getServers({ physLocation: $stateParams.physLocationId });
 							}
 						}
 					}

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/modules/private/admin/profiles/parameters/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/profiles/parameters/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/profiles/parameters/index.js
index 0c9e476..d0fba62 100644
--- a/traffic_ops/experimental/ui/app/src/modules/private/admin/profiles/parameters/index.js
+++ b/traffic_ops/experimental/ui/app/src/modules/private/admin/profiles/parameters/index.js
@@ -30,8 +30,8 @@ module.exports = angular.module('trafficOps.private.admin.profiles.parameters',
 							profile: function($stateParams, profileService) {
 								return profileService.getProfile($stateParams.profileId);
 							},
-							profileParameters: function($stateParams, profileParameterService) {
-								return profileParameterService.getProfileParameters($stateParams.profileId);
+							profileParameters: function($stateParams, parameterService) {
+								return parameterService.getProfileParameters($stateParams.profileId);
 							}
 						}
 					}

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/modules/private/admin/profiles/servers/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/profiles/servers/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/profiles/servers/index.js
index 8900ea6..5eb3b0e 100644
--- a/traffic_ops/experimental/ui/app/src/modules/private/admin/profiles/servers/index.js
+++ b/traffic_ops/experimental/ui/app/src/modules/private/admin/profiles/servers/index.js
@@ -31,7 +31,7 @@ module.exports = angular.module('trafficOps.private.admin.profiles.servers', [])
 								return profileService.getProfile($stateParams.profileId);
 							},
 							servers: function($stateParams, serverService) {
-								return serverService.getServers(null, $stateParams.profileId);
+								return serverService.getServers({ profileId: $stateParams.profileId });
 							}
 						}
 					}

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/modules/private/admin/regions/physLocations/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/regions/physLocations/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/regions/physLocations/index.js
index 4973a47..255c0b3 100644
--- a/traffic_ops/experimental/ui/app/src/modules/private/admin/regions/physLocations/index.js
+++ b/traffic_ops/experimental/ui/app/src/modules/private/admin/regions/physLocations/index.js
@@ -30,8 +30,8 @@ module.exports = angular.module('trafficOps.private.admin.regions.physLocations'
 							region: function($stateParams, regionService) {
 								return regionService.getRegion($stateParams.regionId);
 							},
-							physLocations: function(physLocationService) {
-								return physLocationService.getPhysLocations();
+							physLocations: function($stateParams, physLocationService) {
+								return physLocationService.getPhysLocations({ region: $stateParams.regionId });
 							}
 						}
 					}

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/modules/private/admin/statuses/servers/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/statuses/servers/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/statuses/servers/index.js
new file mode 100644
index 0000000..d60cb23
--- /dev/null
+++ b/traffic_ops/experimental/ui/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('trafficOps.private.admin.statuses.servers', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficOps.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/d69e9415/traffic_ops/experimental/ui/app/src/modules/private/admin/types/cacheGroups/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/types/cacheGroups/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/types/cacheGroups/index.js
new file mode 100644
index 0000000..02991eb
--- /dev/null
+++ b/traffic_ops/experimental/ui/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('trafficOps.private.admin.types.cacheGroups', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficOps.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/d69e9415/traffic_ops/experimental/ui/app/src/modules/private/admin/types/deliveryServices/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/types/deliveryServices/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/types/deliveryServices/index.js
new file mode 100644
index 0000000..12160b8
--- /dev/null
+++ b/traffic_ops/experimental/ui/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('trafficOps.private.admin.types.deliveryServices', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficOps.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/d69e9415/traffic_ops/experimental/ui/app/src/modules/private/admin/types/servers/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/types/servers/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/types/servers/index.js
new file mode 100644
index 0000000..4ad0926
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/modules/private/admin/types/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('trafficOps.private.admin.types.servers', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficOps.private.admin.types.servers', {
+				url: '/{typeId}/servers',
+				views: {
+					typesContent: {
+						templateUrl: 'common/modules/table/typeServers/table.typeServers.tpl.html',
+						controller: 'TableTypeServersController',
+						resolve: {
+							type: function($stateParams, typeService) {
+								return typeService.getType($stateParams.typeId);
+							},
+							servers: function(type, serverService) {
+								return serverService.getServers({ type: type.name });
+							}
+						}
+					}
+				}
+			})
+		;
+		$urlRouterProvider.otherwise('/');
+	});

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/modules/private/admin/users/deliveryServices/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/users/deliveryServices/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/users/deliveryServices/index.js
index ccf0535..de353bb 100644
--- a/traffic_ops/experimental/ui/app/src/modules/private/admin/users/deliveryServices/index.js
+++ b/traffic_ops/experimental/ui/app/src/modules/private/admin/users/deliveryServices/index.js
@@ -30,8 +30,8 @@ module.exports = angular.module('trafficOps.private.admin.users.deliveryServices
 							user: function($stateParams, userService) {
 								return userService.getUser($stateParams.userId);
 							},
-							userDeliveryServices: function(deliveryServiceService) {
-								return deliveryServiceService.getDeliveryServices();
+							userDeliveryServices: function($stateParams, deliveryServiceService) {
+								return deliveryServiceService.getUserDeliveryServices($stateParams.userId);
 							}
 						}
 					}

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/modules/private/configure/cacheGroups/asns/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/configure/cacheGroups/asns/index.js b/traffic_ops/experimental/ui/app/src/modules/private/configure/cacheGroups/asns/index.js
new file mode 100644
index 0000000..5dc57e3
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/modules/private/configure/cacheGroups/asns/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('trafficOps.private.configure.cacheGroups.asns', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficOps.private.configure.cacheGroups.asns', {
+				url: '/{cacheGroupId}/asns',
+				views: {
+					cacheGroupsContent: {
+						templateUrl: 'common/modules/table/cacheGroupAsns/table.cacheGroupAsns.tpl.html',
+						controller: 'TableCacheGroupAsnsController',
+						resolve: {
+							cacheGroup: function($stateParams, cacheGroupService) {
+								return cacheGroupService.getCacheGroup($stateParams.cacheGroupId);
+							},
+							asns: function($stateParams, asnService) {
+								return asnService.getASNs({ cachegroup: $stateParams.cacheGroupId });
+							}
+						}
+					}
+				}
+			})
+		;
+		$urlRouterProvider.otherwise('/');
+	});

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/modules/private/configure/cacheGroups/parameters/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/configure/cacheGroups/parameters/index.js b/traffic_ops/experimental/ui/app/src/modules/private/configure/cacheGroups/parameters/index.js
index 5cf20c5..a77b7f8 100644
--- a/traffic_ops/experimental/ui/app/src/modules/private/configure/cacheGroups/parameters/index.js
+++ b/traffic_ops/experimental/ui/app/src/modules/private/configure/cacheGroups/parameters/index.js
@@ -30,8 +30,8 @@ module.exports = angular.module('trafficOps.private.configure.cacheGroups.parame
 							cacheGroup: function($stateParams, cacheGroupService) {
 								return cacheGroupService.getCacheGroup($stateParams.cacheGroupId);
 							},
-							parameters: function(parameterService) {
-								return parameterService.getParameters();
+							cacheGroupParameters: function($stateParams, cacheGroupParameterService) {
+								return cacheGroupParameterService.getCacheGroupParameters($stateParams.cacheGroupId);
 							}
 						}
 					}

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/modules/private/configure/cacheGroups/servers/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/configure/cacheGroups/servers/index.js b/traffic_ops/experimental/ui/app/src/modules/private/configure/cacheGroups/servers/index.js
index c47ca07..b63981d 100644
--- a/traffic_ops/experimental/ui/app/src/modules/private/configure/cacheGroups/servers/index.js
+++ b/traffic_ops/experimental/ui/app/src/modules/private/configure/cacheGroups/servers/index.js
@@ -30,8 +30,8 @@ module.exports = angular.module('trafficOps.private.configure.cacheGroups.server
 							cacheGroup: function($stateParams, cacheGroupService) {
 								return cacheGroupService.getCacheGroup($stateParams.cacheGroupId);
 							},
-							servers: function(serverService) {
-								return serverService.getServers();
+							servers: function($stateParams, serverService) {
+								return serverService.getServers({ cachegroup: $stateParams.cacheGroupId });
 							}
 						}
 					}

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/modules/private/configure/deliveryServices/servers/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/configure/deliveryServices/servers/index.js b/traffic_ops/experimental/ui/app/src/modules/private/configure/deliveryServices/servers/index.js
index 5248c8a..4b6bf57 100644
--- a/traffic_ops/experimental/ui/app/src/modules/private/configure/deliveryServices/servers/index.js
+++ b/traffic_ops/experimental/ui/app/src/modules/private/configure/deliveryServices/servers/index.js
@@ -31,7 +31,7 @@ module.exports = angular.module('trafficOps.private.configure.deliveryServices.s
 								return deliveryServiceService.getDeliveryService($stateParams.deliveryServiceId);
 							},
 							servers: function($stateParams, serverService) {
-								return serverService.getServers($stateParams.deliveryServiceId);
+								return serverService.getDeliveryServiceServers($stateParams.deliveryServiceId);
 							}
 						}
 					}

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/modules/private/configure/servers/deliveryServices/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/configure/servers/deliveryServices/index.js b/traffic_ops/experimental/ui/app/src/modules/private/configure/servers/deliveryServices/index.js
index 2f96a7f..90ab145 100644
--- a/traffic_ops/experimental/ui/app/src/modules/private/configure/servers/deliveryServices/index.js
+++ b/traffic_ops/experimental/ui/app/src/modules/private/configure/servers/deliveryServices/index.js
@@ -31,7 +31,7 @@ module.exports = angular.module('trafficOps.private.configure.servers.deliverySe
 								return serverService.getServer($stateParams.serverId);
 							},
 							serverDeliveryServices: function(deliveryServiceService) {
-								return deliveryServiceService.getDeliveryServices();
+								return deliveryServiceService.getServerDeliveryServices();
 							}
 						}
 					}

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/modules/public/login/login.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/public/login/login.tpl.html b/traffic_ops/experimental/ui/app/src/modules/public/login/login.tpl.html
index 8570673..a2a1c0f 100644
--- a/traffic_ops/experimental/ui/app/src/modules/public/login/login.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/modules/public/login/login.tpl.html
@@ -42,7 +42,7 @@ under the License.
                     <div class="ln_solid"></div>
                     <div class="form-group">
                         <div class="col-md-6 col-sm-6 col-xs-12 col-md-offset-3">
-                            <button type="submit" class="btn btn-primary" ng-disabled="loginForm.$invalid">Log in &nbsp;&nbsp;<i class="fa fa-chevron-circle-right fa-lg"></i></button>
+                            <button type="submit" class="btn btn-primary" ng-disabled="loginForm.$invalid">Log in &nbsp;&nbsp;<i class="fa fa-chevron-circle-right"></i></button>
                             <button type="button" class="btn btn-link" ng-click="resetPassword()">Reset Password</button>
                         </div>
                     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/d69e9415/traffic_ops/experimental/ui/app/src/styles/main.scss
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/styles/main.scss b/traffic_ops/experimental/ui/app/src/styles/main.scss
index a2e2e61..eda4be5 100755
--- a/traffic_ops/experimental/ui/app/src/styles/main.scss
+++ b/traffic_ops/experimental/ui/app/src/styles/main.scss
@@ -682,6 +682,11 @@ h2 {
   button {
     margin: 8px 6px 4px 0;
   }
+
+  .btn-group {
+    margin-top: -4px;
+  }
+
 }
 
 .x_title .filter {


[06/11] incubator-trafficcontrol git commit: adds some styling to login page

Posted by da...@apache.org.
adds some styling to login page


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/bdd8e132
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/bdd8e132
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/bdd8e132

Branch: refs/heads/master
Commit: bdd8e1325451f29fbb439859eab272fcf2257e09
Parents: 625ba56
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Tue Dec 27 08:37:27 2016 -0700
Committer: Dan Kirkwood <da...@gmail.com>
Committed: Thu Jan 5 14:57:46 2017 -0700

----------------------------------------------------------------------
 .../app/src/modules/public/login/login.tpl.html | 45 +++++++++++++-------
 1 file changed, 30 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/bdd8e132/traffic_ops/experimental/ui/app/src/modules/public/login/login.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/public/login/login.tpl.html b/traffic_ops/experimental/ui/app/src/modules/public/login/login.tpl.html
index 7dfa69c..8570673 100644
--- a/traffic_ops/experimental/ui/app/src/modules/public/login/login.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/modules/public/login/login.tpl.html
@@ -18,21 +18,36 @@ under the License.
 -->
 
 <section id="loginContainer">
-    <div class="panelForm">
-        <h4>Login</h4>
-        <form name="loginForm" role="form" ng-submit="login(credentials)">
-            <div class="formText">
-                <div class="form-item">
-                    <label>Username</label>
-                    <input id="username" name="username" type="text" class="form-control" autocomplete="off" ng-model="credentials.username" autofocus required>
-                </div>
-                <div class="form-item">
-                    <label>Password</label>
-                    <input id="password" name="password" type="password" class="form-control" autocomplete="off" ng-model="credentials.password" required>
-                </div>
+    <div class="col-md-12 col-sm-12 col-xs-12">
+        <div class="x_panel">
+            <div class="x_title">
+                <h2>Login</h2>
+                <div class="clearfix"></div>
             </div>
-            <button type="submit" class="btn" ng-disabled="loginForm.$invalid">Log in &nbsp;&nbsp;<i class="fa fa-chevron-circle-right fa-lg"></i></button>
-            <button type="button" class="btn btn-link" ng-click="resetPassword()">Reset Password</button>
-        </form>
+            <div class="x_content">
+                <br>
+                <form name="loginForm" role="form" ng-submit="login(credentials)" class="form-horizontal form-label-left" novalidate>
+                    <div class="form-group">
+                        <label class="control-label col-md-3 col-sm-3 col-xs-12" for="username">Username <span class="required">*</span></label>
+                        <div class="col-md-6 col-sm-6 col-xs-12">
+                            <input id="username" name="username" type="text" class="form-control" autocomplete="off" ng-model="credentials.username" autofocus required>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="control-label col-md-3 col-sm-3 col-xs-12" for="password">Password <span class="required">*</span></label>
+                        <div class="col-md-6 col-sm-6 col-xs-12">
+                            <input id="password" name="password" type="password" class="form-control" autocomplete="off" ng-model="credentials.password" required>
+                        </div>
+                    </div>
+                    <div class="ln_solid"></div>
+                    <div class="form-group">
+                        <div class="col-md-6 col-sm-6 col-xs-12 col-md-offset-3">
+                            <button type="submit" class="btn btn-primary" ng-disabled="loginForm.$invalid">Log in &nbsp;&nbsp;<i class="fa fa-chevron-circle-right fa-lg"></i></button>
+                            <button type="button" class="btn btn-link" ng-click="resetPassword()">Reset Password</button>
+                        </div>
+                    </div>
+                </form>
+            </div>
+        </div>
     </div>
 </section>


[11/11] incubator-trafficcontrol git commit: This closes #161.

Posted by da...@apache.org.
This closes #161.


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/4ba5c522
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/4ba5c522
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/4ba5c522

Branch: refs/heads/master
Commit: 4ba5c5221b28498c42f37366f5bd2173d9fc3aac
Parents: aa70276
Author: Dan Kirkwood <da...@gmail.com>
Authored: Thu Jan 5 14:59:14 2017 -0700
Committer: Dan Kirkwood <da...@gmail.com>
Committed: Thu Jan 5 14:59:14 2017 -0700

----------------------------------------------------------------------

----------------------------------------------------------------------



[05/11] incubator-trafficcontrol git commit: adds table for phys location servers

Posted by da...@apache.org.
adds table for phys location servers


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/86c5a54e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/86c5a54e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/86c5a54e

Branch: refs/heads/master
Commit: 86c5a54e59d9cbfb9991a54c484399eb28db526d
Parents: 1bd400d
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Tue Dec 13 15:04:47 2016 -0700
Committer: Dan Kirkwood <da...@gmail.com>
Committed: Thu Jan 5 14:57:46 2017 -0700

----------------------------------------------------------------------
 traffic_ops/experimental/ui/app/src/app.js      |  2 +
 .../form/location/FormLocationController.js     |  8 ++-
 .../form/location/form.location.tpl.html        |  5 +-
 .../modules/navigation/navigation.tpl.html      |  2 +-
 .../TableLocationServersController.js           | 38 +++++++++++
 .../modules/table/locationServers/index.js      | 21 ++++++
 .../table.locationServers.tpl.html              | 70 ++++++++++++++++++++
 .../table/locations/table.locations.tpl.html    |  2 +-
 .../private/admin/locations/servers/index.js    | 42 ++++++++++++
 9 files changed, 185 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/86c5a54e/traffic_ops/experimental/ui/app/src/app.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/app.js b/traffic_ops/experimental/ui/app/src/app.js
index 9bbc457..8e9362a 100644
--- a/traffic_ops/experimental/ui/app/src/app.js
+++ b/traffic_ops/experimental/ui/app/src/app.js
@@ -70,6 +70,7 @@ var trafficOps = angular.module('trafficOps', [
         require('./modules/private/admin/locations/edit').name,
         require('./modules/private/admin/locations/list').name,
         require('./modules/private/admin/locations/new').name,
+        require('./modules/private/admin/locations/servers').name,
         require('./modules/private/admin/parameters').name,
         require('./modules/private/admin/parameters/edit').name,
         require('./modules/private/admin/parameters/list').name,
@@ -193,6 +194,7 @@ var trafficOps = angular.module('trafficOps', [
         require('./common/modules/table/divisions').name,
         require('./common/modules/table/divisionRegions').name,
         require('./common/modules/table/locations').name,
+        require('./common/modules/table/locationServers').name,
         require('./common/modules/table/parameters').name,
         require('./common/modules/table/profileParameters').name,
         require('./common/modules/table/profiles').name,

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/86c5a54e/traffic_ops/experimental/ui/app/src/common/modules/form/location/FormLocationController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/location/FormLocationController.js b/traffic_ops/experimental/ui/app/src/common/modules/form/location/FormLocationController.js
index 4a92e43..2280bc2 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/location/FormLocationController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/location/FormLocationController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var FormLocationController = function(location, $scope, formUtils, stringUtils, locationUtils, regionService) {
+var FormLocationController = function(location, $scope, $location, formUtils, stringUtils, locationUtils, regionService) {
 
     var getRegions = function() {
         regionService.getRegions()
@@ -42,6 +42,10 @@ var FormLocationController = function(location, $scope, formUtils, stringUtils,
 
     $scope.labelize = stringUtils.labelize;
 
+    $scope.viewServers = function() {
+        $location.path($location.path() + '/servers');
+    };
+
     $scope.navigateToPath = locationUtils.navigateToPath;
 
     $scope.hasError = formUtils.hasError;
@@ -55,5 +59,5 @@ var FormLocationController = function(location, $scope, formUtils, stringUtils,
 
 };
 
-FormLocationController.$inject = ['location', '$scope', 'formUtils', 'stringUtils', 'locationUtils', 'regionService'];
+FormLocationController.$inject = ['location', '$scope', '$location', 'formUtils', 'stringUtils', 'locationUtils', 'regionService'];
 module.exports = FormLocationController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/86c5a54e/traffic_ops/experimental/ui/app/src/common/modules/form/location/form.location.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/location/form.location.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/form/location/form.location.tpl.html
index a844e04..45c44f8 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/location/form.location.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/location/form.location.tpl.html
@@ -20,9 +20,12 @@ under the License.
 <div class="x_panel">
     <div class="x_title">
         <ol class="breadcrumb">
-            <li><a ng-click="navigateToPath('/admin/locations')">Locations</a></li>
+            <li><a ng-click="navigateToPath('/admin/locations')">Physical Locations</a></li>
             <li class="active">{{locationName}}</li>
         </ol>
+        <div class="btn-group pull-right" role="group" ng-show="!settings.isNew">
+            <button class="btn btn-default" ng-click="viewServers()">Servers</button>
+        </div>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/86c5a54e/traffic_ops/experimental/ui/app/src/common/modules/navigation/navigation.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/navigation/navigation.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/navigation/navigation.tpl.html
index b3e39f6..83885e2 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/navigation/navigation.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/navigation/navigation.tpl.html
@@ -44,7 +44,7 @@ under the License.
                         <li class="side-menu-category-item" ng-class="{'current-page': isState('trafficOps.private.admin.asns')}"><a ng-click="navigateToPath('/admin/asns')">ASNs</a></li>
                         <li class="side-menu-category-item" ng-class="{'current-page': isState('trafficOps.private.admin.cdns')}"><a ng-click="navigateToPath('/admin/cdns')">CDNs</a></li>
                         <li class="side-menu-category-item" ng-class="{'current-page': isState('trafficOps.private.admin.divisions')}"><a ng-click="navigateToPath('/admin/divisions')">Divisions</a></li>
-                        <li class="side-menu-category-item" ng-class="{'current-page': isState('trafficOps.private.admin.locations')}"><a ng-click="navigateToPath('/admin/locations')">Locations</a></li>
+                        <li class="side-menu-category-item" ng-class="{'current-page': isState('trafficOps.private.admin.locations')}"><a ng-click="navigateToPath('/admin/locations')">Phys Locations</a></li>
                         <li class="side-menu-category-item" ng-class="{'current-page': isState('trafficOps.private.admin.parameters')}"><a ng-click="navigateToPath('/admin/parameters')">Parameters</a></li>
                         <li class="side-menu-category-item" ng-class="{'current-page': isState('trafficOps.private.admin.profiles')}"><a ng-click="navigateToPath('/admin/profiles')">Profiles</a></li>
                         <li class="side-menu-category-item" ng-class="{'current-page': isState('trafficOps.private.admin.regions')}"><a ng-click="navigateToPath('/admin/regions')">Regions</a></li>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/86c5a54e/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/TableLocationServersController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/TableLocationServersController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/TableLocationServersController.js
new file mode 100644
index 0000000..ab6ad9a
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/TableLocationServersController.js
@@ -0,0 +1,38 @@
+/*
+ * 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 TableLocationServersController = function(location, servers, $scope, locationUtils) {
+
+	$scope.location = location;
+
+	$scope.servers = servers;
+
+	$scope.navigateToPath = locationUtils.navigateToPath;
+
+	angular.element(document).ready(function () {
+		$('#serversTable').dataTable({
+			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
+			"iDisplayLength": 100
+		});
+	});
+
+};
+
+TableLocationServersController.$inject = ['location', 'servers', '$scope', 'locationUtils'];
+module.exports = TableLocationServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/86c5a54e/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/index.js b/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/index.js
new file mode 100644
index 0000000..35ada00
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/index.js
@@ -0,0 +1,21 @@
+/*
+ * 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('trafficOps.table.locationServers', [])
+	.controller('TableLocationServersController', require('./TableLocationServersController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/86c5a54e/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/table.locationServers.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/table.locationServers.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/table.locationServers.tpl.html
new file mode 100644
index 0000000..3245aae
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/table.locationServers.tpl.html
@@ -0,0 +1,70 @@
+<!--
+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 class="x_panel">
+    <div class="x_title">
+        <ol class="breadcrumb pull-left">
+            <li><a ng-click="navigateToPath('/admin/locations')">Physical Locations</a></li>
+            <li><a ng-click="navigateToPath('/admin/locations/' + location.id)">{{location.name}}</a></li>
+            <li class="active">Servers</li>
+        </ol>
+        <div class="clearfix"></div>
+    </div>
+    <div class="x_content">
+        <br>
+        <table id="serversTable" class="table responsive-utilities jambo_table">
+            <thead>
+            <tr class="headings">
+                <th>hostName</th>
+                <th>domainName</th>
+                <th>cdn</th>
+                <th>cachegroup</th>
+                <th>type</th>
+                <th>location</th>
+                <th>ipAddress</th>
+                <th>ip6Address</th>
+                <th>status</th>
+                <th>profile</th>
+                <th>iloIpAddress</th>
+                <th>iloIpGateway</th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr ng-repeat="server in servers">
+                <td>{{server.hostName}}</td>
+                <td>{{server.domainName}}</td>
+                <td>{{server.cdnName}}</td>
+                <td>{{server.cachegroup}}</td>
+                <td>{{server.type}}</td>
+                <td>{{server.physLocation}}</td>
+                <td>{{server.ipAddress}}</td>
+                <td>{{server.ip6Address}}</td>
+                <td>{{server.status}}</td>
+                <td>{{server.profile}}</td>
+                <td>{{server.iloIpAddress}}</td>
+                <td>{{server.iloIpGateway}}</td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+</div>
+
+
+
+

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/86c5a54e/traffic_ops/experimental/ui/app/src/common/modules/table/locations/table.locations.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/locations/table.locations.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/locations/table.locations.tpl.html
index c6061e9..efaf7e7 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/locations/table.locations.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/locations/table.locations.tpl.html
@@ -20,7 +20,7 @@ under the License.
 <div class="x_panel">
     <div class="x_title">
         <ol class="breadcrumb pull-left">
-            <li class="active">Locations</li>
+            <li class="active">Physical Locations</li>
         </ol>
         <button class="btn btn-primary pull-right" ng-click="createLocation()">New</button>
         <div class="clearfix"></div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/86c5a54e/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/servers/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/servers/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/servers/index.js
new file mode 100644
index 0000000..d5198a4
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/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('trafficOps.private.admin.locations.servers', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficOps.private.admin.locations.servers', {
+				url: '/{locationId}/servers',
+				views: {
+					locationsContent: {
+						templateUrl: 'common/modules/table/locationServers/table.locationServers.tpl.html',
+						controller: 'TableLocationServersController',
+						resolve: {
+							location: function($stateParams, locationService) {
+								return locationService.getLocation($stateParams.locationId);
+							},
+							servers: function(serverService) {
+								return serverService.getServers();
+							}
+						}
+					}
+				}
+			})
+		;
+		$urlRouterProvider.otherwise('/');
+	});


[09/11] incubator-trafficcontrol git commit: adds more relational tables. i.e. cdns/4/servers and cdns/4/delivery-services

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/table.cdnServers.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/table.cdnServers.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/table.cdnServers.tpl.html
new file mode 100644
index 0000000..707a750
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnServers/table.cdnServers.tpl.html
@@ -0,0 +1,70 @@
+<!--
+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 class="x_panel">
+    <div class="x_title">
+        <ol class="breadcrumb pull-left">
+            <li><a ng-click="navigateToPath('/admin/cdns')">CDNs</a></li>
+            <li><a ng-click="navigateToPath('/admin/cdns/' + cdn.id)">{{cdn.name}}</a></li>
+            <li class="active">Servers</li>
+        </ol>
+        <div class="clearfix"></div>
+    </div>
+    <div class="x_content">
+        <br>
+        <table id="serversTable" class="table responsive-utilities jambo_table">
+            <thead>
+            <tr class="headings">
+                <th>hostName</th>
+                <th>domainName</th>
+                <th>cdn</th>
+                <th>cachegroup</th>
+                <th>type</th>
+                <th>location</th>
+                <th>ipAddress</th>
+                <th>ip6Address</th>
+                <th>status</th>
+                <th>profile</th>
+                <th>iloIpAddress</th>
+                <th>iloIpGateway</th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr ng-click="editServer(server.id)" ng-repeat="server in servers">
+                <td>{{server.hostName}}</td>
+                <td>{{server.domainName}}</td>
+                <td>{{server.cdnName}}</td>
+                <td>{{server.cachegroup}}</td>
+                <td>{{server.type}}</td>
+                <td>{{server.physLocation}}</td>
+                <td>{{server.ipAddress}}</td>
+                <td>{{server.ip6Address}}</td>
+                <td>{{server.status}}</td>
+                <td>{{server.profile}}</td>
+                <td>{{server.iloIpAddress}}</td>
+                <td>{{server.iloIpGateway}}</td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+</div>
+
+
+
+

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceRegexes/TableDeliveryServiceRegexesController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceRegexes/TableDeliveryServiceRegexesController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceRegexes/TableDeliveryServiceRegexesController.js
new file mode 100644
index 0000000..93a2e28
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceRegexes/TableDeliveryServiceRegexesController.js
@@ -0,0 +1,46 @@
+/*
+ * 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 TableDeliveryServiceRegexesController = function(deliveryService, regexes, $scope, locationUtils) {
+
+	$scope.deliveryService = deliveryService;
+
+	$scope.regexes = regexes[0].regexes;
+
+	$scope.addRegex = function() {
+		alert('not hooked up yet: addRegex to ds');
+	};
+
+	$scope.removeRegex = function() {
+		alert('not hooked up yet: removeRegex from ds');
+	};
+
+	$scope.navigateToPath = locationUtils.navigateToPath;
+
+	angular.element(document).ready(function () {
+		$('#regexesTable').dataTable({
+			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
+			"iDisplayLength": 100
+		});
+	});
+
+};
+
+TableDeliveryServiceRegexesController.$inject = ['deliveryService', 'regexes', '$scope', 'locationUtils'];
+module.exports = TableDeliveryServiceRegexesController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceRegexes/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceRegexes/index.js b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceRegexes/index.js
new file mode 100644
index 0000000..d7cad68
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceRegexes/index.js
@@ -0,0 +1,21 @@
+/*
+ * 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('trafficOps.table.deliveryServiceRegexes', [])
+	.controller('TableDeliveryServiceRegexesController', require('./TableDeliveryServiceRegexesController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceRegexes/table.deliveryServiceRegexes.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceRegexes/table.deliveryServiceRegexes.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceRegexes/table.deliveryServiceRegexes.tpl.html
new file mode 100644
index 0000000..2c0c4e3
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceRegexes/table.deliveryServiceRegexes.tpl.html
@@ -0,0 +1,52 @@
+<!--
+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 class="x_panel">
+    <div class="x_title">
+        <ol class="breadcrumb pull-left">
+            <li><a ng-click="navigateToPath('/configure/delivery-services')">Delivery Services</a></li>
+            <li><a ng-click="navigateToPath('/configure/delivery-services/' + deliveryService.id)">{{deliveryService.displayName}}</a></li>
+            <li class="active">Regexes</li>
+        </ol>
+        <button class="btn btn-primary pull-right" ng-click="addRegex()">Add</button>
+        <div class="clearfix"></div>
+    </div>
+    <div class="x_content">
+        <br>
+        <table id="regexesTable" class="table responsive-utilities jambo_table">
+            <thead>
+            <tr class="headings">
+                <th>type</th>
+                <th>pattern</th>
+                <th>setNumber</th>
+                <th></th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr ng-repeat="regex in regexes">
+                <td>{{regex.type}}</td>
+                <td>{{regex.pattern}}</td>
+                <td>{{regex.setNumber}}</td>
+                <td><button type="button" class="btn btn-link" title="Remove from Delivery Service" ng-click="removeRegex()"><i class="fa fa-trash-o"></i></button></td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+</div>
+

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceUsers/TableDeliveryServiceUsersController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceUsers/TableDeliveryServiceUsersController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceUsers/TableDeliveryServiceUsersController.js
new file mode 100644
index 0000000..d863454
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceUsers/TableDeliveryServiceUsersController.js
@@ -0,0 +1,50 @@
+/*
+ * 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 TableDeliveryServiceUsersController = function(deliveryService, users, $scope, locationUtils) {
+
+	$scope.deliveryService = deliveryService;
+
+	$scope.users = users;
+
+	$scope.addUser = function() {
+		alert('not hooked up yet: addUser to ds');
+	};
+
+	$scope.removeUser = function() {
+		alert('not hooked up yet: removeUser from ds');
+	};
+
+	$scope.isAdmin = function(user) {
+		return user.role == 4;
+	};
+
+	$scope.navigateToPath = locationUtils.navigateToPath;
+
+	angular.element(document).ready(function () {
+		$('#usersTable').dataTable({
+			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
+			"iDisplayLength": 100
+		});
+	});
+
+};
+
+TableDeliveryServiceUsersController.$inject = ['deliveryService', 'users', '$scope', 'locationUtils'];
+module.exports = TableDeliveryServiceUsersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceUsers/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceUsers/index.js b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceUsers/index.js
new file mode 100644
index 0000000..240e6ee
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceUsers/index.js
@@ -0,0 +1,21 @@
+/*
+ * 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('trafficOps.table.deliveryServiceUsers', [])
+	.controller('TableDeliveryServiceUsersController', require('./TableDeliveryServiceUsersController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceUsers/table.deliveryServiceUsers.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceUsers/table.deliveryServiceUsers.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceUsers/table.deliveryServiceUsers.tpl.html
new file mode 100644
index 0000000..560ee36
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceUsers/table.deliveryServiceUsers.tpl.html
@@ -0,0 +1,57 @@
+<!--
+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 class="x_panel">
+    <div class="x_title">
+        <ol class="breadcrumb pull-left">
+            <li><a ng-click="navigateToPath('/configure/delivery-services')">Delivery Services</a></li>
+            <li><a ng-click="navigateToPath('/configure/delivery-services/' + deliveryService.id)">{{deliveryService.displayName}}</a></li>
+            <li class="active">Users</li>
+        </ol>
+        <button class="btn btn-primary pull-right" ng-click="addUser()">Add</button>
+        <div class="clearfix"></div>
+    </div>
+    <div class="x_content">
+        <br>
+        <table id="usersTable" class="table responsive-utilities jambo_table">
+            <thead>
+            <tr class="headings">
+                <th>Full Name</th>
+                <th>Username</th>
+                <th>Email</th>
+                <th>Role</th>
+                <th></th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr ng-click="editUser(user.id)" ng-repeat="user in users">
+                <td>{{user.fullName}}</td>
+                <td>{{user.username}}</td>
+                <td>{{user.email}}</td>
+                <td>{{user.rolename}}</td>
+                <td><button type="button" class="btn btn-link" title="Remove from Delivery Service" ng-click="removeUser()" ng-hide="isAdmin(user)"><i class="fa fa-trash-o"></i></button></td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+</div>
+
+
+
+

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/divisionRegions/TableDivisionRegionsController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/divisionRegions/TableDivisionRegionsController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/divisionRegions/TableDivisionRegionsController.js
index b39ebdc..61a8ef8 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/divisionRegions/TableDivisionRegionsController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/divisionRegions/TableDivisionRegionsController.js
@@ -23,12 +23,8 @@ var TableDivisionRegionsController = function(division, divisionRegions, $scope,
 
 	$scope.divisionRegions = divisionRegions;
 
-	$scope.addRegion = function() {
-		alert('not hooked up yet: addRegion to div');
-	};
-
-	$scope.removeRegion = function() {
-		alert('not hooked up yet: removeRegion from div');
+	$scope.editRegion = function(id) {
+		locationUtils.navigateToPath('/admin/regions/' + id);
 	};
 
 	$scope.navigateToPath = locationUtils.navigateToPath;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/divisionRegions/table.divisionRegions.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/divisionRegions/table.divisionRegions.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/divisionRegions/table.divisionRegions.tpl.html
index 05e0bee..8698b20 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/divisionRegions/table.divisionRegions.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/divisionRegions/table.divisionRegions.tpl.html
@@ -24,7 +24,6 @@ under the License.
             <li><a ng-click="navigateToPath('/admin/divisions/' + division.id)">{{division.name}}</a></li>
             <li class="active">Regions</li>
         </ol>
-        <button class="btn btn-primary pull-right" ng-click="addRegion()">Add</button>
         <div class="clearfix"></div>
     </div>
     <div class="x_content">
@@ -34,14 +33,12 @@ under the License.
             <tr class="headings">
                 <th>name</th>
                 <th>division</th>
-                <th></th>
             </tr>
             </thead>
             <tbody>
-            <tr ng-repeat="region in divisionRegions">
+            <tr ng-click="editRegion(region.id)" ng-repeat="region in divisionRegions">
                 <td>{{region.name}}</td>
                 <td>{{region.divisionName}}</td>
-                <td><button type="button" class="btn btn-link" title="Remove from Division" ng-click="removeRegion()"><i class="fa fa-trash-o"></i></button></td>
             </tr>
             </tbody>
         </table>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/TableLocationServersController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/TableLocationServersController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/TableLocationServersController.js
deleted file mode 100644
index ab6ad9a..0000000
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/TableLocationServersController.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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 TableLocationServersController = function(location, servers, $scope, locationUtils) {
-
-	$scope.location = location;
-
-	$scope.servers = servers;
-
-	$scope.navigateToPath = locationUtils.navigateToPath;
-
-	angular.element(document).ready(function () {
-		$('#serversTable').dataTable({
-			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
-			"iDisplayLength": 100
-		});
-	});
-
-};
-
-TableLocationServersController.$inject = ['location', 'servers', '$scope', 'locationUtils'];
-module.exports = TableLocationServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/index.js b/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/index.js
deleted file mode 100644
index 35ada00..0000000
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/index.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * 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('trafficOps.table.locationServers', [])
-	.controller('TableLocationServersController', require('./TableLocationServersController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/table.locationServers.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/table.locationServers.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/table.locationServers.tpl.html
deleted file mode 100644
index 3245aae..0000000
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/locationServers/table.locationServers.tpl.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<!--
-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 class="x_panel">
-    <div class="x_title">
-        <ol class="breadcrumb pull-left">
-            <li><a ng-click="navigateToPath('/admin/locations')">Physical Locations</a></li>
-            <li><a ng-click="navigateToPath('/admin/locations/' + location.id)">{{location.name}}</a></li>
-            <li class="active">Servers</li>
-        </ol>
-        <div class="clearfix"></div>
-    </div>
-    <div class="x_content">
-        <br>
-        <table id="serversTable" class="table responsive-utilities jambo_table">
-            <thead>
-            <tr class="headings">
-                <th>hostName</th>
-                <th>domainName</th>
-                <th>cdn</th>
-                <th>cachegroup</th>
-                <th>type</th>
-                <th>location</th>
-                <th>ipAddress</th>
-                <th>ip6Address</th>
-                <th>status</th>
-                <th>profile</th>
-                <th>iloIpAddress</th>
-                <th>iloIpGateway</th>
-            </tr>
-            </thead>
-            <tbody>
-            <tr ng-repeat="server in servers">
-                <td>{{server.hostName}}</td>
-                <td>{{server.domainName}}</td>
-                <td>{{server.cdnName}}</td>
-                <td>{{server.cachegroup}}</td>
-                <td>{{server.type}}</td>
-                <td>{{server.physLocation}}</td>
-                <td>{{server.ipAddress}}</td>
-                <td>{{server.ip6Address}}</td>
-                <td>{{server.status}}</td>
-                <td>{{server.profile}}</td>
-                <td>{{server.iloIpAddress}}</td>
-                <td>{{server.iloIpGateway}}</td>
-            </tr>
-            </tbody>
-        </table>
-    </div>
-</div>
-
-
-
-

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/locations/TableLocationsController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/locations/TableLocationsController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/locations/TableLocationsController.js
deleted file mode 100644
index 722c063..0000000
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/locations/TableLocationsController.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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 TableLocationsController = function(locations, $scope, locationUtils) {
-
-    $scope.locations = locations;
-
-    $scope.editLocation = function(id) {
-        locationUtils.navigateToPath('/admin/locations/' + id)
-    };
-
-    $scope.createLocation = function() {
-        locationUtils.navigateToPath('/admin/locations/new')
-    };
-
-    angular.element(document).ready(function () {
-        $('#locationsTable').dataTable({
-            "aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
-            "iDisplayLength": -1
-        });
-    });
-
-};
-
-TableLocationsController.$inject = ['locations', '$scope', 'locationUtils'];
-module.exports = TableLocationsController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/locations/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/locations/index.js b/traffic_ops/experimental/ui/app/src/common/modules/table/locations/index.js
deleted file mode 100644
index 6b2c3f7..0000000
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/locations/index.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * 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('trafficOps.table.locations', [])
-    .controller('TableLocationsController', require('./TableLocationsController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/locations/table.locations.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/locations/table.locations.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/locations/table.locations.tpl.html
deleted file mode 100644
index efaf7e7..0000000
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/locations/table.locations.tpl.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!--
-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 class="x_panel">
-    <div class="x_title">
-        <ol class="breadcrumb pull-left">
-            <li class="active">Physical Locations</li>
-        </ol>
-        <button class="btn btn-primary pull-right" ng-click="createLocation()">New</button>
-        <div class="clearfix"></div>
-    </div>
-    <div class="x_content">
-        <br>
-        <table id="locationsTable" class="table responsive-utilities jambo_table">
-            <thead>
-            <tr class="headings">
-                <th>name</th>
-                <th>shortName</th>
-                <th>address</th>
-                <th>city</th>
-                <th>state</th>
-                <th>region</th>
-            </tr>
-            </thead>
-            <tbody>
-            <tr ng-click="editLocation(location.id)" ng-repeat="location in locations">
-                <td>{{location.name}}</td>
-                <td>{{location.shortName}}</td>
-                <td>{{location.address}}</td>
-                <td>{{location.city}}</td>
-                <td>{{location.state}}</td>
-                <td>{{location.region}}</td>
-            </tr>
-            </tbody>
-        </table>
-    </div>
-</div>
-
-

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/physLocationServers/TablePhysLocationServersController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/physLocationServers/TablePhysLocationServersController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/physLocationServers/TablePhysLocationServersController.js
new file mode 100644
index 0000000..a44c177
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/physLocationServers/TablePhysLocationServersController.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.
+ */
+
+var TablePhysLocationServersController = function(physLocation, servers, $scope, locationUtils) {
+
+	$scope.physLocation = physLocation;
+
+	$scope.servers = servers;
+
+	$scope.editServer = function(id) {
+		locationUtils.navigateToPath('/configure/servers/' + id);
+	};
+
+	$scope.navigateToPath = locationUtils.navigateToPath;
+
+	angular.element(document).ready(function () {
+		$('#serversTable').dataTable({
+			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
+			"iDisplayLength": 100
+		});
+	});
+
+};
+
+TablePhysLocationServersController.$inject = ['physLocation', 'servers', '$scope', 'locationUtils'];
+module.exports = TablePhysLocationServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/physLocationServers/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/physLocationServers/index.js b/traffic_ops/experimental/ui/app/src/common/modules/table/physLocationServers/index.js
new file mode 100644
index 0000000..4f7ef5e
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/physLocationServers/index.js
@@ -0,0 +1,21 @@
+/*
+ * 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('trafficOps.table.physLocationServers', [])
+	.controller('TablePhysLocationServersController', require('./TablePhysLocationServersController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/physLocationServers/table.physLocationServers.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/physLocationServers/table.physLocationServers.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/physLocationServers/table.physLocationServers.tpl.html
new file mode 100644
index 0000000..5d1de31
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/physLocationServers/table.physLocationServers.tpl.html
@@ -0,0 +1,70 @@
+<!--
+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 class="x_panel">
+    <div class="x_title">
+        <ol class="breadcrumb pull-left">
+            <li><a ng-click="navigateToPath('/admin/phys-locations')">Physical Locations</a></li>
+            <li><a ng-click="navigateToPath('/admin/phys-locations/' + physLocation.id)">{{physLocation.name}}</a></li>
+            <li class="active">Servers</li>
+        </ol>
+        <div class="clearfix"></div>
+    </div>
+    <div class="x_content">
+        <br>
+        <table id="serversTable" class="table responsive-utilities jambo_table">
+            <thead>
+            <tr class="headings">
+                <th>hostName</th>
+                <th>domainName</th>
+                <th>cdn</th>
+                <th>cachegroup</th>
+                <th>type</th>
+                <th>location</th>
+                <th>ipAddress</th>
+                <th>ip6Address</th>
+                <th>status</th>
+                <th>profile</th>
+                <th>iloIpAddress</th>
+                <th>iloIpGateway</th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr ng-click="editServer(server.id)" ng-repeat="server in servers">
+                <td>{{server.hostName}}</td>
+                <td>{{server.domainName}}</td>
+                <td>{{server.cdnName}}</td>
+                <td>{{server.cachegroup}}</td>
+                <td>{{server.type}}</td>
+                <td>{{server.physLocation}}</td>
+                <td>{{server.ipAddress}}</td>
+                <td>{{server.ip6Address}}</td>
+                <td>{{server.status}}</td>
+                <td>{{server.profile}}</td>
+                <td>{{server.iloIpAddress}}</td>
+                <td>{{server.iloIpGateway}}</td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+</div>
+
+
+
+

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/physLocations/TablePhysLocationsController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/physLocations/TablePhysLocationsController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/physLocations/TablePhysLocationsController.js
new file mode 100644
index 0000000..4714ff7
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/physLocations/TablePhysLocationsController.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.
+ */
+
+var TablePhysLocationsController = function(physLocations, $scope, locationUtils) {
+
+    $scope.physLocations = physLocations;
+
+    $scope.editPhysLocation = function(id) {
+        locationUtils.navigateToPath('/admin/phys-locations/' + id)
+    };
+
+    $scope.createPhysLocation = function() {
+        locationUtils.navigateToPath('/admin/phys-locations/new')
+    };
+
+    angular.element(document).ready(function () {
+        $('#physLocationsTable').dataTable({
+            "aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
+            "iDisplayLength": -1
+        });
+    });
+
+};
+
+TablePhysLocationsController.$inject = ['physLocations', '$scope', 'locationUtils'];
+module.exports = TablePhysLocationsController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/physLocations/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/physLocations/index.js b/traffic_ops/experimental/ui/app/src/common/modules/table/physLocations/index.js
new file mode 100644
index 0000000..aef203f
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/physLocations/index.js
@@ -0,0 +1,21 @@
+/*
+ * 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('trafficOps.table.physLocations', [])
+    .controller('TablePhysLocationsController', require('./TablePhysLocationsController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/physLocations/table.physLocations.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/physLocations/table.physLocations.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/physLocations/table.physLocations.tpl.html
new file mode 100644
index 0000000..dd8dc2e
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/physLocations/table.physLocations.tpl.html
@@ -0,0 +1,55 @@
+<!--
+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 class="x_panel">
+    <div class="x_title">
+        <ol class="breadcrumb pull-left">
+            <li class="active">Physical Locations</li>
+        </ol>
+        <button class="btn btn-primary pull-right" ng-click="createPhysLocation()">New</button>
+        <div class="clearfix"></div>
+    </div>
+    <div class="x_content">
+        <br>
+        <table id="physLocationsTable" class="table responsive-utilities jambo_table">
+            <thead>
+            <tr class="headings">
+                <th>name</th>
+                <th>shortName</th>
+                <th>address</th>
+                <th>city</th>
+                <th>state</th>
+                <th>region</th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr ng-click="editPhysLocation(physLocation.id)" ng-repeat="physLocation in physLocations">
+                <td>{{physLocation.name}}</td>
+                <td>{{physLocation.shortName}}</td>
+                <td>{{physLocation.address}}</td>
+                <td>{{physLocation.city}}</td>
+                <td>{{physLocation.state}}</td>
+                <td>{{physLocation.region}}</td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+</div>
+
+

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/profileServers/TableProfileServersController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/profileServers/TableProfileServersController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/profileServers/TableProfileServersController.js
new file mode 100644
index 0000000..2c4c7c3
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/profileServers/TableProfileServersController.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.
+ */
+
+var TableProfileServersController = function(profile, servers, $scope, locationUtils) {
+
+	$scope.profile = profile;
+
+	$scope.servers = servers;
+
+	$scope.editServer = function(id) {
+		locationUtils.navigateToPath('/configure/servers/' + id);
+	};
+
+	$scope.navigateToPath = locationUtils.navigateToPath;
+
+	angular.element(document).ready(function () {
+		$('#serversTable').dataTable({
+			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
+			"iDisplayLength": 100
+		});
+	});
+
+};
+
+TableProfileServersController.$inject = ['profile', 'servers', '$scope', 'locationUtils'];
+module.exports = TableProfileServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/profileServers/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/profileServers/index.js b/traffic_ops/experimental/ui/app/src/common/modules/table/profileServers/index.js
new file mode 100644
index 0000000..b88e163
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/profileServers/index.js
@@ -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.
+ */
+
+module.exports = angular.module('trafficOps.table.profileServers', [])
+	.controller('TableProfileServersController', require('./TableProfileServersController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/profileServers/table.profileServers.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/profileServers/table.profileServers.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/profileServers/table.profileServers.tpl.html
new file mode 100644
index 0000000..e6f2d39
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/profileServers/table.profileServers.tpl.html
@@ -0,0 +1,69 @@
+<!--
+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 class="x_panel">
+    <div class="x_title">
+        <ol class="breadcrumb pull-left">
+            <li><a ng-click="navigateToPath('/admin/profiles')">Profiles</a></li>
+            <li><a ng-click="navigateToPath('/admin/profiles/' + profile.id)">{{profile.name}}</a></li>
+            <li class="active">Servers</li>
+        </ol>
+        <div class="clearfix"></div>
+    </div>
+    <div class="x_content">
+        <br>
+        <table id="serversTable" class="table responsive-utilities jambo_table">
+            <thead>
+            <tr class="headings">
+                <th>Update?</th>
+                <th>hostName</th>
+                <th>domainName</th>
+                <th>cdn</th>
+                <th>cachegroup</th>
+                <th>type</th>
+                <th>location</th>
+                <th>ipAddress</th>
+                <th>ip6Address</th>
+                <th>status</th>
+                <th>profile</th>
+                <th>iloIpAddress</th>
+                <th>iloIpGateway</th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr ng-click="editServer(server.id)" ng-repeat="server in servers" ng-class="{'active': server.updPending}">
+                <td>{{server.updPending}}</td>
+                <td>{{server.hostName}}</td>
+                <td>{{server.domainName}}</td>
+                <td>{{server.cdnName}}</td>
+                <td>{{server.cachegroup}}</td>
+                <td>{{server.type}}</td>
+                <td>{{server.physLocation}}</td>
+                <td>{{server.ipAddress}}</td>
+                <td>{{server.ip6Address}}</td>
+                <td>{{server.status}}</td>
+                <td>{{server.profile}}</td>
+                <td>{{server.iloIpAddress}}</td>
+                <td>{{server.iloIpGateway}}</td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+</div>
+

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/regionPhysLocations/TableRegionPhysLocationsController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/regionPhysLocations/TableRegionPhysLocationsController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/regionPhysLocations/TableRegionPhysLocationsController.js
new file mode 100644
index 0000000..f2f0de8
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/regionPhysLocations/TableRegionPhysLocationsController.js
@@ -0,0 +1,46 @@
+/*
+ * 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 TableRegionPhysLocationsController = function(region, physLocations, $scope, locationUtils) {
+
+	$scope.region = region;
+
+	$scope.physLocations = physLocations;
+
+	$scope.editPhysLocation = function(id) {
+		locationUtils.navigateToPath('/admin/phys-locations/' + id)
+	};
+
+	$scope.createPhysLocation = function() {
+		locationUtils.navigateToPath('/admin/phys-locations/new')
+	};
+
+	$scope.navigateToPath = locationUtils.navigateToPath;
+
+	angular.element(document).ready(function () {
+		$('#physLocationsTable').dataTable({
+			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
+			"iDisplayLength": -1
+		});
+	});
+
+};
+
+TableRegionPhysLocationsController.$inject = ['region', 'physLocations', '$scope', 'locationUtils'];
+module.exports = TableRegionPhysLocationsController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/regionPhysLocations/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/regionPhysLocations/index.js b/traffic_ops/experimental/ui/app/src/common/modules/table/regionPhysLocations/index.js
new file mode 100644
index 0000000..d0338f1
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/regionPhysLocations/index.js
@@ -0,0 +1,21 @@
+/*
+ * 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('trafficOps.table.regionPhysLocations', [])
+	.controller('TableRegionPhysLocationsController', require('./TableRegionPhysLocationsController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/common/modules/table/regionPhysLocations/table.regionPhysLocations.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/regionPhysLocations/table.regionPhysLocations.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/regionPhysLocations/table.regionPhysLocations.tpl.html
new file mode 100644
index 0000000..8aafdbb
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/regionPhysLocations/table.regionPhysLocations.tpl.html
@@ -0,0 +1,56 @@
+<!--
+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 class="x_panel">
+    <div class="x_title">
+        <ol class="breadcrumb pull-left">
+            <li><a ng-click="navigateToPath('/admin/regions')">Regions</a></li>
+            <li><a ng-click="navigateToPath('/admin/regions/' + region.id)">{{region.name}}</a></li>
+            <li class="active">Physical Locations</li>
+        </ol>
+        <div class="clearfix"></div>
+    </div>
+    <div class="x_content">
+        <br>
+        <table id="physLocationsTable" class="table responsive-utilities jambo_table">
+            <thead>
+            <tr class="headings">
+                <th>name</th>
+                <th>shortName</th>
+                <th>address</th>
+                <th>city</th>
+                <th>state</th>
+                <th>region</th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr ng-click="editPhysLocation(physLocation.id)" ng-repeat="physLocation in physLocations">
+                <td>{{physLocation.name}}</td>
+                <td>{{physLocation.shortName}}</td>
+                <td>{{physLocation.address}}</td>
+                <td>{{physLocation.city}}</td>
+                <td>{{physLocation.state}}</td>
+                <td>{{physLocation.region}}</td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+</div>
+
+

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/modules/private/admin/cdns/deliveryServices/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/cdns/deliveryServices/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/cdns/deliveryServices/index.js
new file mode 100644
index 0000000..88bf7e5
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/modules/private/admin/cdns/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('trafficOps.private.admin.cdns.deliveryServices', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficOps.private.admin.cdns.deliveryServices', {
+				url: '/{cdnId}/delivery-services',
+				views: {
+					cdnsContent: {
+						templateUrl: 'common/modules/table/cdnDeliveryServices/table.cdnDeliveryServices.tpl.html',
+						controller: 'TableCDNDeliveryServicesController',
+						resolve: {
+							cdn: function($stateParams, cdnService) {
+								return cdnService.getCDN($stateParams.cdnId);
+							},
+							deliveryServices: function(deliveryServiceService) {
+								return deliveryServiceService.getDeliveryServices();
+							}
+						}
+					}
+				}
+			})
+		;
+		$urlRouterProvider.otherwise('/');
+	});

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/modules/private/admin/cdns/servers/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/cdns/servers/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/cdns/servers/index.js
new file mode 100644
index 0000000..30c228a
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/modules/private/admin/cdns/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('trafficOps.private.admin.cdns.servers', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficOps.private.admin.cdns.servers', {
+				url: '/{cdnId}/servers',
+				views: {
+					cdnsContent: {
+						templateUrl: 'common/modules/table/cdnServers/table.cdnServers.tpl.html',
+						controller: 'TableCDNServersController',
+						resolve: {
+							cdn: function($stateParams, cdnService) {
+								return cdnService.getCDN($stateParams.cdnId);
+							},
+							servers: function(serverService) {
+								return serverService.getServers();
+							}
+						}
+					}
+				}
+			})
+		;
+		$urlRouterProvider.otherwise('/');
+	});

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/LocationsController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/LocationsController.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/LocationsController.js
deleted file mode 100644
index 0b2c316..0000000
--- a/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/LocationsController.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * 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 LocationsController = function() {
-};
-
-LocationsController.$inject = [];
-module.exports = LocationsController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/_locations.scss
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/_locations.scss b/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/_locations.scss
deleted file mode 100644
index d57b9c6..0000000
--- a/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/_locations.scss
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
-
-
- 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/625ba56f/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/edit/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/edit/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/edit/index.js
deleted file mode 100644
index c748e6d..0000000
--- a/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/edit/index.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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('trafficOps.private.admin.locations.edit', [])
-    .config(function($stateProvider, $urlRouterProvider) {
-        $stateProvider
-            .state('trafficOps.private.admin.locations.edit', {
-                url: '/{locationId:[0-9]{1,8}}',
-                views: {
-                    locationsContent: {
-                        templateUrl: 'common/modules/form/location/form.location.tpl.html',
-                        controller: 'FormEditLocationController',
-                        resolve: {
-                            location: function($stateParams, locationService) {
-                                return locationService.getLocation($stateParams.locationId);
-                            }
-                        }
-                    }
-                }
-            })
-        ;
-        $urlRouterProvider.otherwise('/');
-    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/index.js
deleted file mode 100644
index d42f0b4..0000000
--- a/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/index.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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('trafficOps.private.admin.locations', [])
-    .controller('LocationsController', require('./LocationsController'))
-    .config(function($stateProvider, $urlRouterProvider) {
-        $stateProvider
-            .state('trafficOps.private.admin.locations', {
-                url: '/locations',
-                abstract: true,
-                views: {
-                    adminContent: {
-                        templateUrl: 'modules/private/admin/locations/locations.tpl.html',
-                        controller: 'LocationsController'
-                    }
-                }
-            })
-        ;
-        $urlRouterProvider.otherwise('/');
-    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/list/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/list/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/list/index.js
deleted file mode 100644
index a77e587..0000000
--- a/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/list/index.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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('trafficOps.private.admin.locations.list', [])
-    .config(function($stateProvider, $urlRouterProvider) {
-        $stateProvider
-            .state('trafficOps.private.admin.locations.list', {
-                url: '',
-                views: {
-                    locationsContent: {
-                        templateUrl: 'common/modules/table/locations/table.locations.tpl.html',
-                        controller: 'TableLocationsController',
-                        resolve: {
-                            locations: function(locationService) {
-                                return locationService.getLocations();
-                            }
-                        }
-                    }
-                }
-            })
-        ;
-        $urlRouterProvider.otherwise('/');
-    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/locations.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/locations.tpl.html b/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/locations.tpl.html
deleted file mode 100644
index 5763f02..0000000
--- a/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/locations.tpl.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-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="locationsContent"></div>
-</div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/new/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/new/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/new/index.js
deleted file mode 100644
index 0e61d4b..0000000
--- a/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/new/index.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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('trafficOps.private.admin.locations.new', [])
-    .config(function($stateProvider, $urlRouterProvider) {
-        $stateProvider
-            .state('trafficOps.private.admin.locations.new', {
-                url: '/new',
-                views: {
-                    locationsContent: {
-                        templateUrl: 'common/modules/form/location/form.location.tpl.html',
-                        controller: 'FormNewLocationController',
-                        resolve: {
-                            location: function() {
-                                return {};
-                            }
-                        }
-                    }
-                }
-            })
-        ;
-        $urlRouterProvider.otherwise('/');
-    });

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/servers/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/servers/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/servers/index.js
deleted file mode 100644
index d5198a4..0000000
--- a/traffic_ops/experimental/ui/app/src/modules/private/admin/locations/servers/index.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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('trafficOps.private.admin.locations.servers', [])
-	.config(function($stateProvider, $urlRouterProvider) {
-		$stateProvider
-			.state('trafficOps.private.admin.locations.servers', {
-				url: '/{locationId}/servers',
-				views: {
-					locationsContent: {
-						templateUrl: 'common/modules/table/locationServers/table.locationServers.tpl.html',
-						controller: 'TableLocationServersController',
-						resolve: {
-							location: function($stateParams, locationService) {
-								return locationService.getLocation($stateParams.locationId);
-							},
-							servers: function(serverService) {
-								return serverService.getServers();
-							}
-						}
-					}
-				}
-			})
-		;
-		$urlRouterProvider.otherwise('/');
-	});

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/625ba56f/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/PhysLocationsController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/PhysLocationsController.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/PhysLocationsController.js
new file mode 100644
index 0000000..4879cab
--- /dev/null
+++ b/traffic_ops/experimental/ui/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/625ba56f/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/_physLocations.scss
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/_physLocations.scss b/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/_physLocations.scss
new file mode 100644
index 0000000..d57b9c6
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/_physLocations.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/625ba56f/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/edit/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/edit/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/edit/index.js
new file mode 100644
index 0000000..3948999
--- /dev/null
+++ b/traffic_ops/experimental/ui/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('trafficOps.private.admin.physLocations.edit', [])
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficOps.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/625ba56f/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/index.js
new file mode 100644
index 0000000..911b46a
--- /dev/null
+++ b/traffic_ops/experimental/ui/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('trafficOps.private.admin.physLocations', [])
+    .controller('PhysLocationsController', require('./PhysLocationsController'))
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficOps.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/625ba56f/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/list/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/list/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/physLocations/list/index.js
new file mode 100644
index 0000000..036baab
--- /dev/null
+++ b/traffic_ops/experimental/ui/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('trafficOps.private.admin.physLocations.list', [])
+    .config(function($stateProvider, $urlRouterProvider) {
+        $stateProvider
+            .state('trafficOps.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('/');
+    });