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

[01/15] incubator-trafficcontrol git commit: This closes #441

Repository: incubator-trafficcontrol
Updated Branches:
  refs/heads/master 544d6f103 -> d34fb3303


This closes #441


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

Branch: refs/heads/master
Commit: d34fb33038d1606d138343223100229b774eb2df
Parents: 96d043b
Author: Dewayne Richardson <de...@apache.org>
Authored: Thu Apr 6 14:41:34 2017 -0600
Committer: Dewayne Richardson <de...@apache.org>
Committed: Thu Apr 6 14:41:34 2017 -0600

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

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



[02/15] incubator-trafficcontrol git commit: uses then instead of deprecated success/error

Posted by de...@apache.org.
uses then instead of deprecated success/error


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

Branch: refs/heads/master
Commit: a7c7e976f41af961b194326f5cbb0d4bc0366c86
Parents: 31a9d1c
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Thu Apr 6 11:45:01 2017 -0600
Committer: Dewayne Richardson <de...@apache.org>
Committed: Thu Apr 6 14:41:34 2017 -0600

----------------------------------------------------------------------
 .../ui/app/src/common/api/HttpService.js        | 56 +++++++++++---------
 .../ui/app/src/common/api/TrafficOpsService.js  | 14 ++---
 .../ui/app/src/common/api/UserService.js        | 16 +++---
 3 files changed, 49 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/a7c7e976/traffic_ops/experimental/ui/app/src/common/api/HttpService.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/HttpService.js b/traffic_ops/experimental/ui/app/src/common/api/HttpService.js
index ab01b9d..a74b7ff 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/HttpService.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/HttpService.js
@@ -23,12 +23,14 @@ var HttpService = function($http, $q) {
         var deferred = $q.defer();
 
         $http.get(resource)
-            .success(function(result) {
-                deferred.resolve(result);
-            })
-            .error(function(fault) {
-                deferred.reject(fault);
-            });
+            .then(
+                function(result) {
+                    deferred.resolve(result);
+                },
+                function(fault) {
+                    deferred.reject(fault);
+                }
+            );
 
         return deferred.promise;
     };
@@ -37,12 +39,14 @@ var HttpService = function($http, $q) {
         var deferred = $q.defer();
 
         $http.post(resource, payload)
-            .success(function(result) {
-                deferred.resolve(result);
-            })
-            .error(function(fault) {
-                deferred.reject(fault);
-            });
+            .then(
+                function(result) {
+                    deferred.resolve(result);
+                },
+                function(fault) {
+                    deferred.reject(fault);
+                }
+            );
 
         return deferred.promise;
     };
@@ -51,12 +55,14 @@ var HttpService = function($http, $q) {
         var deferred = $q.defer();
 
         $http.put(resource, payload)
-            .success(function(result) {
-                deferred.resolve(result.response);
-            })
-            .error(function(fault) {
-                deferred.reject(fault);
-            });
+            .then(
+                function(result) {
+                    deferred.resolve(result.response);
+                },
+                function(fault) {
+                    deferred.reject(fault);
+                }
+            );
 
         return deferred.promise;
     };
@@ -65,12 +71,14 @@ var HttpService = function($http, $q) {
         var deferred = $q.defer();
 
         $http.delete(resource)
-            .success(function(result) {
-                deferred.resolve(result.response);
-            })
-            .error(function(fault) {
-                deferred.reject(fault);
-            });
+            .then(
+                function(result) {
+                    deferred.resolve(result.response);
+                },
+                function(fault) {
+                    deferred.reject(fault);
+                }
+            );
 
         return deferred.promise;
     };

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/a7c7e976/traffic_ops/experimental/ui/app/src/common/api/TrafficOpsService.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/api/TrafficOpsService.js b/traffic_ops/experimental/ui/app/src/common/api/TrafficOpsService.js
index 63966f1..6c6ff82 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/TrafficOpsService.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/TrafficOpsService.js
@@ -22,12 +22,14 @@ var TrafficOpsService = function($http, $q) {
     this.getReleaseVersionInfo = function() {
         var deferred = $q.defer();
         $http.get('traffic_ops_release.json')
-            .success(function(result) {
-                deferred.resolve(result);
-            })
-            .error(function(fault) {
-                deferred.reject(fault);
-            });
+            .then(
+                function(result) {
+                    deferred.resolve(result);
+                },
+                function(fault) {
+                    deferred.reject(fault);
+                }
+            );
 
         return deferred.promise;
     };

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/a7c7e976/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 37c1e78..e4a8a5f 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/UserService.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/UserService.js
@@ -35,13 +35,15 @@ var UserService = function(Restangular, $http, $location, $q, authService, locat
                 );
         } else {
             $http.get(ENV.api['root'] + "user/current.json")
-                .success(function(result) {
-                    userModel.setUser(result.response);
-                    deferred.resolve(result.response);
-                })
-                .error(function(fault) {
-                    deferred.reject(fault);
-                });
+                .then(
+                    function(result) {
+                        userModel.setUser(result.response);
+                        deferred.resolve(result.response);
+                    },
+                    function(fault) {
+                        deferred.reject(fault);
+                    }
+                );
 
             return deferred.promise;
         }


[14/15] incubator-trafficcontrol git commit: fixes bug in retrieving user object

Posted by de...@apache.org.
fixes bug in retrieving user object


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

Branch: refs/heads/master
Commit: 96d043ba4c41cfb56349bfbec95245db87e3d64f
Parents: a7c7e97
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Thu Apr 6 12:09:55 2017 -0600
Committer: Dewayne Richardson <de...@apache.org>
Committed: Thu Apr 6 14:41:34 2017 -0600

----------------------------------------------------------------------
 traffic_ops/experimental/ui/app/src/common/api/UserService.js | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/96d043ba/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 e4a8a5f..0995d62 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/UserService.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/UserService.js
@@ -34,11 +34,11 @@ var UserService = function(Restangular, $http, $location, $q, authService, locat
                     }
                 );
         } else {
-            $http.get(ENV.api['root'] + "user/current.json")
+            $http.get(ENV.api['root'] + "user/current")
                 .then(
                     function(result) {
-                        userModel.setUser(result.response);
-                        deferred.resolve(result.response);
+                        userModel.setUser(result.data.response);
+                        deferred.resolve(result.data.response);
                     },
                     function(fault) {
                         deferred.reject(fault);


[05/15] incubator-trafficcontrol git commit: adds tooltips and cleaner buttons

Posted by de...@apache.org.
adds tooltips and cleaner buttons


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

Branch: refs/heads/master
Commit: 714effdbde1a308eff6c911794be4127cb91dc5f
Parents: 544d6f1
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Thu Mar 2 21:55:34 2017 -0700
Committer: Dewayne Richardson <de...@apache.org>
Committed: Thu Apr 6 14:41:34 2017 -0600

----------------------------------------------------------------------
 .../deliveryService/form.deliveryService.tpl.html   |  9 +++++----
 .../modules/form/division/form.division.tpl.html    | 12 ++++++++++--
 .../modules/form/parameter/form.parameter.tpl.html  | 10 +++++++++-
 .../form/physLocation/form.physLocation.tpl.html    | 12 ++++++++++--
 .../modules/form/profile/form.profile.tpl.html      |  4 ++--
 .../common/modules/form/region/form.region.tpl.html | 12 ++++++++++--
 .../common/modules/form/status/form.status.tpl.html | 10 +++++++++-
 .../src/common/modules/form/type/form.type.tpl.html | 16 ++++++++++++----
 .../src/common/modules/form/user/form.user.tpl.html | 12 ++++++++++--
 .../common/modules/navigation/navigation.tpl.html   |  2 +-
 .../common/modules/table/asns/table.asns.tpl.html   |  4 ++--
 .../cacheGroupAsns/table.cacheGroupAsns.tpl.html    |  2 +-
 .../table.cacheGroupParameters.tpl.html             |  4 ++--
 .../table.cacheGroupServers.tpl.html                |  2 +-
 .../table.cacheGroupStaticDnsEntries.tpl.html       |  2 +-
 .../table.cdnDeliveryServices.tpl.html              |  2 +-
 .../common/modules/table/cdns/table.cdns.tpl.html   |  4 ++--
 .../table.deliveryServiceRegexes.tpl.html           |  4 ++--
 .../table.deliveryServiceServers.tpl.html           |  8 +++-----
 .../table.deliveryServiceStaticDnsEntries.tpl.html  |  2 +-
 .../table.deliveryServiceUsers.tpl.html             |  2 +-
 .../table.deliveryServices.tpl.html                 |  4 ++--
 .../divisionRegions/table.divisionRegions.tpl.html  |  2 +-
 .../table/divisions/table.divisions.tpl.html        |  4 ++--
 .../table.parameterProfiles.tpl.html                |  6 +++---
 .../table/parameters/table.parameters.tpl.html      |  4 ++--
 .../table.physLocationServers.tpl.html              |  2 +-
 .../physLocations/table.physLocations.tpl.html      |  4 ++--
 .../table.profileParameters.tpl.html                |  6 +++---
 .../profileServers/table.profileServers.tpl.html    |  4 ++--
 .../modules/table/profiles/table.profiles.tpl.html  |  4 ++--
 .../table.regionPhysLocations.tpl.html              |  2 +-
 .../modules/table/regions/table.regions.tpl.html    |  4 ++--
 .../table.serverDeliveryServices.tpl.html           |  6 +++---
 .../modules/table/servers/table.servers.tpl.html    |  2 +-
 .../statusServers/table.statusServers.tpl.html      |  4 ++--
 .../modules/table/statuses/table.statuses.tpl.html  |  4 ++--
 .../modules/table/tenants/table.tenants.tpl.html    |  2 +-
 .../typeCacheGroups/table.typeCacheGroups.tpl.html  |  2 +-
 .../table.typeDeliveryServices.tpl.html             |  2 +-
 .../table/typeServers/table.typeServers.tpl.html    |  4 ++--
 .../table.typeStaticDnsEntries.tpl.html             |  2 +-
 .../common/modules/table/types/table.types.tpl.html |  4 ++--
 .../table.userDeliveryServices.tpl.html             |  6 +++---
 .../common/modules/table/users/table.users.tpl.html |  4 ++--
 45 files changed, 139 insertions(+), 84 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 6062f63..8024ded 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
@@ -24,19 +24,20 @@ under the License.
             <li class="active">{{deliveryServiceName}}</li>
         </ol>
         <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>
+            <button class="btn btn-primary" title="Assign Caches" ng-click="assignServers()"><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">
                     More
                     <span class="caret"></span>
                 </button>
                 <ul class="dropdown-menu-right dropdown-menu" uib-dropdown-menu>
-                    <li role="menuitem"><a ng-click="manageSslKeys()">Manage SSL Keys</a></li>
-                    <li role="menuitem"><a ng-click="manageUrlSigKeys()">Manage URL Sig Keys</a></li>
+                    <li role="menuitem"><a ng-click="viewRegexes()">Edit Delivery Service Regexes</a></li>
                     <li class="divider"></li>
                     <li role="menuitem"><a ng-click="invalidateContent()">Invalidate Content</a></li>
                     <li class="divider"></li>
+                    <li role="menuitem"><a ng-click="manageSslKeys()">Manage SSL Keys</a></li>
+                    <li role="menuitem"><a ng-click="manageUrlSigKeys()">Manage URL Sig Keys</a></li>
+                    <li class="divider"></li>
                     <li role="menuitem"><a ng-click="cachegroupHealth()">View Cachegroup Health</a></li>
                     <li role="menuitem"><a ng-click="viewStaticDnsEntries()">View Static DNS Entries</a></li>
                 </ul>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 f0001e1..983d9ac 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="pull-right" ng-show="!settings.isNew">
-            <button class="btn btn-primary" ng-click="viewRegions()">View Regions</button>
+        <div class="pull-right" role="group" 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>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 e38a3f1..caa2fdc 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
@@ -24,7 +24,15 @@ under the License.
             <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 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="viewProfiles()">View Profiles</a></li>
+                </ul>
+            </div>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 e3ebad3..baaf28f 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
@@ -23,8 +23,16 @@ under the License.
             <li><a ng-click="navigateToPath('/admin/phys-locations')">Physical Locations</a></li>
             <li class="active">{{physLocationName}}</li>
         </ol>
-        <div class="pull-right" ng-show="!settings.isNew">
-            <button class="btn btn-primary" ng-click="viewServers()">View Servers &nbsp;&nbsp;<i class="fa fa-server"></i></button>
+        <div class="pull-right" role="group" 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>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 3e314d2..06473c9 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,8 +24,8 @@ under the License.
             <li class="active">{{profileName}}</li>
         </ol>
         <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>
+            <button class="btn btn-primary" title="View Parameters" ng-click="viewParams()"><i class="fa fa-clone"></i></button>
+            <button class="btn btn-primary" title="View Servers" ng-click="viewServers()"><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">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 953369b..4dfaaf7 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,8 +23,16 @@ under the License.
             <li><a ng-click="navigateToPath('/admin/regions')">Regions</a></li>
             <li class="active">{{regionName}}</li>
         </ol>
-        <div class="pull-right" ng-show="!settings.isNew">
-            <button class="btn btn-primary" ng-click="viewPhysLocations()">View Physical Locations</button>
+        <div class="pull-right" role="group" 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>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 d1ac71c..8cfa805 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
@@ -24,7 +24,15 @@ under the License.
             <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 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>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 f9a99b9..d09bb7d 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
@@ -24,10 +24,18 @@ under the License.
             <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</button>
-            <button class="btn btn-primary" ng-show="type.useInTable == 'cachegroup'" ng-click="viewCacheGroups()">View Cache Groups</button>
-            <button class="btn btn-primary" ng-show="type.useInTable == 'staticdnsentry'" ng-click="viewStaticDnsEntries()">View Static DNS Entries</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" ng-show="type.useInTable == 'server'"><a ng-click="viewServers()">View Servers</a></li>
+                    <li role="menuitem" ng-show="type.useInTable == 'deliveryservice'"><a ng-click="viewDeliveryServices()">View Delivery Services</a></li>
+                    <li role="menuitem" ng-show="type.useInTable == 'cachegroup'"><a ng-click="viewCacheGroups()">View Cache Groups</a></li>
+                    <li role="menuitem" ng-show="type.useInTable == 'staticdnsentry'"><a ng-click="viewStaticDnsEntries()">View Static DNS Entries</a></li>
+                </ul>
+            </div>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 da388b5..ba333d2 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
@@ -24,8 +24,16 @@ under the License.
             <li><a ng-click="navigateToPath('/admin/users')">Users</a></li>
             <li class="active">{{userName}}</li>
         </ol>
-        <div class="pull-right" ng-show="!settings.isNew">
-            <button class="btn btn-primary" ng-click="viewDeliveryServices()">View Assigned Delivery Services</button>
+        <div class="pull-right" role="group" 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 Delivery Services</a></li>
+                </ul>
+            </div>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 1930758..0452689 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/phys-locations')">Phys Locations</a></li>
+                        <li class="side-menu-category-item" ng-class="{'current-page': isState('trafficOps.private.admin.physLocations')}"><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/714effdb/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 007d590..db51b17 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
@@ -23,8 +23,8 @@ under the License.
             <li class="active">ASNs</li>
         </ol>
         <div class="pull-right" role="group" ng-show="!settings.isNew">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
-            <button class="btn btn-primary" ng-click="createASN()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create ASN</button>
+            <button class="btn btn-primary" title="Create ASN" ng-click="createASN()"><i class="fa fa-plus"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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
index 141d2cc..8dcb2d3 100644
--- 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
@@ -25,7 +25,7 @@ under the License.
             <li class="active">ASNs</li>
         </ol>
         <div class="pull-right" role="group" ng-show="!settings.isNew">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 d111fc0..282d7a3 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
@@ -25,8 +25,8 @@ under the License.
             <li class="active">Parameters</li>
         </ol>
         <div class="pull-right" role="group" ng-show="!settings.isNew">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
-            <button class="btn btn-primary" ng-click="addParameter()">Add</button>
+            <button class="btn btn-primary" title="Add Parameter" ng-click="addParameter()"><i class="fa fa-plus"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 004ab39..6044d28 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
@@ -27,7 +27,7 @@ under the License.
         <div class="pull-right">
             <button class="btn btn-primary" title="Queue {{cacheGroup.name}} server updates" ng-click="confirmQueueServerUpdates(cacheGroup)"><i class="fa fa-flag"></i></button>
             <button class="btn btn-primary" title="Clear {{cacheGroup.name}} server updates" ng-click="confirmClearServerUpdates(cacheGroup)"><i class="fa fa-ban"></i></button>
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupStaticDnsEntries/table.cacheGroupStaticDnsEntries.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupStaticDnsEntries/table.cacheGroupStaticDnsEntries.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupStaticDnsEntries/table.cacheGroupStaticDnsEntries.tpl.html
index 320e16d..9032cc9 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupStaticDnsEntries/table.cacheGroupStaticDnsEntries.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cacheGroupStaticDnsEntries/table.cacheGroupStaticDnsEntries.tpl.html
@@ -25,7 +25,7 @@ under the License.
             <li class="active">Static DNS Entries</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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
index 0745b66..6237660 100644
--- 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
@@ -25,7 +25,7 @@ under the License.
             <li class="active">Delivery Services</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 9997811..c9d8827 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
@@ -23,8 +23,8 @@ under the License.
             <li class="active">CDNs</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
-            <button class="btn btn-primary" ng-click="createCDN()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create CDN</button>
+            <button class="btn btn-primary" title="Create CDN" ng-click="createCDN()"><i class="fa fa-plus"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 74112ce..b1f6816 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
@@ -25,8 +25,8 @@ under the License.
             <li class="active">Regexes</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
-            <button class="btn btn-primary" ng-click="createRegex(deliveryService.id)"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create Regex</button>
+            <button class="btn btn-primary" title="Create Regex" ng-click="createRegex(deliveryService.id)"><i class="fa fa-plus"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 dd02269..2aa7653 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
@@ -25,8 +25,8 @@ under the License.
             <li class="active">Servers</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
-            <button class="btn btn-primary" ng-click="addServer()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Add Server to DS</button>
+            <button class="btn btn-primary" title="Add Server" ng-click="addServer()"><i class="fa fa-plus"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>
@@ -35,7 +35,6 @@ under the License.
         <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>
@@ -53,7 +52,6 @@ under the License.
             </thead>
             <tbody>
             <tr 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>
@@ -66,7 +64,7 @@ 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-show="server.type == 'EDGE'" ng-click="removeServer()"><i class="fa fa-trash-o"></i></button></td>
+                <td><button type="button" class="btn btn-link" title="Remove Server" ng-show="server.type == 'EDGE'" 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/714effdb/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceStaticDnsEntries/table.deliveryServiceStaticDnsEntries.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceStaticDnsEntries/table.deliveryServiceStaticDnsEntries.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceStaticDnsEntries/table.deliveryServiceStaticDnsEntries.tpl.html
index 57363c5..7fc0eb6 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceStaticDnsEntries/table.deliveryServiceStaticDnsEntries.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceStaticDnsEntries/table.deliveryServiceStaticDnsEntries.tpl.html
@@ -25,7 +25,7 @@ under the License.
             <li class="active">Static DNS Entries</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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
index da12f86..cfc02ea 100644
--- 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
@@ -25,7 +25,7 @@ under the License.
             <li class="active">Users</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
             <button class="btn btn-primary" ng-click="addUser()">Add</button>
         </div>
         <div class="clearfix"></div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 f69398f..63d2553 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
@@ -23,8 +23,8 @@ under the License.
             <li class="active">Delivery Services</li>
         </ol>
         <div class="pull-right" role="group" ng-show="!settings.isNew">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
-            <button class="btn btn-primary" ng-click="createDeliveryService()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create Delivery Service</button>
+            <button class="btn btn-primary" title="Create Delivery Service" ng-click="createDeliveryService()"><i class="fa fa-plus"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 a401125..70183d2 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
@@ -25,7 +25,7 @@ under the License.
             <li class="active">Regions</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 7c17e52..d1406f8 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
@@ -23,8 +23,8 @@ under the License.
             <li class="active">Divisions</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
-            <button class="btn btn-primary" ng-click="createDivision()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create Division</button>
+            <button class="btn btn-primary" title="Create Division" ng-click="createDivision()"><i class="fa fa-plus"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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
index 26d3bf7..2c94681 100644
--- 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
@@ -25,8 +25,8 @@ under the License.
             <li class="active">Profiles</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
-            <button class="btn btn-primary" ng-click="addProfile()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Add Profile to Param</button>
+            <button class="btn btn-primary" title="Add Profile" ng-click="addProfile()"><i class="fa fa-plus"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>
@@ -44,7 +44,7 @@ under the License.
             <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>
+                <td><button type="button" class="btn btn-link" title="Remove Profile" ng-click="removeProfile()"><i class="fa fa-trash-o"></i></button></td>
             </tr>
             </tbody>
         </table>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 00df103..c17546e 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
@@ -23,8 +23,8 @@ under the License.
             <li class="active">Parameters</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
-            <button class="btn btn-primary" ng-click="createParameter()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create Parameter</button>
+            <button class="btn btn-primary" title="Create Parameter" ng-click="createParameter()"><i class="fa fa-plus"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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
index d31fac6..ffe90e7 100644
--- 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
@@ -25,7 +25,7 @@ under the License.
             <li class="active">Servers</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 2281587..c636bb0 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
@@ -23,8 +23,8 @@ under the License.
             <li class="active">Physical Locations</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
-            <button class="btn btn-primary" ng-click="createPhysLocation()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create Phys Location</button>
+            <button class="btn btn-primary" title="Create Phys Location" ng-click="createPhysLocation()"><i class="fa fa-plus"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 f9da5e9..7db87be 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
@@ -25,8 +25,8 @@ under the License.
             <li class="active">Parameters</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
-            <button class="btn btn-primary" ng-click="addParameter()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Add Parameter To Profile</button>
+            <button class="btn btn-primary" title="Add Parameter" ng-click="addParameter()"><i class="fa fa-plus"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>
@@ -48,7 +48,7 @@ under the License.
                 <td>{{parameter.name}}</td>
                 <td>{{parameter.configFile}}</td>
                 <td>{{parameter.value}}</td>
-                <td><button type="button" class="btn btn-link" title="Remove from Profile" ng-click="removeParameter()"><i class="fa fa-trash-o"></i></button></td>
+                <td><button type="button" class="btn btn-link" title="Remove Parameter" ng-click="removeParameter()"><i class="fa fa-trash-o"></i></button></td>
             </tr>
             </tbody>
         </table>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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
index d2ce979..05b7f18 100644
--- 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
@@ -25,7 +25,7 @@ under the License.
             <li class="active">Servers</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>
@@ -51,7 +51,7 @@ under the License.
             </thead>
             <tbody>
             <tr ng-click="editServer(server.id)" ng-repeat="server in servers" ng-class="{'active': server.updPending}">
-                <td>{{server.updPending}}</td>
+                <td><i class="fa fa-flag" ng-show="server.updPending"></i></td>
                 <td>{{server.hostName}}</td>
                 <td>{{server.domainName}}</td>
                 <td>{{server.cdnName}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 27ccd76..9d7b497 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
@@ -23,8 +23,8 @@ under the License.
             <li class="active">Profiles</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
-            <button class="btn btn-primary" ng-click="createProfile()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create Profile</button>
+            <button class="btn btn-primary" title="Create Profile" ng-click="createProfile()"><i class="fa fa-plus"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></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

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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
index 58995a7..863debd 100644
--- 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
@@ -25,7 +25,7 @@ under the License.
             <li class="active">Physical Locations</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 b1882d1..8dde63f 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
@@ -23,8 +23,8 @@ under the License.
             <li class="active">Regions</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
-            <button class="btn btn-primary" ng-click="createRegion()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create Region</button>
+            <button class="btn btn-primary" title="Create Region" ng-click="createRegion()"><i class="fa fa-plus"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 ad032b2..3761a88 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
@@ -25,8 +25,8 @@ under the License.
             <li class="active">Delivery Services</li>
         </ol>
         <div class="pull-right" role="group">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
-            <button class="btn btn-primary" ng-click="addDeliveryService()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Add Delivery Service To Server</button>
+            <button class="btn btn-primary" title="Add Delivery Service" ng-click="addDeliveryService()"><i class="fa fa-plus"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></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
@@ -77,7 +77,7 @@ under the License.
                 <td>{{deliveryService.protocol}}</td>
                 <td>{{deliveryService.ipv6RoutingEnabled}}</td>
                 <td>{{deliveryService.rangeRequestHandling}}</td>
-                <td><button type="button" class="btn btn-link" title="Remove from Server" ng-click="removeDeliveryService()"><i class="fa fa-trash-o"></i></button></td>
+                <td><button type="button" class="btn btn-link" title="Remove Delivery Service" ng-click="removeDeliveryService()"><i class="fa fa-trash-o"></i></button></td>
             </tr>
             </tbody>
         </table>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 df95acd..982444d 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
@@ -24,7 +24,7 @@ under the License.
         </ol>
         <div class="pull-right">
             <button class="btn btn-primary" title="Create Server" ng-click="createServer()"><i class="fa fa-plus"></i></button>
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></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

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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
index d8e1466..5a7300e 100644
--- 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
@@ -25,7 +25,7 @@ under the License.
             <li class="active">Servers</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>
@@ -51,7 +51,7 @@ under the License.
             </thead>
             <tbody>
             <tr ng-click="editServer(server.id)" ng-repeat="server in servers" ng-class="{'active': server.updPending}">
-                <td>{{server.updPending}}</td>
+                <td><i class="fa fa-flag" ng-show="server.updPending"></i></td>
                 <td>{{server.hostName}}</td>
                 <td>{{server.domainName}}</td>
                 <td>{{server.cdnName}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 0978eac..5feaa3d 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
@@ -23,8 +23,8 @@ under the License.
             <li class="active">Statuses</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
-            <button class="btn btn-primary" ng-click="createStatus()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create Status</button>
+            <button class="btn btn-primary" title="Create Status" ng-click="createStatus()"><i class="fa fa-plus"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 4b4b561..f8155e4 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
@@ -23,7 +23,7 @@ under the License.
             <li class="active">Tenants</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
             <button class="btn btn-primary" ng-click="createTenant()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create Tenant</button>
         </div>
         <div class="clearfix"></div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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
index aee9b08..c38eefb 100644
--- 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
@@ -25,7 +25,7 @@ under the License.
             <li class="active">Cache Groups</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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
index 48af88c..cac9df0 100644
--- 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
@@ -25,7 +25,7 @@ under the License.
             <li class="active">Delivery Services</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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
index 9fe29e7..49e5ced 100644
--- 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
@@ -25,7 +25,7 @@ under the License.
             <li class="active">Servers</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>
@@ -51,7 +51,7 @@ under the License.
             </thead>
             <tbody>
             <tr ng-click="editServer(server.id)" ng-repeat="server in servers" ng-class="{'active': server.updPending}">
-                <td>{{server.updPending}}</td>
+                <td><i class="fa fa-flag" ng-show="server.updPending"></i></td>
                 <td>{{server.hostName}}</td>
                 <td>{{server.domainName}}</td>
                 <td>{{server.cdnName}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/traffic_ops/experimental/ui/app/src/common/modules/table/typeStaticDnsEntries/table.typeStaticDnsEntries.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/typeStaticDnsEntries/table.typeStaticDnsEntries.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/typeStaticDnsEntries/table.typeStaticDnsEntries.tpl.html
index 15f18f6..f948283 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/typeStaticDnsEntries/table.typeStaticDnsEntries.tpl.html
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/typeStaticDnsEntries/table.typeStaticDnsEntries.tpl.html
@@ -25,7 +25,7 @@ under the License.
             <li class="active">Static DNS Entries</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 7d3a8f7..6d9f3da 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
@@ -23,8 +23,8 @@ under the License.
             <li class="active">Types</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
-            <button class="btn btn-primary" ng-click="createType()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create Type</button>
+            <button class="btn btn-primary" title="Create Type" ng-click="createType()"><i class="fa fa-plus"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 a242da5..f265854 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
@@ -25,8 +25,8 @@ under the License.
             <li class="active">Delivery Services</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
-            <button class="btn btn-primary" ng-click="addDeliveryService()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Add Delivery Services To User</button>
+            <button class="btn btn-primary" title="Add Delivery Service" ng-click="addDeliveryService()"><i class="fa fa-plus"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>
@@ -46,7 +46,7 @@ under the License.
                 <td>{{deliveryService.xmlId}}</td>
                 <td>{{deliveryService.orgServerFqdn}}</td>
                 <td>{{deliveryService.cdnName}}</td>
-                <td><button type="button" class="btn btn-link" title="Remove from Server" ng-click="removeDeliveryService()"><i class="fa fa-trash-o"></i></button></td>
+                <td><button type="button" class="btn btn-link" title="Remove Delivery Service" ng-click="removeDeliveryService()"><i class="fa fa-trash-o"></i></button></td>
             </tr>
             </tbody>
         </table>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/714effdb/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 2f63894..55a19f9 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
@@ -23,8 +23,8 @@ under the License.
             <li class="active">Users</li>
         </ol>
         <div class="pull-right">
-            <button class="btn btn-default" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
-            <button class="btn btn-primary" ng-click="createUser()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create User</button>
+            <button class="btn btn-primary" title="Create User" ng-click="createUser()"><i class="fa fa-plus"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
         </div>
         <div class="clearfix"></div>
     </div>


[07/15] incubator-trafficcontrol git commit: adds cdn and type to profiles

Posted by de...@apache.org.
adds cdn and type to profiles


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

Branch: refs/heads/master
Commit: 7cd0e4d61f1a06e5cd39f557c8535fd7a94e7fdd
Parents: 61fa6c0
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Fri Mar 10 13:57:08 2017 -0700
Committer: Dewayne Richardson <de...@apache.org>
Committed: Thu Apr 6 14:41:34 2017 -0600

----------------------------------------------------------------------
 .../form/profile/FormProfileController.js       | 35 ++++++++++++++++----
 .../modules/form/profile/form.profile.tpl.html  | 30 +++++++++++++----
 .../table/profiles/table.profiles.tpl.html      |  4 +++
 3 files changed, 57 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/7cd0e4d6/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 14822d8..67755fd 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
@@ -17,16 +17,34 @@
  * under the License.
  */
 
-var FormProfileController = function(profile, $scope, $location, formUtils, stringUtils, locationUtils) {
+var FormProfileController = function(profile, $scope, $location, formUtils, locationUtils, cdnService) {
+
+    var getCDNs = function() {
+        cdnService.getCDNs()
+            .then(function(result) {
+                $scope.cdns = result;
+            });
+    };
 
     $scope.profile = profile;
 
-    $scope.props = [
-        { name: 'name', type: 'text', required: true, maxLength: 45 }
+    $scope.types = [
+        { value: 'ATS_PROFILE' },
+        { value: 'TR_PROFILE' },
+        { value: 'TM_PROFILE' },
+        { value: 'TS_PROFILE' },
+        { value: 'TP_PROFILE' },
+        { value: 'INFLUXDB_PROFILE' },
+        { value: 'RIAK_PROFILE' },
+        { value: 'SPLUNK_PROFILE' },
+        { value: 'DS_PROFILE' },
+        { value: 'ORG_PROFILE' },
+        { value: 'KAFKA_PROFILE' },
+        { value: 'LOGSTASH_PROFILE' },
+        { value: 'ES_PROFILE' },
+        { value: 'UNK_PROFILE' }
     ];
 
-    $scope.labelize = stringUtils.labelize;
-
     $scope.viewParams = function() {
         $location.path($location.path() + '/parameters');
     };
@@ -49,7 +67,12 @@ var FormProfileController = function(profile, $scope, $location, formUtils, stri
 
     $scope.hasPropertyError = formUtils.hasPropertyError;
 
+    var init = function () {
+        getCDNs();
+    };
+    init();
+
 };
 
-FormProfileController.$inject = ['profile', '$scope', '$location', 'formUtils', 'stringUtils', 'locationUtils'];
+FormProfileController.$inject = ['profile', '$scope', '$location', 'formUtils', 'locationUtils', 'cdnService'];
 module.exports = FormProfileController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/7cd0e4d6/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 06473c9..820659e 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
@@ -43,13 +43,31 @@ under the License.
     <div class="x_content">
         <br>
         <form name="profileForm" class="form-horizontal form-label-left" novalidate>
-            <div class="form-group" ng-class="{'has-error': hasError(profileForm[prop.name]), 'has-feedback': hasError(profileForm[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="form-group" ng-class="{'has-error': hasError(profileForm.name), 'has-feedback': hasError(profileForm.name)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Name *</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="profile[prop.name]" ng-readonly="prop.readonly" ng-required="prop.required" ng-maxlength="prop.maxLength" autofocus>
-                    <small class="input-error" ng-show="hasPropertyError(profileForm[prop.name], 'required')">Required</small>
-                    <small class="input-error" ng-show="hasPropertyError(profileForm[prop.name], 'maxlength')">Too Long</small>
-                    <span ng-show="hasError(profileForm[prop.name])" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                    <input id="name" name="name" type="text" class="form-control" ng-model="profile.name" ng-required="true" ng-maxlength="45" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(profileForm.name, 'required')">Required</small>
+                    <small class="input-error" ng-show="hasPropertyError(profileForm.name, 'maxlength')">Too Long</small>
+                    <span ng-show="hasError(profileForm.name)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(profileForm.cdn), 'has-feedback': hasError(profileForm.cdn)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">CDN *</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <select id="cdn" name="cdn" class="form-control" ng-model="profile.cdn" ng-options="cdn.id as cdn.name for cdn in cdns" required>
+                        <option value="">Select...</option>
+                    </select>
+                    <small class="input-error" ng-show="hasPropertyError(profileForm.cdn, 'required')">Required</small>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(profileForm.type), 'has-feedback': hasError(profileForm.type)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Type *</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <select id="type" name="type" class="form-control" ng-model="profile.type" ng-options="type.value as type.value for type in types" required>
+                        <option value="">Select...</option>
+                    </select>
+                    <small class="input-error" ng-show="hasPropertyError(profileForm.cdn, 'required')">Required</small>
                 </div>
             </div>
             <div class="form-group">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/7cd0e4d6/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 9d7b497..3d9ea8e 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
@@ -44,13 +44,17 @@ under the License.
             <thead>
             <tr class="headings">
                 <th>name</th>
+                <th>type</th>
                 <th>description</th>
+                <th>cdn</th>
             </tr>
             </thead>
             <tbody>
             <tr ng-click="editProfile(profile.id)" ng-repeat="profile in profiles">
                 <td>{{profile.name}}</td>
+                <td>{{profile.type}}</td>
                 <td>{{profile.description}}</td>
+                <td>{{profile.cdnName}}</td>
             </tr>
             </tbody>
         </table>


[13/15] incubator-trafficcontrol git commit: adds cdn profiles table

Posted by de...@apache.org.
adds cdn profiles table


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

Branch: refs/heads/master
Commit: 900442107b52a2c6d34e439bcbb1180311c7943c
Parents: f9e77e2
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Thu Mar 23 21:04:13 2017 -0600
Committer: Dewayne Richardson <de...@apache.org>
Committed: Thu Apr 6 14:41:34 2017 -0600

----------------------------------------------------------------------
 traffic_ops/experimental/ui/app/src/app.js      |  2 +
 .../modules/form/cdn/FormCDNController.js       |  4 ++
 .../common/modules/form/cdn/form.cdn.tpl.html   |  3 +-
 .../cdnProfiles/TableCDNProfilesController.js   | 46 ++++++++++++++++
 .../common/modules/table/cdnProfiles/index.js   | 21 ++++++++
 .../cdnProfiles/table.cdnProfiles.tpl.html      | 55 ++++++++++++++++++++
 .../private/admin/cdns/profiles/index.js        | 42 +++++++++++++++
 7 files changed, 172 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/90044210/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 05dce5b..20461f3 100644
--- a/traffic_ops/experimental/ui/app/src/app.js
+++ b/traffic_ops/experimental/ui/app/src/app.js
@@ -62,6 +62,7 @@ var trafficOps = angular.module('trafficOps', [
         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/profiles').name,
         require('./modules/private/admin/cdns/servers').name,
         require('./modules/private/admin/divisions').name,
         require('./modules/private/admin/divisions/edit').name,
@@ -216,6 +217,7 @@ var trafficOps = angular.module('trafficOps', [
         require('./common/modules/table/asns').name,
         require('./common/modules/table/cdns').name,
         require('./common/modules/table/cdnDeliveryServices').name,
+        require('./common/modules/table/cdnProfiles').name,
         require('./common/modules/table/cdnServers').name,
         require('./common/modules/table/deliveryServices').name,
         require('./common/modules/table/deliveryServiceRegexes').name,

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/90044210/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 28fc0c4..d76772d 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
@@ -50,6 +50,10 @@ var FormCDNController = function(cdn, $scope, $location, formUtils, stringUtils,
         alert('not hooked up yet: manageSnapshots for CDN');
     };
 
+    $scope.viewProfiles = function() {
+        $location.path($location.path() + '/profiles');
+    };
+
     $scope.viewServers = function() {
         $location.path($location.path() + '/servers');
     };

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/90044210/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 0dae223..661c3a8 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
@@ -37,8 +37,9 @@ under the License.
                     <li role="menuitem"><a ng-click="manageSSL()">Manage SSL Keys</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>
+                    <li role="menuitem"><a ng-click="viewProfiles()">View Profiles</a></li>
+                    <li role="menuitem"><a ng-click="viewServers()">View Servers</a></li>
                 </ul>
             </div>
         </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/90044210/traffic_ops/experimental/ui/app/src/common/modules/table/cdnProfiles/TableCDNProfilesController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cdnProfiles/TableCDNProfilesController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnProfiles/TableCDNProfilesController.js
new file mode 100644
index 0000000..9a093bb
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnProfiles/TableCDNProfilesController.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 TableCDNProfilesController = function(cdn, profiles, $scope, $state, locationUtils) {
+
+	$scope.cdn = cdn;
+
+	$scope.profiles = profiles;
+
+	$scope.editProfile = function(id) {
+		locationUtils.navigateToPath('/admin/profiles/' + id);
+	};
+
+	$scope.refresh = function() {
+		$state.reload(); // reloads all the resolves for the view
+	};
+
+	$scope.navigateToPath = locationUtils.navigateToPath;
+
+	angular.element(document).ready(function () {
+		$('#profilesTable').dataTable({
+			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
+			"iDisplayLength": 100
+		});
+	});
+
+};
+
+TableCDNProfilesController.$inject = ['cdn', 'profiles', '$scope', '$state', 'locationUtils'];
+module.exports = TableCDNProfilesController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/90044210/traffic_ops/experimental/ui/app/src/common/modules/table/cdnProfiles/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cdnProfiles/index.js b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnProfiles/index.js
new file mode 100644
index 0000000..8939080
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnProfiles/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.cdnProfiles', [])
+	.controller('TableCDNProfilesController', require('./TableCDNProfilesController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/90044210/traffic_ops/experimental/ui/app/src/common/modules/table/cdnProfiles/table.cdnProfiles.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/cdnProfiles/table.cdnProfiles.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnProfiles/table.cdnProfiles.tpl.html
new file mode 100644
index 0000000..f017e84
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/cdnProfiles/table.cdnProfiles.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><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">Profiles</li>
+        </ol>
+        <div class="pull-right">
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
+        </div>
+        <div class="clearfix"></div>
+    </div>
+    <div class="x_content">
+        <br>
+        <table id="profilesTable" class="table responsive-utilities jambo_table">
+            <thead>
+            <tr class="headings">
+                <th>name</th>
+                <th>description</th>
+                <th>cdn</th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr ng-click="editProfile(profile.id)" ng-repeat="profile in profiles">
+                <td>{{profile.name}}</td>
+                <td>{{profile.description}}</td>
+                <td>{{profile.cdnName}}</td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+</div>
+
+
+
+

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


[04/15] incubator-trafficcontrol git commit: adds flag / ban icons to server table for updates

Posted by de...@apache.org.
adds flag / ban icons to server table for updates


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

Branch: refs/heads/master
Commit: 60e34c114f4a599bc2f1ded1306d7720321aad4a
Parents: 714effd
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Fri Mar 3 08:13:48 2017 -0700
Committer: Dewayne Richardson <de...@apache.org>
Committed: Thu Apr 6 14:41:34 2017 -0600

----------------------------------------------------------------------
 .../experimental/ui/app/src/common/modules/table/_table.scss  | 6 ++++++
 .../table/cacheGroupServers/table.cacheGroupServers.tpl.html  | 7 +++++--
 .../common/modules/table/cdnServers/table.cdnServers.tpl.html | 7 +++++--
 .../table.deliveryServiceServers.tpl.html                     | 5 +++++
 .../physLocationServers/table.physLocationServers.tpl.html    | 5 +++++
 .../table/profileServers/table.profileServers.tpl.html        | 5 ++++-
 .../src/common/modules/table/servers/table.servers.tpl.html   | 7 +++++--
 .../modules/table/statusServers/table.statusServers.tpl.html  | 5 ++++-
 .../modules/table/typeServers/table.typeServers.tpl.html      | 5 ++++-
 traffic_ops/experimental/ui/app/src/styles/main.scss          | 1 +
 10 files changed, 44 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/60e34c11/traffic_ops/experimental/ui/app/src/common/modules/table/_table.scss
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/_table.scss b/traffic_ops/experimental/ui/app/src/common/modules/table/_table.scss
new file mode 100644
index 0000000..11fe4af
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/_table.scss
@@ -0,0 +1,6 @@
+.update-column {
+  text-align: center;
+  .fa-flag {
+    font-weight: bold;
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/60e34c11/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 6044d28..b146972 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
@@ -36,7 +36,7 @@ under the License.
         <table id="serversTable" class="table responsive-utilities jambo_table">
             <thead>
             <tr class="headings">
-                <th></th>
+                <th>Update?</th>
                 <th>hostName</th>
                 <th>domainName</th>
                 <th>cdn</th>
@@ -53,7 +53,10 @@ under the License.
             </thead>
             <tbody>
             <tr ng-click="editServer(server.id)" ng-repeat="server in servers" ng-class="{'active': server.updPending}">
-                <td><i class="fa fa-flag" ng-show="server.updPending"></i></td>
+                <td class="update-column">
+                    <i class="fa fa-flag" ng-show="server.updPending"></i>
+                    <i class="fa fa-ban" ng-show="!server.updPending"></i>
+                </td>
                 <td>{{server.hostName}}</td>
                 <td>{{server.domainName}}</td>
                 <td>{{server.cdnName}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/60e34c11/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 a9925da..9189f43 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
@@ -36,7 +36,7 @@ under the License.
         <table id="serversTable" class="table responsive-utilities jambo_table">
             <thead>
             <tr class="headings">
-                <th></th>
+                <th>Update?</th>
                 <th>hostName</th>
                 <th>domainName</th>
                 <th>cdn</th>
@@ -53,7 +53,10 @@ under the License.
             </thead>
             <tbody>
             <tr ng-click="editServer(server.id)" ng-repeat="server in servers" ng-class="{'active': server.updPending}">
-                <td><i class="fa fa-flag" ng-show="server.updPending"></i></td>
+                <td class="update-column">
+                    <i class="fa fa-flag" ng-show="server.updPending"></i>
+                    <i class="fa fa-ban" ng-show="!server.updPending"></i>
+                </td>
                 <td>{{server.hostName}}</td>
                 <td>{{server.domainName}}</td>
                 <td>{{server.cdnName}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/60e34c11/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 2aa7653..e3a9481 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
@@ -35,6 +35,7 @@ under the License.
         <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>
@@ -52,6 +53,10 @@ under the License.
             </thead>
             <tbody>
             <tr ng-repeat="server in servers" ng-class="{'active': server.updPending}">
+                <td class="update-column">
+                    <i class="fa fa-flag" ng-show="server.updPending"></i>
+                    <i class="fa fa-ban" ng-show="!server.updPending"></i>
+                </td>
                 <td>{{server.hostName}}</td>
                 <td>{{server.domainName}}</td>
                 <td>{{server.cdnName}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/60e34c11/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
index ffe90e7..bef4077 100644
--- 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
@@ -34,6 +34,7 @@ under the License.
         <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>
@@ -50,6 +51,10 @@ under the License.
             </thead>
             <tbody>
             <tr ng-click="editServer(server.id)" ng-repeat="server in servers">
+                <td class="update-column">
+                    <i class="fa fa-flag" ng-show="server.updPending"></i>
+                    <i class="fa fa-ban" ng-show="!server.updPending"></i>
+                </td>
                 <td>{{server.hostName}}</td>
                 <td>{{server.domainName}}</td>
                 <td>{{server.cdnName}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/60e34c11/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
index 05b7f18..e94b619 100644
--- 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
@@ -51,7 +51,10 @@ under the License.
             </thead>
             <tbody>
             <tr ng-click="editServer(server.id)" ng-repeat="server in servers" ng-class="{'active': server.updPending}">
-                <td><i class="fa fa-flag" ng-show="server.updPending"></i></td>
+                <td class="update-column">
+                    <i class="fa fa-flag" ng-show="server.updPending"></i>
+                    <i class="fa fa-ban" ng-show="!server.updPending"></i>
+                </td>
                 <td>{{server.hostName}}</td>
                 <td>{{server.domainName}}</td>
                 <td>{{server.cdnName}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/60e34c11/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 982444d..137f046 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
@@ -42,7 +42,7 @@ under the License.
         <table id="serversTable" class="table responsive-utilities jambo_table">
             <thead>
             <tr class="headings">
-                <th></th>
+                <th>Update?</th>
                 <th>hostName</th>
                 <th>domainName</th>
                 <th>cdn</th>
@@ -59,7 +59,10 @@ under the License.
             </thead>
             <tbody>
             <tr ng-click="editServer(server.id)" ng-repeat="server in servers" ng-class="{'active': server.updPending}">
-                <td><i class="fa fa-flag" ng-show="server.updPending"></i></td>
+                <td class="update-column">
+                    <i class="fa fa-flag" ng-show="server.updPending"></i>
+                    <i class="fa fa-ban" ng-show="!server.updPending"></i>
+                </td>
                 <td>{{server.hostName}}</td>
                 <td>{{server.domainName}}</td>
                 <td>{{server.cdnName}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/60e34c11/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
index 5a7300e..815d82f 100644
--- 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
@@ -51,7 +51,10 @@ under the License.
             </thead>
             <tbody>
             <tr ng-click="editServer(server.id)" ng-repeat="server in servers" ng-class="{'active': server.updPending}">
-                <td><i class="fa fa-flag" ng-show="server.updPending"></i></td>
+                <td class="update-column">
+                    <i class="fa fa-flag" ng-show="server.updPending"></i>
+                    <i class="fa fa-ban" ng-show="!server.updPending"></i>
+                </td>
                 <td>{{server.hostName}}</td>
                 <td>{{server.domainName}}</td>
                 <td>{{server.cdnName}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/60e34c11/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
index 49e5ced..99ab56a 100644
--- 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
@@ -51,7 +51,10 @@ under the License.
             </thead>
             <tbody>
             <tr ng-click="editServer(server.id)" ng-repeat="server in servers" ng-class="{'active': server.updPending}">
-                <td><i class="fa fa-flag" ng-show="server.updPending"></i></td>
+                <td class="update-column">
+                    <i class="fa fa-flag" ng-show="server.updPending"></i>
+                    <i class="fa fa-ban" ng-show="!server.updPending"></i>
+                </td>
                 <td>{{server.hostName}}</td>
                 <td>{{server.domainName}}</td>
                 <td>{{server.cdnName}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/60e34c11/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 653e961..19d70ce 100755
--- a/traffic_ops/experimental/ui/app/src/styles/main.scss
+++ b/traffic_ops/experimental/ui/app/src/styles/main.scss
@@ -31,6 +31,7 @@ $fa-font-path: "../assets/fonts";
 @import "../common/modules/header/header";
 @import "../common/modules/message/message";
 @import "../common/modules/navigation/navigation";
+@import "../common/modules/table/table";
 @import "../common/modules/release/release";
 
 // public


[11/15] incubator-trafficcontrol git commit: hooks up tenant table and form

Posted by de...@apache.org.
hooks up tenant table and form


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

Branch: refs/heads/master
Commit: f9e77e283f75d0a915ec292c926d0dd7ff1c9e62
Parents: 64efcec
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Wed Mar 22 21:11:18 2017 -0600
Committer: Dewayne Richardson <de...@apache.org>
Committed: Thu Apr 6 14:41:34 2017 -0600

----------------------------------------------------------------------
 traffic_ops/experimental/ui/app/src/app.js      |  1 +
 .../ui/app/src/common/api/TenantService.js      |  8 +++---
 .../modules/form/tenant/FormTenantController.js | 25 +++++++++++-----
 .../modules/form/tenant/form.tenant.tpl.html    | 30 +++++++++++++++-----
 .../modules/navigation/navigation.tpl.html      |  1 +
 .../table/tenants/table.tenants.tpl.html        |  8 +++++-
 6 files changed, 54 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/f9e77e28/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 d6877f8..05dce5b 100644
--- a/traffic_ops/experimental/ui/app/src/app.js
+++ b/traffic_ops/experimental/ui/app/src/app.js
@@ -239,6 +239,7 @@ var trafficOps = angular.module('trafficOps', [
         require('./common/modules/table/serverDeliveryServices').name,
         require('./common/modules/table/statuses').name,
         require('./common/modules/table/statusServers').name,
+        require('./common/modules/table/tenants').name,
         require('./common/modules/table/types').name,
         require('./common/modules/table/typeCacheGroups').name,
         require('./common/modules/table/typeDeliveryServices').name,

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/f9e77e28/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 edec73e..b350033 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/TenantService.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/TenantService.js
@@ -20,15 +20,15 @@
 var TenantService = function(Restangular, messageModel) {
 
     this.getTenants = function(queryParams) {
-        return Restangular.all('tenant').getList(queryParams);
+        return Restangular.all('tenants').getList(queryParams);
     };
 
     this.getTenant = function(id) {
-        return Restangular.one("tenant", id).get();
+        return Restangular.one("tenants", id).get();
     };
 
     this.createTenant = function(tenant) {
-        return Restangular.service('tenant').post(tenant)
+        return Restangular.service('tenants').post(tenant)
             .then(
                 function() {
                     messageModel.setMessages([ { level: 'success', text: 'Tenant created' } ], true);
@@ -52,7 +52,7 @@ var TenantService = function(Restangular, messageModel) {
     };
 
     this.deleteTenant = function(id) {
-        return Restangular.one("tenant", id).remove()
+        return Restangular.one("tenants", id).remove()
             .then(
                 function() {
                     messageModel.setMessages([ { level: 'success', text: 'Tenant deleted' } ], true);

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/f9e77e28/traffic_ops/experimental/ui/app/src/common/modules/form/tenant/FormTenantController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/form/tenant/FormTenantController.js b/traffic_ops/experimental/ui/app/src/common/modules/form/tenant/FormTenantController.js
index 0fc3096..4acf374 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/form/tenant/FormTenantController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/form/tenant/FormTenantController.js
@@ -17,15 +17,21 @@
  * under the License.
  */
 
-var FormTenantController = function(tenant, $scope, formUtils, stringUtils, locationUtils) {
+var FormTenantController = function(tenant, $scope, formUtils, locationUtils, tenantService) {
 
-    $scope.tenant = angular.copy(tenant);
+    var getTenants = function() {
+        tenantService.getTenants()
+            .then(function(result) {
+                $scope.tenants = result;
+            });
+    };
 
-    $scope.props = [
-        { name: 'name', type: 'text', required: true, maxLength: 45 }
-    ];
+    $scope.tenant = tenant;
 
-    $scope.labelize = stringUtils.labelize;
+    $scope.falseTrue = [
+        { value: false, label: 'false' },
+        { value: true, label: 'true' }
+    ];
 
     $scope.navigateToPath = locationUtils.navigateToPath;
 
@@ -33,7 +39,12 @@ var FormTenantController = function(tenant, $scope, formUtils, stringUtils, loca
 
     $scope.hasPropertyError = formUtils.hasPropertyError;
 
+    var init = function () {
+        getTenants();
+    };
+    init();
+
 };
 
-FormTenantController.$inject = ['tenant', '$scope', 'formUtils', 'stringUtils', 'locationUtils'];
+FormTenantController.$inject = ['tenant', '$scope', 'formUtils', 'locationUtils', 'tenantService'];
 module.exports = FormTenantController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/f9e77e28/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 d80aea0..8567a86 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
@@ -20,7 +20,7 @@ under the License.
 <div class="x_panel">
     <div class="x_title">
         <ol class="breadcrumb">
-            <li><a ng-click="navigateToPath('/configure/tenants')">Tenants</a></li>
+            <li><a ng-click="navigateToPath('/admin/tenants')">Tenants</a></li>
             <li class="active">{{tenantName}}</li>
         </ol>
         <div class="clearfix"></div>
@@ -28,13 +28,29 @@ under the License.
     <div class="x_content">
         <br>
         <form name="tenantForm" class="form-horizontal form-label-left" novalidate>
-            <div class="form-group" ng-class="{'has-error': hasError(tenantForm[prop.name]), 'has-feedback': hasError(tenantForm[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="form-group" ng-class="{'has-error': hasError(tenantForm.name), 'has-feedback': hasError(tenantForm.name)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Name *</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="tenant[prop.name]" ng-readonly="prop.readonly" ng-required="prop.required" ng-maxlength="prop.maxLength" autofocus>
-                    <small class="input-error" ng-show="hasPropertyError(tenantForm[prop.name], 'required')">Required</small>
-                    <small class="input-error" ng-show="hasPropertyError(tenantForm[prop.name], 'maxlength')">Too Long</small>
-                    <span ng-show="hasError(tenantForm[prop.name])" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                    <input id="name" name="name" type="text" class="form-control" ng-model="tenant.name" ng-required="true" ng-maxlength="45" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(tenantForm.name, 'required')">Required</small>
+                    <small class="input-error" ng-show="hasPropertyError(tenantForm.name, 'maxlength')">Too Long</small>
+                    <span ng-show="hasError(tenantForm.name)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(tenantForm.active), 'has-feedback': hasError(tenantForm.active)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Active *</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <select id="active" name="active" class="form-control" ng-model="tenant.active" ng-options="x.value as x.label for x in falseTrue" required></select>
+                    <small class="input-error" ng-show="hasPropertyError(tenantForm.active, 'required')">Required</small>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(tenantForm.parentId), 'has-feedback': hasError(tenantForm.parentId)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Parent Tenant *</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <select id="parentId" name="parentId" class="form-control" ng-model="tenant.parentId" ng-options="tenant.id as tenant.name for tenant in tenants" required>
+                        <option value="">Select...</option>
+                    </select>
+                    <small class="input-error" ng-show="hasPropertyError(tenantForm.parentId, 'required')">Required</small>
                 </div>
             </div>
             <div class="modal-footer">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/f9e77e28/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 0452689..6814241 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
@@ -50,6 +50,7 @@ under the License.
                         <li class="side-menu-category-item" ng-class="{'current-page': isState('trafficOps.private.admin.regions')}"><a ng-click="navigateToPath('/admin/regions')">Regions</a></li>
                         <li class="side-menu-category-item" ng-class="{'current-page': isState('trafficOps.private.admin.statuses')}"><a ng-click="navigateToPath('/admin/statuses')">Statuses</a></li>
                         <li class="side-menu-category-item" ng-class="{'current-page': isState('trafficOps.private.admin.types')}"><a ng-click="navigateToPath('/admin/types')">Types</a></li>
+                        <li class="side-menu-category-item" ng-class="{'current-page': isState('trafficOps.private.admin.tenants')}"><a ng-click="navigateToPath('/admin/tenants')">Tenants</a></li>
                         <li class="side-menu-category-item" ng-class="{'current-page': isState('trafficOps.private.admin.users')}"><a ng-click="navigateToPath('/admin/users')">Users</a></li>
                     </ul>
                 </li>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/f9e77e28/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 f8155e4..40c19bc 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
@@ -23,8 +23,8 @@ under the License.
             <li class="active">Tenants</li>
         </ol>
         <div class="pull-right">
+            <button class="btn btn-primary" ng-click="createTenant()"><i class="fa fa-plus"></i></button>
             <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
-            <button class="btn btn-primary" ng-click="createTenant()"><i class="fa fa-plus"></i>&nbsp;&nbsp; Create Tenant</button>
         </div>
         <div class="clearfix"></div>
     </div>
@@ -34,11 +34,17 @@ under the License.
             <thead>
             <tr class="headings">
                 <th>id</th>
+                <th>name</th>
+                <th>active</th>
+                <th>parent</th>
             </tr>
             </thead>
             <tbody>
             <tr ng-click="editTenant(tenant.id)" ng-repeat="tenant in tenants">
                 <td>{{tenant.id}}</td>
+                <td>{{tenant.name}}</td>
+                <td>{{tenant.active}}</td>
+                <td>{{tenant.parentId}}</td>
             </tr>
             </tbody>
         </table>


[06/15] incubator-trafficcontrol git commit: adds cdn domain name

Posted by de...@apache.org.
adds cdn domain name


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

Branch: refs/heads/master
Commit: 61fa6c0c3c40242dcbd8f0ea407ba943cfb719b3
Parents: 60e34c1
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Fri Mar 10 11:10:51 2017 -0700
Committer: Dewayne Richardson <de...@apache.org>
Committed: Thu Apr 6 14:41:34 2017 -0600

----------------------------------------------------------------------
 .../modules/form/cdn/FormCDNController.js       |  6 ------
 .../common/modules/form/cdn/form.cdn.tpl.html   | 21 ++++++++++++++------
 .../modules/table/cdns/table.cdns.tpl.html      |  2 ++
 3 files changed, 17 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/61fa6c0c/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 d71e8ef..28fc0c4 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
@@ -21,12 +21,6 @@ var FormCDNController = function(cdn, $scope, $location, formUtils, stringUtils,
 
     $scope.cdn = cdn;
 
-    $scope.props = [
-        { name: 'name', type: 'text', required: true, maxLength: 45 }
-    ];
-
-    $scope.labelize = stringUtils.labelize;
-
     $scope.falseTrue = [
         { value: false, label: 'false' },
         { value: true, label: 'true' }

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/61fa6c0c/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 ef2822d..0dae223 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
@@ -47,13 +47,22 @@ under the License.
     <div class="x_content">
         <br>
         <form name="cdnForm" class="form-horizontal form-label-left" novalidate>
-            <div class="form-group" ng-class="{'has-error': hasError(cdnForm[prop.name]), 'has-feedback': hasError(cdnForm[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="form-group" ng-class="{'has-error': hasError(cdnForm.name), 'has-feedback': hasError(cdnForm.name)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Name *</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="cdn[prop.name]" ng-readonly="prop.readonly" ng-required="prop.required" ng-maxlength="prop.maxLength" autofocus>
-                    <small class="input-error" ng-show="hasPropertyError(cdnForm[prop.name], 'required')">Required</small>
-                    <small class="input-error" ng-show="hasPropertyError(cdnForm[prop.name], 'maxlength')">Too Long</small>
-                    <span ng-show="hasError(cdnForm[prop.name])" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                    <input id="name" name="name" type="text" class="form-control" ng-model="cdn.name" ng-required="true" ng-maxlength="45" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(cdnForm.name, 'required')">Required</small>
+                    <small class="input-error" ng-show="hasPropertyError(cdnForm.name, 'maxlength')">Too Long</small>
+                    <span ng-show="hasError(cdnForm.name)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(cdnForm.domainName), 'has-feedback': hasError(cdnForm.domainName)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Domain *</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="domainName" name="domainName" type="text" class="form-control" ng-model="cdn.domainName" ng-required="true" ng-maxlength="255" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(cdnForm.domainName, 'required')">Required</small>
+                    <small class="input-error" ng-show="hasPropertyError(cdnForm.domainName, 'maxlength')">Too Long</small>
+                    <span ng-show="hasError(cdnForm.domainName)" class="form-control-feedback"><i class="fa fa-times"></i></span>
                 </div>
             </div>
             <div class="form-group" ng-class="{'has-error': hasError(cdnForm.dnssecEnabled), 'has-feedback': hasError(cdnForm.dnssecEnabled)}">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/61fa6c0c/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 c9d8827..9199b55 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
@@ -34,12 +34,14 @@ under the License.
             <thead>
                 <tr class="headings">
                     <th>name</th>
+                    <th>domainName</th>
                     <th>dnssecEnabled</th>
                 </tr>
             </thead>
             <tbody>
                 <tr ng-click="editCDN(cdn.id)" ng-repeat="cdn in cdns">
                     <td>{{cdn.name}}</td>
+                    <td>{{cdn.domainName}}</td>
                     <td>{{cdn.dnssecEnabled}}</td>
                 </tr>
             </tbody>


[08/15] incubator-trafficcontrol git commit: DS profile is now optional

Posted by de...@apache.org.
DS profile is now optional


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

Branch: refs/heads/master
Commit: e8a53527929dc17f1d26d68e14c000abf87c6662
Parents: 7cd0e4d
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Mon Mar 13 21:14:45 2017 -0600
Committer: Dewayne Richardson <de...@apache.org>
Committed: Thu Apr 6 14:41:34 2017 -0600

----------------------------------------------------------------------
 .../modules/form/deliveryService/form.deliveryService.tpl.html  | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/e8a53527/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 8024ded..d13dab4 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
@@ -283,12 +283,11 @@ under the License.
             </div>
 
             <div class="form-group" ng-class="{'has-error': hasError(deliveryServiceForm.profile), 'has-feedback': hasError(deliveryServiceForm.profile)}">
-                <label class="control-label col-md-2 col-sm-2 col-xs-12">CCR Profile *</label>
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Profile</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">
-                    <select id="profile" name="profile" class="form-control" ng-model="deliveryService.profileId" ng-options="profile.id as profile.name for profile in profiles" required>
+                    <select id="profile" name="profile" class="form-control" ng-model="deliveryService.profileId" ng-options="profile.id as profile.name for profile in profiles">
                         <option value="">Select...</option>
                     </select>
-                    <small class="input-error" ng-show="hasPropertyError(deliveryServiceForm.profile, 'required')">Required</small>
                 </div>
             </div>
 


[09/15] incubator-trafficcontrol git commit: adds profile deliveryservices table

Posted by de...@apache.org.
adds profile deliveryservices table


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

Branch: refs/heads/master
Commit: 9ffa4f6ba0d29d5bcf3a506ed57bbdd89178f269
Parents: e8a5352
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Mon Mar 13 21:43:34 2017 -0600
Committer: Dewayne Richardson <de...@apache.org>
Committed: Thu Apr 6 14:41:34 2017 -0600

----------------------------------------------------------------------
 traffic_ops/experimental/ui/app/src/app.js      |  2 +
 .../form/profile/FormProfileController.js       |  4 ++
 .../modules/form/profile/form.profile.tpl.html  |  5 +-
 .../TableProfileDeliveryServicesController.js   | 46 ++++++++++++
 .../table/profileDeliveryServices/index.js      | 22 ++++++
 .../table.profileDeliveryServices.tpl.html      | 74 ++++++++++++++++++++
 .../admin/profiles/deliveryServices/index.js    | 42 +++++++++++
 7 files changed, 193 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9ffa4f6b/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 2a73e6d..a3fa799 100644
--- a/traffic_ops/experimental/ui/app/src/app.js
+++ b/traffic_ops/experimental/ui/app/src/app.js
@@ -79,6 +79,7 @@ var trafficOps = angular.module('trafficOps', [
         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/deliveryServices').name,
         require('./modules/private/admin/profiles/edit').name,
         require('./modules/private/admin/profiles/list').name,
         require('./modules/private/admin/profiles/new').name,
@@ -226,6 +227,7 @@ var trafficOps = angular.module('trafficOps', [
         require('./common/modules/table/physLocationServers').name,
         require('./common/modules/table/parameters').name,
         require('./common/modules/table/parameterProfiles').name,
+        require('./common/modules/table/profileDeliveryServices').name,
         require('./common/modules/table/profileParameters').name,
         require('./common/modules/table/profileServers').name,
         require('./common/modules/table/profiles').name,

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9ffa4f6b/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 67755fd..20797b7 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
@@ -53,6 +53,10 @@ var FormProfileController = function(profile, $scope, $location, formUtils, loca
         $location.path($location.path() + '/servers');
     };
 
+    $scope.viewDeliveryServices = function() {
+        $location.path($location.path() + '/delivery-services');
+    };
+
     $scope.cloneProfile = function() {
         alert('not hooked up yet: cloneProfile');
     };

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9ffa4f6b/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 820659e..f2d5450 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
@@ -25,14 +25,15 @@ under the License.
         </ol>
         <div class="pull-right" role="group" ng-show="!settings.isNew">
             <button class="btn btn-primary" title="View Parameters" ng-click="viewParams()"><i class="fa fa-clone"></i></button>
-            <button class="btn btn-primary" title="View Servers" ng-click="viewServers()"><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">
                     More
                     <span class="caret"></span>
                 </button>
                 <ul class="dropdown-menu-right dropdown-menu" uib-dropdown-menu>
+                    <li role="menuitem"><a ng-click="viewDeliveryServices()" ng-show="profile.type == 'DS_PROFILE'">View Delivery Services</a></li>
+                    <li role="menuitem"><a ng-click="viewServers()" ng-show="profile.type != 'DS_PROFILE'">View Servers</a></li>
+                    <li class="divider"></li>
                     <li role="menuitem"><a ng-click="cloneProfile()">Clone Profile</a></li>
                     <li role="menuitem"><a ng-click="exportProfile()">Export Profile</a></li>
                 </ul>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9ffa4f6b/traffic_ops/experimental/ui/app/src/common/modules/table/profileDeliveryServices/TableProfileDeliveryServicesController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/profileDeliveryServices/TableProfileDeliveryServicesController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/profileDeliveryServices/TableProfileDeliveryServicesController.js
new file mode 100644
index 0000000..8655d52
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/profileDeliveryServices/TableProfileDeliveryServicesController.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 TableProfileDeliveryServicesController = function(profile, deliveryServices, $scope, $state, locationUtils) {
+
+	$scope.profile = profile;
+
+	$scope.deliveryServices = deliveryServices;
+
+	$scope.editDeliveryService = function(id) {
+		locationUtils.navigateToPath('/configure/delivery-services/' + id);
+	};
+
+	$scope.refresh = function() {
+		$state.reload(); // reloads all the resolves for the view
+	};
+
+	$scope.navigateToPath = locationUtils.navigateToPath;
+
+	angular.element(document).ready(function () {
+		$('#deliveryServicesTable').dataTable({
+			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
+			"iDisplayLength": -1
+		});
+	});
+
+};
+
+TableProfileDeliveryServicesController.$inject = ['profile', 'deliveryServices', '$scope', '$state', 'locationUtils'];
+module.exports = TableProfileDeliveryServicesController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9ffa4f6b/traffic_ops/experimental/ui/app/src/common/modules/table/profileDeliveryServices/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/profileDeliveryServices/index.js b/traffic_ops/experimental/ui/app/src/common/modules/table/profileDeliveryServices/index.js
new file mode 100644
index 0000000..e8bdce3
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/profileDeliveryServices/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.profileDeliveryServices', [])
+	.controller('TableProfileDeliveryServicesController', require('./TableProfileDeliveryServicesController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9ffa4f6b/traffic_ops/experimental/ui/app/src/common/modules/table/profileDeliveryServices/table.profileDeliveryServices.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/profileDeliveryServices/table.profileDeliveryServices.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/profileDeliveryServices/table.profileDeliveryServices.tpl.html
new file mode 100644
index 0000000..119b545
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/profileDeliveryServices/table.profileDeliveryServices.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/profiles')">Profiles</a></li>
+            <li><a ng-click="navigateToPath('/admin/profiles/' + profile.id)">{{profile.name}}</a></li>
+            <li class="active">Delivery Services</li>
+        </ol>
+        <div class="pull-right">
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
+        </div>
+        <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/9ffa4f6b/traffic_ops/experimental/ui/app/src/modules/private/admin/profiles/deliveryServices/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/profiles/deliveryServices/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/profiles/deliveryServices/index.js
new file mode 100644
index 0000000..1a6c4a0
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/modules/private/admin/profiles/deliveryServices/index.js
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+module.exports = angular.module('trafficOps.private.admin.profiles.deliveryServices', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficOps.private.admin.profiles.deliveryServices', {
+				url: '/{profileId}/delivery-services',
+				views: {
+					profilesContent: {
+						templateUrl: 'common/modules/table/profileDeliveryServices/table.profileDeliveryServices.tpl.html',
+						controller: 'TableProfileDeliveryServicesController',
+						resolve: {
+							profile: function($stateParams, profileService) {
+								return profileService.getProfile($stateParams.profileId);
+							},
+							deliveryServices: function($stateParams, deliveryServiceService) {
+								return deliveryServiceService.getDeliveryServices({ profileId: $stateParams.profileId });
+							}
+						}
+					}
+				}
+			})
+		;
+		$urlRouterProvider.otherwise('/');
+	});


[03/15] incubator-trafficcontrol git commit: expands server form html

Posted by de...@apache.org.
expands server form html


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

Branch: refs/heads/master
Commit: 64efcec2b17bf6ad50794b3d91f0e5aa6e81859e
Parents: 8b7a49f
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Wed Mar 15 21:54:31 2017 -0600
Committer: Dewayne Richardson <de...@apache.org>
Committed: Thu Apr 6 14:41:34 2017 -0600

----------------------------------------------------------------------
 .../modules/form/server/FormServerController.js |  39 +---
 .../modules/form/server/form.server.tpl.html    | 229 ++++++++++++++++++-
 2 files changed, 227 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/64efcec2/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 49af665..22303e3 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,7 +17,7 @@
  * under the License.
  */
 
-var FormServerController = function(server, $scope, $location, $state, formUtils, stringUtils, locationUtils, serverService, cacheGroupService, cdnService, physLocationService, profileService, statusService, typeService) {
+var FormServerController = function(server, $scope, $location, $state, formUtils, locationUtils, serverService, cacheGroupService, cdnService, physLocationService, profileService, statusService, typeService) {
 
     var getPhysLocations = function() {
         physLocationService.getPhysLocations()
@@ -67,39 +67,12 @@ var FormServerController = function(server, $scope, $location, $state, formUtils
 
 
     // supposedly matches IPv4 and IPv6 formats. but actually need one that matches each. todo.
-    var ipRegex = new RegExp(/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$|^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$|^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){
 3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/);
+    $scope.validations = {
+        ipRegex: new RegExp(/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$|^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$|^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3
 }))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/)
+    };
 
-    $scope.server = server;
 
-    $scope.props = [
-        { name: 'hostName', type: 'text', required: true, maxLength: 45, pattern: new RegExp(/^\S*$/), invalidMsg: 'No Spaces' },
-        { name: 'domainName', type: 'text', required: true, maxLength: 45, pattern: new RegExp(/^\S*$/), invalidMsg: 'No Spaces' },
-        { name: 'tcpPort', type: 'text', required: false, maxLength: 10, pattern: new RegExp(/^\d+$/), invalidMsg: 'Number' },
-        { name: 'xmppId', type: 'text', required: false, maxLength: 256 },
-        { name: 'xmppPasswd', type: 'text', required: false, maxLength: 45 },
-        { name: 'interfaceName', type: 'text', required: true, maxLength: 45 },
-        { name: 'ipAddress', type: 'text', required: true, maxLength: 45, pattern: ipRegex, invalidMsg: 'Invalid' },
-        { name: 'ipNetmask', type: 'text', required: true, maxLength: 45, pattern: ipRegex, invalidMsg: 'Invalid' },
-        { name: 'ipGateway', type: 'text', required: true, maxLength: 45, pattern: ipRegex, invalidMsg: 'Invalid' },
-        { name: 'ip6Address', type: 'text', required: false, maxLength: 50 },
-        { name: 'ip6Gateway', type: 'text', required: false, maxLength: 50 },
-        { name: 'interfaceMtu', type: 'text', required: true, maxLength: 11, pattern: new RegExp(/(^1500$|^9000$)/), invalidMsg: '1500 or 9000' },
-        { name: 'rack', type: 'text', required: false, maxLength: 64 },
-        { name: 'offlineReason', type: 'text', required: false, maxLength: 256 },
-        { name: 'mgmtIpAddress', type: 'text', required: false, maxLength: 50, pattern: ipRegex, invalidMsg: 'Invalid' },
-        { name: 'mgmtIpNetmask', type: 'text', required: false, maxLength: 45, pattern: ipRegex, invalidMsg: 'Invalid' },
-        { name: 'mgmtIpGateway', type: 'text', required: false, maxLength: 45, pattern: ipRegex, invalidMsg: 'Invalid' },
-        { name: 'iloIpAddress', type: 'text', required: false, maxLength: 45, pattern: ipRegex, invalidMsg: 'Invalid' },
-        { name: 'iloIpNetmask', type: 'text', required: false, maxLength: 45, pattern: ipRegex, invalidMsg: 'Invalid' },
-        { name: 'iloIpGateway', type: 'text', required: false, maxLength: 45, pattern: ipRegex, invalidMsg: 'Invalid' },
-        { name: 'iloUsername', type: 'text', required: false, maxLength: 45, pattern: new RegExp(/^\S*$/), invalidMsg: 'No Spaces' },
-        { name: 'iloPassword', type: 'text', required: false, maxLength: 45 },
-        { name: 'routerHostName', type: 'text', required: false, maxLength: 256, pattern: new RegExp(/^\S*$/), invalidMsg: 'No Spaces' },
-        { name: 'routerPortName', type: 'text', required: false, maxLength: 256 },
-        { name: 'httpsPort', type: 'text', required: false, maxLength: 10, pattern: new RegExp(/^\d+$/), invalidMsg: 'Number' },
-    ];
-
-    $scope.labelize = stringUtils.labelize;
+    $scope.server = server;
 
     $scope.falseTrue = [
         { value: false, label: 'false' },
@@ -166,5 +139,5 @@ var FormServerController = function(server, $scope, $location, $state, formUtils
 
 };
 
-FormServerController.$inject = ['server', '$scope', '$location', '$state', 'formUtils', 'stringUtils', 'locationUtils', 'serverService', 'cacheGroupService', 'cdnService', 'physLocationService', 'profileService', 'statusService', 'typeService'];
+FormServerController.$inject = ['server', '$scope', '$location', '$state', 'formUtils', 'locationUtils', 'serverService', 'cacheGroupService', 'cdnService', 'physLocationService', 'profileService', 'statusService', 'typeService'];
 module.exports = FormServerController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/64efcec2/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 b64dad9..80e3397 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
@@ -44,14 +44,227 @@ under the License.
     <div class="x_content">
         <br>
         <form name="serverForm" class="form-horizontal form-label-left" novalidate>
-            <div class="form-group" ng-class="{'has-error': hasError(serverForm[prop.name]), 'has-feedback': hasError(serverForm[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="server[prop.name]" ng-readonly="prop.readonly" ng-required="prop.required" ng-maxlength="prop.maxLength" ng-pattern="prop.pattern" autofocus>
-                    <small class="input-error" ng-show="hasPropertyError(serverForm[prop.name], 'required')">Required</small>
-                    <small class="input-error" ng-show="hasPropertyError(serverForm[prop.name], 'maxlength')">Too Long</small>
-                    <small class="input-error" ng-show="hasPropertyError(serverForm[prop.name], 'pattern')">{{prop.invalidMsg}}</small>
-                    <span ng-show="hasError(serverForm[prop.name])" class="form-control-feedback"><i class="fa fa-times"></i></span>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.hostName), 'has-feedback': hasError(serverForm.hostName)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Hostname *</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="hostName" name="hostName" type="text" class="form-control" ng-model="server.hostName" ng-required="true" ng-maxlength="45" ng-pattern="/^\S*$/" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.hostName, 'required')">Required</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.hostName, 'maxlength')">Too Long</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.hostName, 'pattern')">No Spaces</small>
+                    <span ng-show="hasError(serverForm.hostName)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.domainName), 'has-feedback': hasError(serverForm.domainName)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Domain name *</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="domainName" name="domainName" type="text" class="form-control" ng-model="server.domainName" ng-required="true" ng-maxlength="45" ng-pattern="/^\S*$/" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.domainName, 'required')">Required</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.domainName, 'maxlength')">Too Long</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.domainName, 'pattern')">No Spaces</small>
+                    <span ng-show="hasError(serverForm.domainName)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.tcpPort), 'has-feedback': hasError(serverForm.tcpPort)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">TCP Port</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="tcpPort" name="tcpPort" type="text" class="form-control" ng-model="server.tcpPort" ng-maxlength="10" ng-pattern="/^\d+$/" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.tcpPort, 'maxlength')">Too Long</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.tcpPort, 'pattern')">Number</small>
+                    <span ng-show="hasError(serverForm.tcpPort)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.xmppId), 'has-feedback': hasError(serverForm.xmppId)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">XMPP ID</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="xmppId" name="xmppId" type="text" class="form-control" ng-model="server.xmppId" ng-maxlength="256" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.xmppId, 'maxlength')">Too Long</small>
+                    <span ng-show="hasError(serverForm.xmppId)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.xmppPasswd), 'has-feedback': hasError(serverForm.xmppPasswd)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">XMPP Password</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="xmppPasswd" name="xmppPasswd" type="text" class="form-control" ng-model="server.xmppPasswd" ng-maxlength="45" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.xmppPasswd, 'maxlength')">Too Long</small>
+                    <span ng-show="hasError(serverForm.xmppPasswd)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.interfaceName), 'has-feedback': hasError(serverForm.interfaceName)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Interface Name *</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="interfaceName" name="interfaceName" type="text" class="form-control" ng-model="server.interfaceName" ng-required="true" ng-maxlength="45" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.interfaceName, 'required')">Required</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.interfaceName, 'maxlength')">Too Long</small>
+                    <span ng-show="hasError(serverForm.interfaceName)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.ipAddress), 'has-feedback': hasError(serverForm.ipAddress)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">IP Address *</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="ipAddress" name="ipAddress" type="text" class="form-control" ng-model="server.ipAddress" ng-required="true" ng-maxlength="45" ng-pattern="ipRegex()" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.ipAddress, 'required')">Required</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.ipAddress, 'maxlength')">Too Long</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.ipAddress, 'pattern')">Invalid</small>
+                    <span ng-show="hasError(serverForm.ipAddress)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.ipNetmask), 'has-feedback': hasError(serverForm.ipNetmask)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">IP Netmask *</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="ipNetmask" name="ipNetmask" type="text" class="form-control" ng-model="server.ipNetmask" ng-required="true" ng-maxlength="45" ng-pattern="validations.ipRegex" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.ipNetmask, 'required')">Required</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.ipNetmask, 'maxlength')">Too Long</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.ipNetmask, 'pattern')">Invalid</small>
+                    <span ng-show="hasError(serverForm.ipNetmask)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.ipGateway), 'has-feedback': hasError(serverForm.ipGateway)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">IP Gateway *</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="ipGateway" name="ipGateway" type="text" class="form-control" ng-model="server.ipGateway" ng-required="true" ng-maxlength="45" ng-pattern="ipRegex()" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.ipGateway, 'required')">Required</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.ipGateway, 'maxlength')">Too Long</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.ipGateway, 'pattern')">Invalid</small>
+                    <span ng-show="hasError(serverForm.ipGateway)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.ip6Address), 'has-feedback': hasError(serverForm.ip6Address)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">IPv6 Address</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="ip6Address" name="ip6Address" type="text" class="form-control" ng-model="server.ip6Address" ng-maxlength="50" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.ip6Address, 'maxlength')">Too Long</small>
+                    <span ng-show="hasError(serverForm.ip6Address)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.ip6Gateway), 'has-feedback': hasError(serverForm.ip6Gateway)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">IPv6 Gateway</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="ip6Gateway" name="ip6Gateway" type="text" class="form-control" ng-model="server.ip6Gateway" ng-maxlength="50" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.ip6Gateway, 'maxlength')">Too Long</small>
+                    <span ng-show="hasError(serverForm.ip6Gateway)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.interfaceMtu), 'has-feedback': hasError(serverForm.interfaceMtu)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Interface MTU *</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="interfaceMtu" name="interfaceMtu" type="text" class="form-control" ng-model="server.interfaceMtu" ng-required="true" ng-maxlength="11" ng-pattern="/(^1500$|^9000$)/" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.interfaceMtu, 'required')">Required</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.interfaceMtu, 'maxlength')">Too Long</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.interfaceMtu, 'pattern')">1500 or 9000</small>
+                    <span ng-show="hasError(serverForm.interfaceMtu)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.rack), 'has-feedback': hasError(serverForm.rack)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Rack</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="rack" name="rack" type="text" class="form-control" ng-model="server.rack" ng-maxlength="64" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.rack, 'maxlength')">Too Long</small>
+                    <span ng-show="hasError(serverForm.rack)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.offlineReason), 'has-feedback': hasError(serverForm.offlineReason)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Offline Reason</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="offlineReason" name="offlineReason" type="text" class="form-control" ng-model="server.offlineReason" ng-maxlength="256" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.offlineReason, 'maxlength')">Too Long</small>
+                    <span ng-show="hasError(serverForm.offlineReason)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.mgmtIpAddress), 'has-feedback': hasError(serverForm.mgmtIpAddress)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Management IP Address</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="mgmtIpAddress" name="mgmtIpAddress" type="text" class="form-control" ng-model="server.mgmtIpAddress" ng-maxlength="50" ng-pattern="ipRegex()" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.mgmtIpAddress, 'maxlength')">Too Long</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.mgmtIpAddress, 'pattern')">Invalid</small>
+                    <span ng-show="hasError(serverForm.mgmtIpAddress)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.mgmtIpNetmask), 'has-feedback': hasError(serverForm.mgmtIpNetmask)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Management IP Netmask</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="mgmtIpNetmask" name="mgmtIpNetmask" type="text" class="form-control" ng-model="server.mgmtIpNetmask" ng-maxlength="45" ng-pattern="ipRegex()" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.mgmtIpNetmask, 'maxlength')">Too Long</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.mgmtIpNetmask, 'pattern')">Invalid</small>
+                    <span ng-show="hasError(serverForm.mgmtIpNetmask)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.mgmtIpGateway), 'has-feedback': hasError(serverForm.mgmtIpGateway)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Management IP Gateway</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="mgmtIpGateway" name="mgmtIpGateway" type="text" class="form-control" ng-model="server.mgmtIpGateway" ng-maxlength="45" ng-pattern="ipRegex()" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.mgmtIpGateway, 'maxlength')">Too Long</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.mgmtIpGateway, 'pattern')">Invalid</small>
+                    <span ng-show="hasError(serverForm.mgmtIpGateway)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.iloIpAddress), 'has-feedback': hasError(serverForm.iloIpAddress)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">ILO IP Address</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="iloIpAddress" name="iloIpAddress" type="text" class="form-control" ng-model="server.iloIpAddress" ng-maxlength="45" ng-pattern="ipRegex()" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.iloIpAddress, 'maxlength')">Too Long</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.iloIpAddress, 'pattern')">Invalid</small>
+                    <span ng-show="hasError(serverForm.iloIpAddress)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.iloIpNetmask), 'has-feedback': hasError(serverForm.iloIpNetmask)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">ILO IP Netmask</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="iloIpNetmask" name="iloIpNetmask" type="text" class="form-control" ng-model="server.iloIpNetmask" ng-maxlength="45" ng-pattern="ipRegex()" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.iloIpNetmask, 'maxlength')">Too Long</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.iloIpNetmask, 'pattern')">Invalid</small>
+                    <span ng-show="hasError(serverForm.iloIpNetmask)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.iloIpGateway), 'has-feedback': hasError(serverForm.iloIpGateway)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">ILO IP Gateway</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="iloIpGateway" name="iloIpGateway" type="text" class="form-control" ng-model="server.iloIpGateway" ng-maxlength="45" ng-pattern="ipRegex()" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.iloIpGateway, 'maxlength')">Too Long</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.iloIpGateway, 'pattern')">Invalid</small>
+                    <span ng-show="hasError(serverForm.iloIpGateway)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.iloUsername), 'has-feedback': hasError(serverForm.iloUsername)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">ILO Username</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="iloUsername" name="iloUsername" type="text" class="form-control" ng-model="server.iloUsername" ng-maxlength="45" ng-pattern="/^\S*$/" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.iloUsername, 'maxlength')">Too Long</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.iloUsername, 'pattern')">No Spaces</small>
+                    <span ng-show="hasError(serverForm.iloUsername)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.iloPassword), 'has-feedback': hasError(serverForm.iloPassword)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">ILO Password</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="iloPassword" name="iloPassword" type="text" class="form-control" ng-model="server.iloPassword" ng-maxlength="45" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.iloPassword, 'maxlength')">Too Long</small>
+                    <span ng-show="hasError(serverForm.iloPassword)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.routerHostName), 'has-feedback': hasError(serverForm.routerHostName)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Router Hostname</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="routerHostName" name="routerHostName" type="text" class="form-control" ng-model="server.routerHostName" ng-maxlength="256" ng-pattern="/^\S*$/" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.routerHostName, 'maxlength')">Too Long</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.routerHostName, 'pattern')">No Spaces</small>
+                    <span ng-show="hasError(serverForm.routerHostName)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.routerPortName), 'has-feedback': hasError(serverForm.routerPortName)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Router Port Name</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="routerPortName" name="routerPortName" type="text" class="form-control" ng-model="server.routerPortName" ng-maxlength="256" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.routerPortName, 'maxlength')">Too Long</small>
+                    <span ng-show="hasError(serverForm.routerPortName)" class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': hasError(serverForm.httpsPort), 'has-feedback': hasError(serverForm.httpsPort)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">HTTPS Port</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="httpsPort" name="httpsPort" type="text" class="form-control" ng-model="server.httpsPort" ng-maxlength="10" ng-pattern="/^\d+$/" autofocus>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.httpsPort, 'maxlength')">Too Long</small>
+                    <small class="input-error" ng-show="hasPropertyError(serverForm.httpsPort, 'pattern')">Number</small>
+                    <span ng-show="hasError(serverForm.httpsPort)" class="form-control-feedback"><i class="fa fa-times"></i></span>
                 </div>
             </div>
             <div class="form-group" ng-class="{'has-error': hasError(serverForm.cdn), 'has-feedback': hasError(serverForm.cdn)}">


[10/15] incubator-trafficcontrol git commit: adds /parameters/:id/cache-groups view

Posted by de...@apache.org.
adds /parameters/:id/cache-groups view


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

Branch: refs/heads/master
Commit: 40b90a5612e981cf2efa312d89b080a66a9421ad
Parents: 9ffa4f6
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Tue Mar 14 21:05:11 2017 -0600
Committer: Dewayne Richardson <de...@apache.org>
Committed: Thu Apr 6 14:41:34 2017 -0600

----------------------------------------------------------------------
 traffic_ops/experimental/ui/app/src/app.js      |  2 +
 .../ui/app/src/common/api/CacheGroupService.js  |  4 ++
 .../form/parameter/FormParameterController.js   |  4 ++
 .../form/parameter/form.parameter.tpl.html      |  1 +
 .../TableParameterCacheGroupsController.js      | 50 +++++++++++++++++
 .../modules/table/parameterCacheGroups/index.js | 21 +++++++
 .../table.parameterCacheGroups.tpl.html         | 59 ++++++++++++++++++++
 .../TableParameterProfilesController.js         |  2 +-
 .../admin/parameters/cacheGroups/index.js       | 42 ++++++++++++++
 9 files changed, 184 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/40b90a56/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 a3fa799..d6877f8 100644
--- a/traffic_ops/experimental/ui/app/src/app.js
+++ b/traffic_ops/experimental/ui/app/src/app.js
@@ -74,6 +74,7 @@ var trafficOps = angular.module('trafficOps', [
         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/cacheGroups').name,
         require('./modules/private/admin/parameters/edit').name,
         require('./modules/private/admin/parameters/list').name,
         require('./modules/private/admin/parameters/new').name,
@@ -226,6 +227,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/parameterCacheGroups').name,
         require('./common/modules/table/parameterProfiles').name,
         require('./common/modules/table/profileDeliveryServices').name,
         require('./common/modules/table/profileParameters').name,

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/40b90a56/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 2f30df0..fe26d15 100644
--- a/traffic_ops/experimental/ui/app/src/common/api/CacheGroupService.js
+++ b/traffic_ops/experimental/ui/app/src/common/api/CacheGroupService.js
@@ -88,6 +88,10 @@ var CacheGroupService = function(Restangular, locationUtils, messageModel) {
             );
     };
 
+    this.getParameterCacheGroups = function(paramId) {
+        // todo: this needs an api: /parameters/:id/cachegroups
+        return Restangular.one('parameters', paramId).getList('cachegroups');
+    };
 
 };
 

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/40b90a56/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 d398735..4de9b5a 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
@@ -33,6 +33,10 @@ var FormParameterController = function(parameter, $scope, $location, formUtils,
         $location.path($location.path() + '/profiles');
     };
 
+    $scope.viewCacheGroups = function() {
+        $location.path($location.path() + '/cache-groups');
+    };
+
     $scope.navigateToPath = locationUtils.navigateToPath;
 
     $scope.hasError = formUtils.hasError;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/40b90a56/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 caa2fdc..1958ce9 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
@@ -30,6 +30,7 @@ under the License.
                     <span class="caret"></span>
                 </button>
                 <ul class="dropdown-menu-right dropdown-menu" uib-dropdown-menu>
+                    <li role="menuitem"><a ng-click="viewCacheGroups()">View Cache Groups</a></li>
                     <li role="menuitem"><a ng-click="viewProfiles()">View Profiles</a></li>
                 </ul>
             </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/40b90a56/traffic_ops/experimental/ui/app/src/common/modules/table/parameterCacheGroups/TableParameterCacheGroupsController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/parameterCacheGroups/TableParameterCacheGroupsController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/parameterCacheGroups/TableParameterCacheGroupsController.js
new file mode 100644
index 0000000..ce4c855
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/parameterCacheGroups/TableParameterCacheGroupsController.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 TableParameterCacheGroupsController = function(parameter, cacheGroups, $scope, $state, locationUtils) {
+
+	$scope.parameter = parameter;
+
+	$scope.cacheGroups = cacheGroups;
+
+	$scope.addCacheGroup = function() {
+		alert('not hooked up yet: add cg to parameter');
+	};
+
+	$scope.removeCacheGroup = function() {
+		alert('not hooked up yet: remove cg from parameter');
+	};
+
+	$scope.refresh = function() {
+		$state.reload(); // reloads all the resolves for the view
+	};
+
+	$scope.navigateToPath = locationUtils.navigateToPath;
+
+	angular.element(document).ready(function () {
+		$('#cacheGroupsTable').dataTable({
+			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
+			"iDisplayLength": 100
+		});
+	});
+
+};
+
+TableParameterCacheGroupsController.$inject = ['parameter', 'cacheGroups', '$scope', '$state', 'locationUtils'];
+module.exports = TableParameterCacheGroupsController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/40b90a56/traffic_ops/experimental/ui/app/src/common/modules/table/parameterCacheGroups/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/parameterCacheGroups/index.js b/traffic_ops/experimental/ui/app/src/common/modules/table/parameterCacheGroups/index.js
new file mode 100644
index 0000000..6a5edaf
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/parameterCacheGroups/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.parameterCacheGroups', [])
+	.controller('TableParameterCacheGroupsController', require('./TableParameterCacheGroupsController'));

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/40b90a56/traffic_ops/experimental/ui/app/src/common/modules/table/parameterCacheGroups/table.parameterCacheGroups.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/parameterCacheGroups/table.parameterCacheGroups.tpl.html b/traffic_ops/experimental/ui/app/src/common/modules/table/parameterCacheGroups/table.parameterCacheGroups.tpl.html
new file mode 100644
index 0000000..3da948c
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/parameterCacheGroups/table.parameterCacheGroups.tpl.html
@@ -0,0 +1,59 @@
+<!--
+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">Cache Groups</li>
+        </ol>
+        <div class="pull-right">
+            <button class="btn btn-primary" title="Add Cache Group" ng-click="addCacheGroup()"><i class="fa fa-plus"></i></button>
+            <button class="btn btn-default" title="Refresh" ng-click="refresh()"><i class="fa fa-refresh"></i></button>
+        </div>
+        <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>
+                <th></th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr 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>
+                <td><button type="button" class="btn btn-link" title="Remove Cache Group" ng-click="removeCacheGroup()"><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/40b90a56/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
index 97e89a3..06d341a 100644
--- 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
@@ -38,7 +38,7 @@ var TableParameterProfilesController = function(parameter, parameterProfiles, $s
 	$scope.navigateToPath = locationUtils.navigateToPath;
 
 	angular.element(document).ready(function () {
-		$('#parametersTable').dataTable({
+		$('#parameterProfilesTable').dataTable({
 			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
 			"iDisplayLength": 100
 		});

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/40b90a56/traffic_ops/experimental/ui/app/src/modules/private/admin/parameters/cacheGroups/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/modules/private/admin/parameters/cacheGroups/index.js b/traffic_ops/experimental/ui/app/src/modules/private/admin/parameters/cacheGroups/index.js
new file mode 100644
index 0000000..f5476c6
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/modules/private/admin/parameters/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.parameters.cacheGroups', [])
+	.config(function($stateProvider, $urlRouterProvider) {
+		$stateProvider
+			.state('trafficOps.private.admin.parameters.cacheGroups', {
+				url: '/{parameterId}/cache-groups',
+				views: {
+					parametersContent: {
+						templateUrl: 'common/modules/table/parameterCacheGroups/table.parameterCacheGroups.tpl.html',
+						controller: 'TableParameterCacheGroupsController',
+						resolve: {
+							parameter: function($stateParams, parameterService) {
+								return parameterService.getParameter($stateParams.parameterId);
+							},
+							cacheGroups: function($stateParams, cacheGroupService) {
+								return cacheGroupService.getParameterCacheGroups($stateParams.parameterId);
+							}
+						}
+					}
+				}
+			})
+		;
+		$urlRouterProvider.otherwise('/');
+	});


[15/15] incubator-trafficcontrol git commit: upgrades to ui libraries

Posted by de...@apache.org.
upgrades to ui libraries


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

Branch: refs/heads/master
Commit: 31a9d1cb60d88e39b7fed06a1589d6e0ecd65e99
Parents: 9004421
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Thu Apr 6 11:43:21 2017 -0600
Committer: Dewayne Richardson <de...@apache.org>
Committed: Thu Apr 6 14:41:34 2017 -0600

----------------------------------------------------------------------
 traffic_ops/experimental/ui/bower.json | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/31a9d1cb/traffic_ops/experimental/ui/bower.json
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/bower.json b/traffic_ops/experimental/ui/bower.json
index 2f1fc62..a09ab06 100755
--- a/traffic_ops/experimental/ui/bower.json
+++ b/traffic_ops/experimental/ui/bower.json
@@ -3,14 +3,14 @@
     "version": "2.0.0",
     "description": "Traffic Ops UI",
     "dependencies": {
-        "angular": "1.5.0",
-        "angular-animate": "1.5.0",
-        "angular-resource": "1.5.0",
-        "angular-route": "1.5.0",
-        "angular-sanitize": "1.5.0",
+        "angular": "1.6.4",
+        "angular-animate": "1.6.4",
+        "angular-resource": "1.6.4",
+        "angular-route": "1.6.4",
+        "angular-sanitize": "1.6.4",
         "angular-bootstrap": "0.14.3",
         "angular-loading-bar": "0.8.0",
-        "angular-ui-router": "0.2.18",
+        "angular-ui-router": "0.4.2",
         "angular-jwt": "0.0.9",
         "bootstrap-sass-official": "3.3.6",
         "es5-shim": "4.5.6",


[12/15] incubator-trafficcontrol git commit: adds offline reason popover to all server tables

Posted by de...@apache.org.
adds offline reason popover to all server tables


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

Branch: refs/heads/master
Commit: 8b7a49fa3d0b51638aa0a20d82103458371dcf60
Parents: 40b90a5
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Tue Mar 14 21:51:17 2017 -0600
Committer: Dewayne Richardson <de...@apache.org>
Committed: Thu Apr 6 14:41:34 2017 -0600

----------------------------------------------------------------------
 .../TableCacheGroupServersController.js         |  8 +++--
 .../table.cacheGroupServers.tpl.html            |  5 ++-
 .../cdnServers/TableCDNServersController.js     |  8 +++--
 .../table/cdnServers/table.cdnServers.tpl.html  |  5 ++-
 .../TableDeliveryServiceServersController.js    |  8 +++--
 .../table.deliveryServiceServers.tpl.html       |  5 ++-
 .../TablePhysLocationServersController.js       |  8 +++--
 .../table.physLocationServers.tpl.html          |  5 ++-
 .../TableProfileServersController.js            |  8 +++--
 .../table.profileServers.tpl.html               |  5 ++-
 .../table/servers/TableServersController.js     |  8 +++--
 .../table/servers/table.servers.tpl.html        |  5 ++-
 .../TableStatusServersController.js             |  8 +++--
 .../statusServers/table.statusServers.tpl.html  |  5 ++-
 .../typeServers/TableTypeServersController.js   |  8 +++--
 .../typeServers/table.typeServers.tpl.html      |  5 ++-
 .../app/src/common/service/utils/ServerUtils.js | 33 ++++++++++++++++++++
 .../ui/app/src/common/service/utils/index.js    |  1 +
 18 files changed, 114 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/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 18740a3..9a97660 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
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableCacheGroupsServersController = function(cacheGroup, servers, $scope, $state, $uibModal, cacheGroupService, locationUtils) {
+var TableCacheGroupsServersController = function(cacheGroup, servers, $scope, $state, $uibModal, cacheGroupService, locationUtils, serverUtils) {
 
 	$scope.cacheGroup = cacheGroup;
 
@@ -101,6 +101,10 @@ var TableCacheGroupsServersController = function(cacheGroup, servers, $scope, $s
 
 	$scope.navigateToPath = locationUtils.navigateToPath;
 
+	$scope.isOffline = serverUtils.isOffline;
+
+	$scope.offlineReason = serverUtils.offlineReason;
+
 	angular.element(document).ready(function () {
 		$('#serversTable').dataTable({
 			"aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
@@ -110,5 +114,5 @@ var TableCacheGroupsServersController = function(cacheGroup, servers, $scope, $s
 
 };
 
-TableCacheGroupsServersController.$inject = ['cacheGroup', 'servers', '$scope', '$state', '$uibModal', 'cacheGroupService', 'locationUtils'];
+TableCacheGroupsServersController.$inject = ['cacheGroup', 'servers', '$scope', '$state', '$uibModal', 'cacheGroupService', 'locationUtils', 'serverUtils'];
 module.exports = TableCacheGroupsServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/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 b146972..ba792b6 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
@@ -65,7 +65,10 @@ under the License.
                 <td>{{server.physLocation}}</td>
                 <td>{{server.ipAddress}}</td>
                 <td>{{server.ip6Address}}</td>
-                <td>{{server.status}}</td>
+                <td>
+                    <span ng-show="!isOffline(server.status)">{{server.status}}</span>
+                    <span ng-show="isOffline(server.status)" uib-popover="{{offlineReason(server)}}" popover-title="Offline Reason" popover-trigger="mouseenter" popover-placement="bottom" popover-append-to-body="true">{{server.status}}</span>
+                </td>
                 <td>{{server.profile}}</td>
                 <td>{{server.iloIpAddress}}</td>
                 <td>{{server.iloIpGateway}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/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 1c3d1e9..787bf37 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
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableCDNServersController = function(cdn, servers, $scope, $state, locationUtils, cdnService) {
+var TableCDNServersController = function(cdn, servers, $scope, $state, locationUtils, serverUtils, cdnService) {
 
 	$scope.cdn = cdn;
 
@@ -49,6 +49,10 @@ var TableCDNServersController = function(cdn, servers, $scope, $state, locationU
 		$state.reload(); // reloads all the resolves for the view
 	};
 
+	$scope.isOffline = serverUtils.isOffline;
+
+	$scope.offlineReason = serverUtils.offlineReason;
+
 	$scope.navigateToPath = locationUtils.navigateToPath;
 
 	angular.element(document).ready(function () {
@@ -60,5 +64,5 @@ var TableCDNServersController = function(cdn, servers, $scope, $state, locationU
 
 };
 
-TableCDNServersController.$inject = ['cdn', 'servers', '$scope', '$state', 'locationUtils', 'cdnService'];
+TableCDNServersController.$inject = ['cdn', 'servers', '$scope', '$state', 'locationUtils', 'serverUtils', 'cdnService'];
 module.exports = TableCDNServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/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 9189f43..0b211e5 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
@@ -65,7 +65,10 @@ under the License.
                 <td>{{server.physLocation}}</td>
                 <td>{{server.ipAddress}}</td>
                 <td>{{server.ip6Address}}</td>
-                <td>{{server.status}}</td>
+                <td>
+                    <span ng-show="!isOffline(server.status)">{{server.status}}</span>
+                    <span ng-show="isOffline(server.status)" uib-popover="{{offlineReason(server)}}" popover-title="Offline Reason" popover-trigger="mouseenter" popover-placement="bottom" popover-append-to-body="true">{{server.status}}</span>
+                </td>
                 <td>{{server.profile}}</td>
                 <td>{{server.iloIpAddress}}</td>
                 <td>{{server.iloIpGateway}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceServers/TableDeliveryServiceServersController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceServers/TableDeliveryServiceServersController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceServers/TableDeliveryServiceServersController.js
index c8f082c..805fbea 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceServers/TableDeliveryServiceServersController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/deliveryServiceServers/TableDeliveryServiceServersController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableDeliveryServiceServersController = function(deliveryService, servers, $scope, $state, locationUtils) {
+var TableDeliveryServiceServersController = function(deliveryService, servers, $scope, $state, locationUtils, serverUtils) {
 
 	$scope.deliveryService = deliveryService;
 
@@ -35,6 +35,10 @@ var TableDeliveryServiceServersController = function(deliveryService, servers, $
 		$state.reload(); // reloads all the resolves for the view
 	};
 
+	$scope.isOffline = serverUtils.isOffline;
+
+	$scope.offlineReason = serverUtils.offlineReason;
+
 	$scope.navigateToPath = locationUtils.navigateToPath;
 
 	angular.element(document).ready(function () {
@@ -46,5 +50,5 @@ var TableDeliveryServiceServersController = function(deliveryService, servers, $
 
 };
 
-TableDeliveryServiceServersController.$inject = ['deliveryService', 'servers', '$scope', '$state', 'locationUtils'];
+TableDeliveryServiceServersController.$inject = ['deliveryService', 'servers', '$scope', '$state', 'locationUtils', 'serverUtils'];
 module.exports = TableDeliveryServiceServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/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 e3a9481..91feddc 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
@@ -65,7 +65,10 @@ under the License.
                 <td>{{server.physLocation}}</td>
                 <td>{{server.ipAddress}}</td>
                 <td>{{server.ip6Address}}</td>
-                <td>{{server.status}}</td>
+                <td>
+                    <span ng-show="!isOffline(server.status)">{{server.status}}</span>
+                    <span ng-show="isOffline(server.status)" uib-popover="{{offlineReason(server)}}" popover-title="Offline Reason" popover-trigger="mouseenter" popover-placement="bottom" popover-append-to-body="true">{{server.status}}</span>
+                </td>
                 <td>{{server.profile}}</td>
                 <td>{{server.iloIpAddress}}</td>
                 <td>{{server.iloIpGateway}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/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
index eb14902..3af755c 100644
--- 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
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TablePhysLocationServersController = function(physLocation, servers, $scope, $state, locationUtils) {
+var TablePhysLocationServersController = function(physLocation, servers, $scope, $state, locationUtils, serverUtils) {
 
 	$scope.physLocation = physLocation;
 
@@ -31,6 +31,10 @@ var TablePhysLocationServersController = function(physLocation, servers, $scope,
 		$state.reload(); // reloads all the resolves for the view
 	};
 
+	$scope.isOffline = serverUtils.isOffline;
+
+	$scope.offlineReason = serverUtils.offlineReason;
+
 	$scope.navigateToPath = locationUtils.navigateToPath;
 
 	angular.element(document).ready(function () {
@@ -42,5 +46,5 @@ var TablePhysLocationServersController = function(physLocation, servers, $scope,
 
 };
 
-TablePhysLocationServersController.$inject = ['physLocation', 'servers', '$scope', '$state', 'locationUtils'];
+TablePhysLocationServersController.$inject = ['physLocation', 'servers', '$scope', '$state', 'locationUtils', 'serverUtils'];
 module.exports = TablePhysLocationServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/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
index bef4077..7e99de4 100644
--- 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
@@ -63,7 +63,10 @@ under the License.
                 <td>{{server.physLocation}}</td>
                 <td>{{server.ipAddress}}</td>
                 <td>{{server.ip6Address}}</td>
-                <td>{{server.status}}</td>
+                <td>
+                    <span ng-show="!isOffline(server.status)">{{server.status}}</span>
+                    <span ng-show="isOffline(server.status)" uib-popover="{{offlineReason(server)}}" popover-title="Offline Reason" popover-trigger="mouseenter" popover-placement="bottom" popover-append-to-body="true">{{server.status}}</span>
+                </td>
                 <td>{{server.profile}}</td>
                 <td>{{server.iloIpAddress}}</td>
                 <td>{{server.iloIpGateway}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/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
index 4fd5f69..f84699a 100644
--- 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
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableProfileServersController = function(profile, servers, $scope, $state, locationUtils) {
+var TableProfileServersController = function(profile, servers, $scope, $state, locationUtils, serverUtils) {
 
 	$scope.profile = profile;
 
@@ -31,6 +31,10 @@ var TableProfileServersController = function(profile, servers, $scope, $state, l
 		$state.reload(); // reloads all the resolves for the view
 	};
 
+	$scope.isOffline = serverUtils.isOffline;
+
+	$scope.offlineReason = serverUtils.offlineReason;
+
 	$scope.navigateToPath = locationUtils.navigateToPath;
 
 	angular.element(document).ready(function () {
@@ -42,5 +46,5 @@ var TableProfileServersController = function(profile, servers, $scope, $state, l
 
 };
 
-TableProfileServersController.$inject = ['profile', 'servers', '$scope', '$state', 'locationUtils'];
+TableProfileServersController.$inject = ['profile', 'servers', '$scope', '$state', 'locationUtils', 'serverUtils'];
 module.exports = TableProfileServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/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
index e94b619..fcf64c7 100644
--- 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
@@ -63,7 +63,10 @@ under the License.
                 <td>{{server.physLocation}}</td>
                 <td>{{server.ipAddress}}</td>
                 <td>{{server.ip6Address}}</td>
-                <td>{{server.status}}</td>
+                <td>
+                    <span ng-show="!isOffline(server.status)">{{server.status}}</span>
+                    <span ng-show="isOffline(server.status)" uib-popover="{{offlineReason(server)}}" popover-title="Offline Reason" popover-trigger="mouseenter" popover-placement="bottom" popover-append-to-body="true">{{server.status}}</span>
+                </td>
                 <td>{{server.profile}}</td>
                 <td>{{server.iloIpAddress}}</td>
                 <td>{{server.iloIpGateway}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/traffic_ops/experimental/ui/app/src/common/modules/table/servers/TableServersController.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/modules/table/servers/TableServersController.js b/traffic_ops/experimental/ui/app/src/common/modules/table/servers/TableServersController.js
index b1c966e..bb98d28 100644
--- a/traffic_ops/experimental/ui/app/src/common/modules/table/servers/TableServersController.js
+++ b/traffic_ops/experimental/ui/app/src/common/modules/table/servers/TableServersController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableServersController = function(servers, $scope, $state, locationUtils) {
+var TableServersController = function(servers, $scope, $state, locationUtils, serverUtils) {
 
     $scope.servers = servers;
 
@@ -37,6 +37,10 @@ var TableServersController = function(servers, $scope, $state, locationUtils) {
         $state.reload(); // reloads all the resolves for the view
     };
 
+    $scope.isOffline = serverUtils.isOffline;
+
+    $scope.offlineReason = serverUtils.offlineReason;
+
     angular.element(document).ready(function () {
         $('#serversTable').dataTable({
             "aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
@@ -46,5 +50,5 @@ var TableServersController = function(servers, $scope, $state, locationUtils) {
 
 };
 
-TableServersController.$inject = ['servers', '$scope', '$state', 'locationUtils'];
+TableServersController.$inject = ['servers', '$scope', '$state', 'locationUtils', 'serverUtils'];
 module.exports = TableServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/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 137f046..c8d793e 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
@@ -71,7 +71,10 @@ under the License.
                 <td>{{server.physLocation}}</td>
                 <td>{{server.ipAddress}}</td>
                 <td>{{server.ip6Address}}</td>
-                <td>{{server.status}}</td>
+                <td>
+                    <span ng-show="!isOffline(server.status)">{{server.status}}</span>
+                    <span ng-show="isOffline(server.status)" uib-popover="{{offlineReason(server)}}" popover-title="Offline Reason" popover-trigger="mouseenter" popover-placement="bottom" popover-append-to-body="true">{{server.status}}</span>
+                </td>
                 <td>{{server.profile}}</td>
                 <td>{{server.iloIpAddress}}</td>
                 <td>{{server.iloIpGateway}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/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
index 8ba4daf..dd06a76 100644
--- 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
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableStatusServersController = function(status, servers, $scope, $state, locationUtils) {
+var TableStatusServersController = function(status, servers, $scope, $state, locationUtils, serverUtils) {
 
 	$scope.status = status;
 
@@ -31,6 +31,10 @@ var TableStatusServersController = function(status, servers, $scope, $state, loc
 		$state.reload(); // reloads all the resolves for the view
 	};
 
+	$scope.isOffline = serverUtils.isOffline;
+
+	$scope.offlineReason = serverUtils.offlineReason;
+
 	$scope.navigateToPath = locationUtils.navigateToPath;
 
 	angular.element(document).ready(function () {
@@ -42,5 +46,5 @@ var TableStatusServersController = function(status, servers, $scope, $state, loc
 
 };
 
-TableStatusServersController.$inject = ['status', 'servers', '$scope', '$state', 'locationUtils'];
+TableStatusServersController.$inject = ['status', 'servers', '$scope', '$state', 'locationUtils', 'serverUtils'];
 module.exports = TableStatusServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/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
index 815d82f..9659649 100644
--- 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
@@ -63,7 +63,10 @@ under the License.
                 <td>{{server.physLocation}}</td>
                 <td>{{server.ipAddress}}</td>
                 <td>{{server.ip6Address}}</td>
-                <td>{{server.status}}</td>
+                <td>
+                    <span ng-show="!isOffline(server.status)">{{server.status}}</span>
+                    <span ng-show="isOffline(server.status)" uib-popover="{{offlineReason(server)}}" popover-title="Offline Reason" popover-trigger="mouseenter" popover-placement="bottom" popover-append-to-body="true">{{server.status}}</span>
+                </td>
                 <td>{{server.profile}}</td>
                 <td>{{server.iloIpAddress}}</td>
                 <td>{{server.iloIpGateway}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/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
index 786344e..30f1fa4 100644
--- 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
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableTypeServersController = function(type, servers, $scope, $state, locationUtils) {
+var TableTypeServersController = function(type, servers, $scope, $state, locationUtils, serverUtils) {
 
 	$scope.type = type;
 
@@ -31,6 +31,10 @@ var TableTypeServersController = function(type, servers, $scope, $state, locatio
 		$state.reload(); // reloads all the resolves for the view
 	};
 
+	$scope.isOffline = serverUtils.isOffline;
+
+	$scope.offlineReason = serverUtils.offlineReason;
+
 	$scope.navigateToPath = locationUtils.navigateToPath;
 
 	angular.element(document).ready(function () {
@@ -42,5 +46,5 @@ var TableTypeServersController = function(type, servers, $scope, $state, locatio
 
 };
 
-TableTypeServersController.$inject = ['type', 'servers', '$scope', '$state', 'locationUtils'];
+TableTypeServersController.$inject = ['type', 'servers', '$scope', '$state', 'locationUtils', 'serverUtils'];
 module.exports = TableTypeServersController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/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
index 99ab56a..b15c246 100644
--- 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
@@ -63,7 +63,10 @@ under the License.
                 <td>{{server.physLocation}}</td>
                 <td>{{server.ipAddress}}</td>
                 <td>{{server.ip6Address}}</td>
-                <td>{{server.status}}</td>
+                <td>
+                    <span ng-show="!isOffline(server.status)">{{server.status}}</span>
+                    <span ng-show="isOffline(server.status)" uib-popover="{{offlineReason(server)}}" popover-title="Offline Reason" popover-trigger="mouseenter" popover-placement="bottom" popover-append-to-body="true">{{server.status}}</span>
+                </td>
                 <td>{{server.profile}}</td>
                 <td>{{server.iloIpAddress}}</td>
                 <td>{{server.iloIpGateway}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/traffic_ops/experimental/ui/app/src/common/service/utils/ServerUtils.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/service/utils/ServerUtils.js b/traffic_ops/experimental/ui/app/src/common/service/utils/ServerUtils.js
new file mode 100644
index 0000000..a4d2c4c
--- /dev/null
+++ b/traffic_ops/experimental/ui/app/src/common/service/utils/ServerUtils.js
@@ -0,0 +1,33 @@
+/*
+ * 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 ServerUtils = function() {
+
+	this.isOffline = function(status) {
+		return (status == 'OFFLINE' || status == 'ADMIN_DOWN');
+	};
+
+	this.offlineReason = function(server) {
+		return (server.offlineReason) ? server.offlineReason : 'None';
+	};
+
+};
+
+ServerUtils.$inject = [];
+module.exports = ServerUtils;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8b7a49fa/traffic_ops/experimental/ui/app/src/common/service/utils/index.js
----------------------------------------------------------------------
diff --git a/traffic_ops/experimental/ui/app/src/common/service/utils/index.js b/traffic_ops/experimental/ui/app/src/common/service/utils/index.js
index c9d1977..82f5bb7 100644
--- a/traffic_ops/experimental/ui/app/src/common/service/utils/index.js
+++ b/traffic_ops/experimental/ui/app/src/common/service/utils/index.js
@@ -20,4 +20,5 @@
 module.exports = angular.module('trafficOps.utils', [])
     .service('formUtils', require('./FormUtils'))
     .service('locationUtils', require('./LocationUtils'))
+    .service('serverUtils', require('./serverUtils'))
     .service('stringUtils', require('./StringUtils'));