tp v2 ui tweaks ranging from rearranging form items to stronger ui validation 
to better confirmation messages


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

Branch: refs/heads/master
Commit: 9b26ecee6f8c9fc2402a22352456a15ad571a219
Parents: c7fe073
Author: Jeremy Mitchell <[email protected]>
Authored: Fri Jul 14 15:33:27 2017 -0600
Committer: Dewayne Richardson <[email protected]>
Committed: Tue Jul 18 08:53:06 2017 -0600

----------------------------------------------------------------------
 .../dialog/confirm/DialogConfirmController.js   |   6 +-
 .../dialog/confirm/dialog.confirm.tpl.html      |   6 +-
 .../form/cacheGroup/form.cacheGroup.tpl.html    |  22 +--
 .../FormDeliveryServiceController.js            |  26 +++-
 .../edit/FormEditDeliveryServiceController.js   |   6 +-
 .../form.deliveryService.DNS.tpl.html           |  53 ++++----
 .../form.deliveryService.HTTP.tpl.html          |  52 ++++---
 .../form.deliveryService.Steering.tpl.html      |  22 +--
 .../form.deliveryService.anyMap.tpl.html        |  67 ++++++---
 .../new/FormNewDeliveryServiceController.js     |   6 +-
 .../form/parameter/FormParameterController.js   |   5 +
 .../edit/FormEditParameterController.js         |  45 +++++-
 .../form/parameter/form.parameter.tpl.html      |   9 +-
 .../parameter/new/FormNewParameterController.js |   2 +-
 .../modules/form/server/form.server.tpl.html    | 136 ++++++++-----------
 .../src/common/modules/header/header.tpl.html   |   2 +-
 .../modules/navigation/NavigationController.js  |   2 +-
 .../modules/navigation/navigation.tpl.html      |   4 +-
 .../table.cacheGroupParameters.tpl.html         |   2 +
 .../table.cdnDeliveryServices.tpl.html          |   2 +
 .../table.deliveryServices.tpl.html             |   2 +
 .../TableParameterProfilesController.js         |  57 +++++++-
 .../table.parameterProfiles.tpl.html            |   2 +-
 .../table/parameters/table.parameters.tpl.html  |   2 +
 .../table.profileDeliveryServices.tpl.html      |   2 +
 .../TableProfileParametersController.js         |  58 +++++++-
 .../table.profileParameters.tpl.html            |   6 +-
 .../table.serverDeliveryServices.tpl.html       |   2 +
 .../table.typeDeliveryServices.tpl.html         |   2 +
 .../table.userDeliveryServices.tpl.html         |   2 +
 .../modules/table/users/table.users.tpl.html    |   2 +
 .../cacheGroups/widget.cacheGroups.tpl.html     |   5 -
 .../widget/capacity/widget.capacity.tpl.html    |   4 -
 .../widget/cdnChart/widget.cdnChart.tpl.html    |   4 -
 .../changeLogs/widget.changeLogs.tpl.html       |   6 +-
 .../widget/routing/widget.routing.tpl.html      |   4 -
 .../app/src/traffic_portal_properties.json      |   9 +-
 37 files changed, 410 insertions(+), 234 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9b26ecee/traffic_portal/app/src/common/modules/dialog/confirm/DialogConfirmController.js
----------------------------------------------------------------------
diff --git 
a/traffic_portal/app/src/common/modules/dialog/confirm/DialogConfirmController.js
 
b/traffic_portal/app/src/common/modules/dialog/confirm/DialogConfirmController.js
index c936647..3c7cb37 100644
--- 
a/traffic_portal/app/src/common/modules/dialog/confirm/DialogConfirmController.js
+++ 
b/traffic_portal/app/src/common/modules/dialog/confirm/DialogConfirmController.js
@@ -17,10 +17,12 @@
  * under the License.
  */
 
-var DialogConfirmController = function(params, $scope, $uibModalInstance) {
+var DialogConfirmController = function(params, $scope, $sce, 
$uibModalInstance) {
 
     $scope.params = params;
 
+    $scope.message = $sce.trustAsHtml(params.message);
+
     $scope.yes = function() {
         $uibModalInstance.close();
     };
@@ -31,5 +33,5 @@ var DialogConfirmController = function(params, $scope, 
$uibModalInstance) {
 
 };
 
-DialogConfirmController.$inject = ['params', '$scope', '$uibModalInstance'];
+DialogConfirmController.$inject = ['params', '$scope', '$sce', 
'$uibModalInstance'];
 module.exports = DialogConfirmController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9b26ecee/traffic_portal/app/src/common/modules/dialog/confirm/dialog.confirm.tpl.html
----------------------------------------------------------------------
diff --git 
a/traffic_portal/app/src/common/modules/dialog/confirm/dialog.confirm.tpl.html 
b/traffic_portal/app/src/common/modules/dialog/confirm/dialog.confirm.tpl.html
index 235cbb3..f9a4a9f 100644
--- 
a/traffic_portal/app/src/common/modules/dialog/confirm/dialog.confirm.tpl.html
+++ 
b/traffic_portal/app/src/common/modules/dialog/confirm/dialog.confirm.tpl.html
@@ -22,9 +22,9 @@ under the License.
     <h4 class="modal-title">{{::params.title}}</h4>
 </div>
 <div class="modal-body">
-    <p>{{::params.message}}</p>
+    <p ng-bind-html="message"></p>
 </div>
 <div class="modal-footer">
-    <button class="btn action-btn" ng-click="no()">No</button>
-    <button class="btn btn-link" ng-click="yes()">Yes</button>
+    <button class="btn btn-primary" ng-click="no()">No</button>
+    <button class="btn btn-default" ng-click="yes()">Yes</button>
 </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9b26ecee/traffic_portal/app/src/common/modules/form/cacheGroup/form.cacheGroup.tpl.html
----------------------------------------------------------------------
diff --git 
a/traffic_portal/app/src/common/modules/form/cacheGroup/form.cacheGroup.tpl.html
 
b/traffic_portal/app/src/common/modules/form/cacheGroup/form.cacheGroup.tpl.html
index 2965029..c68be1d 100644
--- 
a/traffic_portal/app/src/common/modules/form/cacheGroup/form.cacheGroup.tpl.html
+++ 
b/traffic_portal/app/src/common/modules/form/cacheGroup/form.cacheGroup.tpl.html
@@ -72,8 +72,17 @@ under the License.
                     <span ng-show="hasError(cacheGroupForm.shortName)" 
class="form-control-feedback"><i class="fa fa-times"></i></span>
                 </div>
             </div>
+            <div class="form-group" ng-class="{'has-error': 
hasError(cacheGroupForm.type), 'has-feedback': hasError(cacheGroupForm.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="cacheGroup.typeId" ng-options="type.id as type.name for type in 
types" required>
+                        <option value="">Select...</option>
+                    </select>
+                    <small class="input-error" 
ng-show="hasPropertyError(cacheGroupForm.type, 'required')">Required</small>
+                </div>
+            </div>
             <div class="form-group" ng-class="{'has-error': 
hasError(cacheGroupForm.latitude), 'has-feedback': 
hasError(cacheGroupForm.latitude)}">
-                <label class="control-label col-md-2 col-sm-2 
col-xs-12">Latitude *</label>
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Geo 
Magnetic Latitude *</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">
                     <input id="latitude" name="latitude" type="text" 
class="form-control" ng-model="cacheGroup.latitude" 
ng-pattern="/^[-+]?[0-9]*\.?[0-9]+$/" autofocus>
                     <small class="input-error" 
ng-show="hasPropertyError(cacheGroupForm.latitude, 'pattern')">Invalid 
coordinate</small>
@@ -81,22 +90,13 @@ under the License.
                 </div>
             </div>
             <div class="form-group" ng-class="{'has-error': 
hasError(cacheGroupForm.longitude), 'has-feedback': 
hasError(cacheGroupForm.longitude)}">
-                <label class="control-label col-md-2 col-sm-2 
col-xs-12">Longitude *</label>
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Geo 
Magnetic Longitude *</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">
                     <input id="longitude" name="longitude" type="text" 
class="form-control" ng-model="cacheGroup.longitude" 
ng-pattern="/^[-+]?[0-9]*\.?[0-9]+$/" autofocus>
                     <small class="input-error" 
ng-show="hasPropertyError(cacheGroupForm.longitude, 'pattern')">Invalid 
coordinate</small>
                     <span ng-show="hasError(cacheGroupForm.longitude)" 
class="form-control-feedback"><i class="fa fa-times"></i></span>
                 </div>
             </div>
-            <div class="form-group" ng-class="{'has-error': 
hasError(cacheGroupForm.type), 'has-feedback': hasError(cacheGroupForm.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="cacheGroup.typeId" ng-options="type.id as type.name for type in 
types" required>
-                        <option value="">Select...</option>
-                    </select>
-                    <small class="input-error" 
ng-show="hasPropertyError(cacheGroupForm.type, 'required')">Required</small>
-                </div>
-            </div>
             <div class="form-group" ng-class="{'has-error': 
hasError(cacheGroupForm.parentCacheGroup), 'has-feedback': 
hasError(cacheGroupForm.parentCacheGroup)}">
                 <label class="control-label col-md-2 col-sm-2 
col-xs-12">Parent Cache Group *</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9b26ecee/traffic_portal/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js
----------------------------------------------------------------------
diff --git 
a/traffic_portal/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js
 
b/traffic_portal/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js
index 08a94ed..b822ce0 100644
--- 
a/traffic_portal/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js
+++ 
b/traffic_portal/app/src/common/modules/form/deliveryService/FormDeliveryServiceController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var FormDeliveryServiceController = function(deliveryService, types, $scope, 
$location, formUtils, locationUtils, cdnService, profileService, typeService) {
+var FormDeliveryServiceController = function(deliveryService, type, types, 
$scope, $location, formUtils, locationUtils, cdnService, profileService, 
tenantService) {
 
     var getCDNs = function() {
         cdnService.getCDNs()
@@ -35,9 +35,28 @@ var FormDeliveryServiceController = 
function(deliveryService, types, $scope, $lo
             });
     };
 
+    var getTenants = function() {
+        tenantService.getTenants()
+            .then(function(result) {
+                $scope.tenants = result;
+            });
+    };
+
     $scope.deliveryService = deliveryService;
 
-    $scope.types = types;
+    $scope.types = _.filter(types, function(currentType) {
+        var category;
+        if (type.indexOf('ANY_MAP') != -1) {
+            category = 'ANY_MAP';
+        } else if (type.indexOf('DNS') != -1) {
+            category = 'DNS';
+        } else if (type.indexOf('HTTP') != -1) {
+            category = 'HTTP';
+        } else if (type.indexOf('STEERING') != -1) {
+            category = 'STEERING';
+        }
+        return currentType.name.indexOf(category) != -1;
+    });
 
     $scope.falseTrue = [
         { value: false, label: 'false' },
@@ -156,10 +175,11 @@ var FormDeliveryServiceController = 
function(deliveryService, types, $scope, $lo
     var init = function () {
         getCDNs();
         getProfiles();
+        getTenants();
     };
     init();
 
 };
 
-FormDeliveryServiceController.$inject = ['deliveryService', 'types', '$scope', 
'$location', 'formUtils', 'locationUtils', 'cdnService', 'profileService', 
'typeService'];
+FormDeliveryServiceController.$inject = ['deliveryService', 'type', 'types', 
'$scope', '$location', 'formUtils', 'locationUtils', 'cdnService', 
'profileService', 'tenantService'];
 module.exports = FormDeliveryServiceController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9b26ecee/traffic_portal/app/src/common/modules/form/deliveryService/edit/FormEditDeliveryServiceController.js
----------------------------------------------------------------------
diff --git 
a/traffic_portal/app/src/common/modules/form/deliveryService/edit/FormEditDeliveryServiceController.js
 
b/traffic_portal/app/src/common/modules/form/deliveryService/edit/FormEditDeliveryServiceController.js
index ba5b257..2473cb1 100644
--- 
a/traffic_portal/app/src/common/modules/form/deliveryService/edit/FormEditDeliveryServiceController.js
+++ 
b/traffic_portal/app/src/common/modules/form/deliveryService/edit/FormEditDeliveryServiceController.js
@@ -19,12 +19,8 @@
 
 var FormEditDeliveryServiceController = function(deliveryService, type, types, 
$scope, $controller, $uibModal, $anchorScroll, locationUtils, 
deliveryServiceService) {
 
-       var filteredTypes = _.filter(types, function(currentType) {
-               return currentType.name.indexOf(type) != -1;
-       });
-
        // extends the FormDeliveryServiceController to inherit common methods
-       angular.extend(this, $controller('FormDeliveryServiceController', { 
deliveryService: deliveryService, types: filteredTypes, $scope: $scope }));
+       angular.extend(this, $controller('FormDeliveryServiceController', { 
deliveryService: deliveryService, type: type, types: types, $scope: $scope }));
 
        var deleteDeliveryService = function(deliveryService) {
                deliveryServiceService.deleteDeliveryService(deliveryService.id)

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9b26ecee/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.DNS.tpl.html
----------------------------------------------------------------------
diff --git 
a/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.DNS.tpl.html
 
b/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.DNS.tpl.html
index dddef6f..347a320 100644
--- 
a/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.DNS.tpl.html
+++ 
b/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.DNS.tpl.html
@@ -63,10 +63,19 @@ under the License.
                 </div>
             </div>
 
+            <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.tenantId), 'has-feedback': 
hasError(deliveryServiceForm.tenantId)}">
+                <label class="control-label col-md-2 col-sm-2 
col-xs-12">Tenant</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <select id="tenantId" name="tenantId" class="form-control" 
ng-model="deliveryService.tenantId" ng-options="tenant.id as tenant.name for 
tenant in tenants">
+                        <option value="">Select...</option>
+                    </select>
+                </div>
+            </div>
+
             <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.xmlId), 'has-feedback': 
hasError(deliveryServiceForm.xmlId)}">
                 <label class="control-label col-md-2 col-sm-2 col-xs-12">XML 
ID *</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">
-                    <input id="xmlId" name="xmlId" type="text" 
class="form-control" ng-model="deliveryService.xmlId" ng-required="true" 
ng-maxlength="48" ng-pattern="/^\S*$/" autofocus>
+                    <input id="xmlId" name="xmlId" type="text" 
class="form-control" placeholder="eg. xyz-video" 
ng-model="deliveryService.xmlId" ng-required="true" ng-maxlength="48" 
ng-pattern="/^\S*$/" autofocus>
                     <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.xmlId, 
'required')">Required</small>
                     <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.xmlId, 'maxlength')">Too 
Long</small>
                     <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.xmlId, 'pattern')">No 
spaces</small>
@@ -136,6 +145,14 @@ under the License.
                 </div>
             </div>
 
+            <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.geoProvider), 'has-feedback': 
hasError(deliveryServiceForm.geoProvider)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Geo 
Provider *</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <select id="geoProvider" name="geoProvider" 
class="form-control" ng-model="deliveryService.geoProvider" 
ng-options="gp.value as gp.label for gp in geoProviders" required></select>
+                    <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.geoProvider, 
'required')">Required</small>
+                </div>
+            </div>
+
             <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.geoLimit), 'has-feedback': 
hasError(deliveryServiceForm.geoLimit)}">
                 <label class="control-label col-md-2 col-sm-2 col-xs-12">Geo 
Limit *</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">
@@ -153,14 +170,6 @@ under the License.
                 </div>
             </div>
 
-            <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.geoProvider), 'has-feedback': 
hasError(deliveryServiceForm.geoProvider)}">
-                <label class="control-label col-md-2 col-sm-2 col-xs-12">Geo 
Provider *</label>
-                <div class="col-md-10 col-sm-10 col-xs-12">
-                    <select id="geoProvider" name="geoProvider" 
class="form-control" ng-model="deliveryService.geoProvider" 
ng-options="gp.value as gp.label for gp in geoProviders" required></select>
-                    <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.geoProvider, 
'required')">Required</small>
-                </div>
-            </div>
-
             <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.geolimitRedirectUrl), 'has-feedback': 
hasError(deliveryServiceForm.geolimitRedirectUrl)}">
                 <label class="control-label col-md-2 col-sm-2 col-xs-12">Geo 
Limit Redirect URL</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">
@@ -226,7 +235,7 @@ under the License.
             <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.maxDNSAnswers), 'has-feedback': 
hasError(deliveryServiceForm.maxDNSAnswers)}">
                 <label class="control-label col-md-2 col-sm-2 col-xs-12">Max 
DNS Answers</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">
-                    <input id="maxDNSAnswers" name="maxDNSAnswers" type="text" 
class="form-control" ng-model="deliveryService.maxDNSAnswers" ng-maxlength="11" 
autofocus>
+                    <input id="maxDNSAnswers" name="maxDNSAnswers" type="text" 
class="form-control" placeholder="Max number of IP addresses in DNS answer (0 
means all)" ng-model="deliveryService.maxDNSAnswers" ng-maxlength="11" 
autofocus>
                     <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.maxDNSAnswers, 'maxlength')">Too 
Long</small>
                     <span 
ng-show="hasError(deliveryServiceForm.maxDNSAnswers)" 
class="form-control-feedback"><i class="fa fa-times"></i></span>
                 </div>
@@ -261,7 +270,7 @@ 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">Profile</label>
+                <label class="control-label col-md-2 col-sm-2 
col-xs-12">Delivery Service 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">
                         <option value="">Select...</option>
@@ -272,8 +281,9 @@ under the License.
             <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.globalMaxMbps), 'has-feedback': 
hasError(deliveryServiceForm.globalMaxMbps)}">
                 <label class="control-label col-md-2 col-sm-2 
col-xs-12">Global Max Mbps</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">
-                    <input id="globalMaxMbps" name="globalMaxMbps" type="text" 
class="form-control" ng-model="deliveryService.globalMaxMbps" ng-maxlength="11" 
autofocus>
+                    <input id="globalMaxMbps" name="globalMaxMbps" type="text" 
class="form-control" placeholder="Max bits per second allowed globally (4T or 
500M)" ng-model="deliveryService.globalMaxMbps" ng-maxlength="11" 
ng-pattern="/(^4T$|^500M$)/" autofocus>
                     <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.globalMaxMbps, 'maxlength')">Too 
Long</small>
+                    <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.globalMaxMbps, 'pattern')">4T or 
500M</small>
                     <span 
ng-show="hasError(deliveryServiceForm.globalMaxMbps)" 
class="form-control-feedback"><i class="fa fa-times"></i></span>
                 </div>
             </div>
@@ -281,7 +291,7 @@ under the License.
             <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.globalMaxTps), 'has-feedback': 
hasError(deliveryServiceForm.globalMaxTps)}">
                 <label class="control-label col-md-2 col-sm-2 
col-xs-12">Global Max TPS</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">
-                    <input id="globalMaxTps" name="globalMaxTps" type="text" 
class="form-control" ng-model="deliveryService.globalMaxTps" ng-maxlength="11" 
autofocus>
+                    <input id="globalMaxTps" name="globalMaxTps" type="text" 
class="form-control" placeholder="Max transactions per second allowed globally" 
ng-model="deliveryService.globalMaxTps" ng-maxlength="11" autofocus>
                     <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.globalMaxTps, 'maxlength')">Too 
Long</small>
                     <span ng-show="hasError(deliveryServiceForm.globalMaxTps)" 
class="form-control-feedback"><i class="fa fa-times"></i></span>
                 </div>
@@ -424,23 +434,6 @@ under the License.
                 </div>
             </div>
 
-            <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.sslKeyVersion), 'has-feedback': 
hasError(deliveryServiceForm.sslKeyVersion)}">
-                <label class="control-label col-md-2 col-sm-2 col-xs-12">SSL 
Key Version</label>
-                <div class="col-md-10 col-sm-10 col-xs-12">
-                    <input id="sslKeyVersion" name="sslKeyVersion" type="text" 
class="form-control" ng-model="deliveryService.sslKeyVersion" ng-maxlength="11" 
autofocus>
-                    <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.sslKeyVersion, 'maxlength')">Too 
Long</small>
-                    <span 
ng-show="hasError(deliveryServiceForm.sslKeyVersion)" 
class="form-control-feedback"><i class="fa fa-times"></i></span>
-                </div>
-            </div>
-
-            <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.regionalGeoBlocking), 'has-feedback': 
hasError(deliveryServiceForm.regionalGeoBlocking)}">
-                <label class="control-label col-md-2 col-sm-2 
col-xs-12">Regional Geoblocking *</label>
-                <div class="col-md-10 col-sm-10 col-xs-12">
-                    <select id="regionalGeoBlocking" 
name="regionalGeoBlocking" class="form-control" 
ng-model="deliveryService.regionalGeoBlocking" ng-options="x.value as x.label 
for x in falseTrue" required></select>
-                    <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.regionalGeoBlocking, 
'required')">Required</small>
-                </div>
-            </div>
-
             <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.logsEnabled), 'has-feedback': 
hasError(deliveryServiceForm.logsEnabled)}">
                 <label class="control-label col-md-2 col-sm-2 col-xs-12">Logs 
Enabled *</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9b26ecee/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.HTTP.tpl.html
----------------------------------------------------------------------
diff --git 
a/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.HTTP.tpl.html
 
b/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.HTTP.tpl.html
index f11079a..5255cbd 100644
--- 
a/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.HTTP.tpl.html
+++ 
b/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.HTTP.tpl.html
@@ -63,10 +63,19 @@ under the License.
                 </div>
             </div>
 
+            <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.tenantId), 'has-feedback': 
hasError(deliveryServiceForm.tenantId)}">
+                <label class="control-label col-md-2 col-sm-2 
col-xs-12">Tenant</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <select id="tenantId" name="tenantId" class="form-control" 
ng-model="deliveryService.tenantId" ng-options="tenant.id as tenant.name for 
tenant in tenants">
+                        <option value="">Select...</option>
+                    </select>
+                </div>
+            </div>
+
             <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.xmlId), 'has-feedback': 
hasError(deliveryServiceForm.xmlId)}">
                 <label class="control-label col-md-2 col-sm-2 col-xs-12">XML 
ID *</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">
-                    <input id="xmlId" name="xmlId" type="text" 
class="form-control" ng-model="deliveryService.xmlId" ng-required="true" 
ng-maxlength="48" ng-pattern="/^\S*$/" autofocus>
+                    <input id="xmlId" name="xmlId" type="text" 
class="form-control" placeholder="eg. xyz-video" 
ng-model="deliveryService.xmlId" ng-required="true" ng-maxlength="48" 
ng-pattern="/^\S*$/" autofocus>
                     <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.xmlId, 
'required')">Required</small>
                     <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.xmlId, 'maxlength')">Too 
Long</small>
                     <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.xmlId, 'pattern')">No 
spaces</small>
@@ -136,6 +145,14 @@ under the License.
                 </div>
             </div>
 
+            <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.geoProvider), 'has-feedback': 
hasError(deliveryServiceForm.geoProvider)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Geo 
Provider *</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <select id="geoProvider" name="geoProvider" 
class="form-control" ng-model="deliveryService.geoProvider" 
ng-options="gp.value as gp.label for gp in geoProviders" required></select>
+                    <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.geoProvider, 
'required')">Required</small>
+                </div>
+            </div>
+
             <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.geoLimit), 'has-feedback': 
hasError(deliveryServiceForm.geoLimit)}">
                 <label class="control-label col-md-2 col-sm-2 col-xs-12">Geo 
Limit *</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">
@@ -153,14 +170,6 @@ under the License.
                 </div>
             </div>
 
-            <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.geoProvider), 'has-feedback': 
hasError(deliveryServiceForm.geoProvider)}">
-                <label class="control-label col-md-2 col-sm-2 col-xs-12">Geo 
Provider *</label>
-                <div class="col-md-10 col-sm-10 col-xs-12">
-                    <select id="geoProvider" name="geoProvider" 
class="form-control" ng-model="deliveryService.geoProvider" 
ng-options="gp.value as gp.label for gp in geoProviders" required></select>
-                    <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.geoProvider, 
'required')">Required</small>
-                </div>
-            </div>
-
             <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.geolimitRedirectUrl), 'has-feedback': 
hasError(deliveryServiceForm.geolimitRedirectUrl)}">
                 <label class="control-label col-md-2 col-sm-2 col-xs-12">Geo 
Limit Redirect URL</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">
@@ -180,6 +189,15 @@ under the License.
                 </div>
             </div>
 
+            <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.dnsBypassTtl), 'has-feedback': 
hasError(deliveryServiceForm.dnsBypassTtl)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">DNS 
Bypass TTL</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="dnsBypassTtl" name="dnsBypassTtl" type="text" 
class="form-control" ng-model="deliveryService.dnsBypassTtl" ng-maxlength="11" 
autofocus>
+                    <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.dnsBypassTtl, 'maxlength')">Too 
Long</small>
+                    <span ng-show="hasError(deliveryServiceForm.dnsBypassTtl)" 
class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+
             <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.ccrDnsTtl), 'has-feedback': 
hasError(deliveryServiceForm.ccrDnsTtl)}">
                 <label class="control-label col-md-2 col-sm-2 
col-xs-12">Delivery Service DNS TTL</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">
@@ -233,7 +251,7 @@ 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">Profile</label>
+                <label class="control-label col-md-2 col-sm-2 
col-xs-12">Delivery Service 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">
                         <option value="">Select...</option>
@@ -244,8 +262,9 @@ under the License.
             <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.globalMaxMbps), 'has-feedback': 
hasError(deliveryServiceForm.globalMaxMbps)}">
                 <label class="control-label col-md-2 col-sm-2 
col-xs-12">Global Max Mbps</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">
-                    <input id="globalMaxMbps" name="globalMaxMbps" type="text" 
class="form-control" ng-model="deliveryService.globalMaxMbps" ng-maxlength="11" 
autofocus>
+                    <input id="globalMaxMbps" name="globalMaxMbps" type="text" 
class="form-control" placeholder="Max bits per second allowed globally (4T or 
500M)" ng-model="deliveryService.globalMaxMbps" ng-maxlength="11" 
ng-pattern="/(^4T$|^500M$)/" autofocus>
                     <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.globalMaxMbps, 'maxlength')">Too 
Long</small>
+                    <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.globalMaxMbps, 'pattern')">4T or 
500M</small>
                     <span 
ng-show="hasError(deliveryServiceForm.globalMaxMbps)" 
class="form-control-feedback"><i class="fa fa-times"></i></span>
                 </div>
             </div>
@@ -253,7 +272,7 @@ under the License.
             <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.globalMaxTps), 'has-feedback': 
hasError(deliveryServiceForm.globalMaxTps)}">
                 <label class="control-label col-md-2 col-sm-2 
col-xs-12">Global Max TPS</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">
-                    <input id="globalMaxTps" name="globalMaxTps" type="text" 
class="form-control" ng-model="deliveryService.globalMaxTps" ng-maxlength="11" 
autofocus>
+                    <input id="globalMaxTps" name="globalMaxTps" type="text" 
class="form-control" placeholder="Max transactions per second allowed globally" 
ng-model="deliveryService.globalMaxTps" ng-maxlength="11" autofocus>
                     <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.globalMaxTps, 'maxlength')">Too 
Long</small>
                     <span ng-show="hasError(deliveryServiceForm.globalMaxTps)" 
class="form-control-feedback"><i class="fa fa-times"></i></span>
                 </div>
@@ -396,15 +415,6 @@ under the License.
                 </div>
             </div>
 
-            <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.sslKeyVersion), 'has-feedback': 
hasError(deliveryServiceForm.sslKeyVersion)}">
-                <label class="control-label col-md-2 col-sm-2 col-xs-12">SSL 
Key Version</label>
-                <div class="col-md-10 col-sm-10 col-xs-12">
-                    <input id="sslKeyVersion" name="sslKeyVersion" type="text" 
class="form-control" ng-model="deliveryService.sslKeyVersion" ng-maxlength="11" 
autofocus>
-                    <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.sslKeyVersion, 'maxlength')">Too 
Long</small>
-                    <span 
ng-show="hasError(deliveryServiceForm.sslKeyVersion)" 
class="form-control-feedback"><i class="fa fa-times"></i></span>
-                </div>
-            </div>
-
             <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.regionalGeoBlocking), 'has-feedback': 
hasError(deliveryServiceForm.regionalGeoBlocking)}">
                 <label class="control-label col-md-2 col-sm-2 
col-xs-12">Regional Geoblocking *</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9b26ecee/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.Steering.tpl.html
----------------------------------------------------------------------
diff --git 
a/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.Steering.tpl.html
 
b/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.Steering.tpl.html
index 7c1acc2..228a490 100644
--- 
a/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.Steering.tpl.html
+++ 
b/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.Steering.tpl.html
@@ -66,7 +66,7 @@ under the License.
             <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.xmlId), 'has-feedback': 
hasError(deliveryServiceForm.xmlId)}">
                 <label class="control-label col-md-2 col-sm-2 col-xs-12">XML 
ID *</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">
-                    <input id="xmlId" name="xmlId" type="text" 
class="form-control" ng-model="deliveryService.xmlId" ng-required="true" 
ng-maxlength="48" ng-pattern="/^\S*$/" autofocus>
+                    <input id="xmlId" name="xmlId" type="text" 
class="form-control" placeholder="eg. xyz-video" 
ng-model="deliveryService.xmlId" ng-required="true" ng-maxlength="48" 
ng-pattern="/^\S*$/" autofocus>
                     <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.xmlId, 
'required')">Required</small>
                     <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.xmlId, 'maxlength')">Too 
Long</small>
                     <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.xmlId, 'pattern')">No 
spaces</small>
@@ -74,6 +74,15 @@ under the License.
                 </div>
             </div>
 
+            <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.tenantId), 'has-feedback': 
hasError(deliveryServiceForm.tenantId)}">
+                <label class="control-label col-md-2 col-sm-2 
col-xs-12">Tenant</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <select id="tenantId" name="tenantId" class="form-control" 
ng-model="deliveryService.tenantId" ng-options="tenant.id as tenant.name for 
tenant in tenants">
+                        <option value="">Select...</option>
+                    </select>
+                </div>
+            </div>
+
             <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.displayName), 'has-feedback': 
hasError(deliveryServiceForm.displayName)}">
                 <label class="control-label col-md-2 col-sm-2 
col-xs-12">Display Name *</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">
@@ -121,7 +130,7 @@ 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">Profile</label>
+                <label class="control-label col-md-2 col-sm-2 
col-xs-12">Delivery Service 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">
                         <option value="">Select...</option>
@@ -184,15 +193,6 @@ under the License.
                 </div>
             </div>
 
-            <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.sslKeyVersion), 'has-feedback': 
hasError(deliveryServiceForm.sslKeyVersion)}">
-                <label class="control-label col-md-2 col-sm-2 col-xs-12">SSL 
Key Version</label>
-                <div class="col-md-10 col-sm-10 col-xs-12">
-                    <input id="sslKeyVersion" name="sslKeyVersion" type="text" 
class="form-control" ng-model="deliveryService.sslKeyVersion" ng-maxlength="11" 
autofocus>
-                    <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.sslKeyVersion, 'maxlength')">Too 
Long</small>
-                    <span 
ng-show="hasError(deliveryServiceForm.sslKeyVersion)" 
class="form-control-feedback"><i class="fa fa-times"></i></span>
-                </div>
-            </div>
-
             <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.logsEnabled), 'has-feedback': 
hasError(deliveryServiceForm.logsEnabled)}">
                 <label class="control-label col-md-2 col-sm-2 col-xs-12">Logs 
Enabled *</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9b26ecee/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.anyMap.tpl.html
----------------------------------------------------------------------
diff --git 
a/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.anyMap.tpl.html
 
b/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.anyMap.tpl.html
index e4aa27e..b48aaab 100644
--- 
a/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.anyMap.tpl.html
+++ 
b/traffic_portal/app/src/common/modules/form/deliveryService/form.deliveryService.anyMap.tpl.html
@@ -63,10 +63,19 @@ under the License.
                 </div>
             </div>
 
+            <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.tenantId), 'has-feedback': 
hasError(deliveryServiceForm.tenantId)}">
+                <label class="control-label col-md-2 col-sm-2 
col-xs-12">Tenant</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <select id="tenantId" name="tenantId" class="form-control" 
ng-model="deliveryService.tenantId" ng-options="tenant.id as tenant.name for 
tenant in tenants">
+                        <option value="">Select...</option>
+                    </select>
+                </div>
+            </div>
+
             <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.xmlId), 'has-feedback': 
hasError(deliveryServiceForm.xmlId)}">
                 <label class="control-label col-md-2 col-sm-2 col-xs-12">XML 
ID *</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">
-                    <input id="xmlId" name="xmlId" type="text" 
class="form-control" ng-model="deliveryService.xmlId" ng-required="true" 
ng-maxlength="48" ng-pattern="/^\S*$/" autofocus>
+                    <input id="xmlId" name="xmlId" type="text" 
class="form-control" placeholder="eg. xyz-video" 
ng-model="deliveryService.xmlId" ng-required="true" ng-maxlength="48" 
ng-pattern="/^\S*$/" autofocus>
                     <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.xmlId, 
'required')">Required</small>
                     <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.xmlId, 'maxlength')">Too 
Long</small>
                     <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.xmlId, 'pattern')">No 
spaces</small>
@@ -103,15 +112,50 @@ under the License.
             </div>
 
             <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.geoProvider), 'has-feedback': 
hasError(deliveryServiceForm.geoProvider)}">
-                <label class="control-label col-md-2 col-sm-2 col-xs-12">Geo 
Provider *</label>
+                <label class="control-label col-md-2 col-sm-2 
col-xs-12">Geolocation Provider *</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">
                     <select id="geoProvider" name="geoProvider" 
class="form-control" ng-model="deliveryService.geoProvider" 
ng-options="gp.value as gp.label for gp in geoProviders" required></select>
                     <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.geoProvider, 
'required')">Required</small>
                 </div>
             </div>
 
+            <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.geoLimit), 'has-feedback': 
hasError(deliveryServiceForm.geoLimit)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Geo 
Limit *</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <select id="geoLimit" name="geoLimit" class="form-control" 
ng-model="deliveryService.geoLimit" ng-options="gl.value as gl.label for gl in 
geoLimits" required></select>
+                    <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.geoLimit, 
'required')">Required</small>
+                </div>
+            </div>
+
+            <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.geoLimitCountries), 'has-feedback': 
hasError(deliveryServiceForm.geoLimitCountries)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Geo 
Limit Countries</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="geoLimitCountries" name="geoLimitCountries" 
type="text" class="form-control" ng-model="deliveryService.geoLimitCountries" 
ng-maxlength="255" autofocus>
+                    <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.geoLimitCountries, 
'maxlength')">Too Long</small>
+                    <span 
ng-show="hasError(deliveryServiceForm.geoLimitCountries)" 
class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+
+            <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.geolimitRedirectUrl), 'has-feedback': 
hasError(deliveryServiceForm.geolimitRedirectUrl)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Geo 
Limit Redirect URL</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <input id="geolimitRedirectUrl" name="geolimitRedirectUrl" 
type="text" class="form-control" ng-model="deliveryService.geolimitRedirectUrl" 
ng-maxlength="255" ng-pattern="/^(https?:\/\/)/" autofocus>
+                    <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.geolimitRedirectUrl, 
'maxlength')">Too Long</small>
+                    <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.geolimitRedirectUrl, 
'pattern')">Must start with http:// or https://</small>
+                    <span 
ng-show="hasError(deliveryServiceForm.geolimitRedirectUrl)" 
class="form-control-feedback"><i class="fa fa-times"></i></span>
+                </div>
+            </div>
+
+            <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.regionalGeoBlocking), 'has-feedback': 
hasError(deliveryServiceForm.regionalGeoBlocking)}">
+                <label class="control-label col-md-2 col-sm-2 
col-xs-12">Regional Geoblocking *</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <select id="regionalGeoBlocking" 
name="regionalGeoBlocking" class="form-control" 
ng-model="deliveryService.regionalGeoBlocking" ng-options="x.value as x.label 
for x in falseTrue" required></select>
+                    <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.regionalGeoBlocking, 
'required')">Required</small>
+                </div>
+            </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">Profile</label>
+                <label class="control-label col-md-2 col-sm-2 
col-xs-12">Delivery Service 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">
                         <option value="">Select...</option>
@@ -201,23 +245,6 @@ under the License.
                 </div>
             </div>
 
-            <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.sslKeyVersion), 'has-feedback': 
hasError(deliveryServiceForm.sslKeyVersion)}">
-                <label class="control-label col-md-2 col-sm-2 col-xs-12">SSL 
Key Version</label>
-                <div class="col-md-10 col-sm-10 col-xs-12">
-                    <input id="sslKeyVersion" name="sslKeyVersion" type="text" 
class="form-control" ng-model="deliveryService.sslKeyVersion" ng-maxlength="11" 
autofocus>
-                    <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.sslKeyVersion, 'maxlength')">Too 
Long</small>
-                    <span 
ng-show="hasError(deliveryServiceForm.sslKeyVersion)" 
class="form-control-feedback"><i class="fa fa-times"></i></span>
-                </div>
-            </div>
-
-            <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.regionalGeoBlocking), 'has-feedback': 
hasError(deliveryServiceForm.regionalGeoBlocking)}">
-                <label class="control-label col-md-2 col-sm-2 
col-xs-12">Regional Geoblocking *</label>
-                <div class="col-md-10 col-sm-10 col-xs-12">
-                    <select id="regionalGeoBlocking" 
name="regionalGeoBlocking" class="form-control" 
ng-model="deliveryService.regionalGeoBlocking" ng-options="x.value as x.label 
for x in falseTrue" required></select>
-                    <small class="input-error" 
ng-show="hasPropertyError(deliveryServiceForm.regionalGeoBlocking, 
'required')">Required</small>
-                </div>
-            </div>
-
             <div class="form-group" ng-class="{'has-error': 
hasError(deliveryServiceForm.logsEnabled), 'has-feedback': 
hasError(deliveryServiceForm.logsEnabled)}">
                 <label class="control-label col-md-2 col-sm-2 col-xs-12">Logs 
Enabled *</label>
                 <div class="col-md-10 col-sm-10 col-xs-12">

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9b26ecee/traffic_portal/app/src/common/modules/form/deliveryService/new/FormNewDeliveryServiceController.js
----------------------------------------------------------------------
diff --git 
a/traffic_portal/app/src/common/modules/form/deliveryService/new/FormNewDeliveryServiceController.js
 
b/traffic_portal/app/src/common/modules/form/deliveryService/new/FormNewDeliveryServiceController.js
index d8f8e8d..6e088d7 100644
--- 
a/traffic_portal/app/src/common/modules/form/deliveryService/new/FormNewDeliveryServiceController.js
+++ 
b/traffic_portal/app/src/common/modules/form/deliveryService/new/FormNewDeliveryServiceController.js
@@ -19,10 +19,6 @@
 
 var FormNewDeliveryServiceController = function(deliveryService, type, types, 
$scope, $controller, deliveryServiceService) {
 
-       var filteredTypes = _.filter(types, function(currentType) {
-               return currentType.name.indexOf(type) != -1;
-       });
-
        var setDNSTtl = function() {
                if (type.indexOf('HTTP') != -1) {
                        deliveryService.ccrDnsTtl = 3600;
@@ -33,7 +29,7 @@ var FormNewDeliveryServiceController = 
function(deliveryService, type, types, $s
        setDNSTtl();
 
        // extends the FormDeliveryServiceController to inherit common methods
-       angular.extend(this, $controller('FormDeliveryServiceController', { 
deliveryService: deliveryService, types: filteredTypes, $scope: $scope }));
+       angular.extend(this, $controller('FormDeliveryServiceController', { 
deliveryService: deliveryService, type: type, types: types, $scope: $scope }));
 
        $scope.deliveryServiceName = 'New';
 

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9b26ecee/traffic_portal/app/src/common/modules/form/parameter/FormParameterController.js
----------------------------------------------------------------------
diff --git 
a/traffic_portal/app/src/common/modules/form/parameter/FormParameterController.js
 
b/traffic_portal/app/src/common/modules/form/parameter/FormParameterController.js
index 4de9b5a..17cb9b5 100644
--- 
a/traffic_portal/app/src/common/modules/form/parameter/FormParameterController.js
+++ 
b/traffic_portal/app/src/common/modules/form/parameter/FormParameterController.js
@@ -29,6 +29,11 @@ var FormParameterController = function(parameter, $scope, 
$location, formUtils,
 
     $scope.labelize = stringUtils.labelize;
 
+    $scope.falseTrue = [
+        { value: false, label: 'false' },
+        { value: true, label: 'true' }
+    ];
+
     $scope.viewProfiles = function() {
         $location.path($location.path() + '/profiles');
     };

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9b26ecee/traffic_portal/app/src/common/modules/form/parameter/edit/FormEditParameterController.js
----------------------------------------------------------------------
diff --git 
a/traffic_portal/app/src/common/modules/form/parameter/edit/FormEditParameterController.js
 
b/traffic_portal/app/src/common/modules/form/parameter/edit/FormEditParameterController.js
index 4074104..996821c 100644
--- 
a/traffic_portal/app/src/common/modules/form/parameter/edit/FormEditParameterController.js
+++ 
b/traffic_portal/app/src/common/modules/form/parameter/edit/FormEditParameterController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var FormEditParameterController = function(parameter, $scope, $controller, 
$uibModal, $anchorScroll, locationUtils, parameterService) {
+var FormEditParameterController = function(parameter, $scope, $controller, 
$uibModal, $anchorScroll, locationUtils, parameterService, profileService) {
 
     // extends the FormParameterController to inherit common methods
     angular.extend(this, $controller('FormParameterController', { parameter: 
parameter, $scope: $scope }));
@@ -29,6 +29,14 @@ var FormEditParameterController = function(parameter, 
$scope, $controller, $uibM
             });
     };
 
+    var save = function(parameter) {
+        parameterService.updateParameter(parameter).
+            then(function() {
+                $scope.parameterName = angular.copy(parameter.name);
+                $anchorScroll(); // scrolls window to top
+            });
+    };
+
     $scope.parameterName = angular.copy(parameter.name);
 
     $scope.settings = {
@@ -36,12 +44,35 @@ var FormEditParameterController = function(parameter, 
$scope, $controller, $uibM
         saveLabel: 'Update'
     };
 
-    $scope.save = function(parameter) {
-        parameterService.updateParameter(parameter).
-            then(function() {
-                $scope.parameterName = angular.copy(parameter.name);
-                $anchorScroll(); // scrolls window to top
+    $scope.confirmSave = function(parameter) {
+        profileService.getParameterProfiles(parameter.id).
+            then(function(result) {
+                var params = {
+                    title: 'Update Parameter?',
+                    message: result.length + ' profiles use this 
parameter.<br><br>'
+                };
+                if (result.length > 0) {
+                    params.message += _.pluck(result, 'name').join('<br>') + 
'<br><br>';
+                }
+                params.message += 'Are you sure you want to update the 
parameter?';
+
+            var modalInstance = $uibModal.open({
+                templateUrl: 
'common/modules/dialog/confirm/dialog.confirm.tpl.html',
+                controller: 'DialogConfirmController',
+                size: 'md',
+                resolve: {
+                    params: function () {
+                        return params;
+                    }
+                }
+            });
+            modalInstance.result.then(function() {
+                save(parameter);
+            }, function () {
+                // do nothing
             });
+        });
+
     };
 
     $scope.confirmDelete = function(parameter) {
@@ -68,5 +99,5 @@ var FormEditParameterController = function(parameter, $scope, 
$controller, $uibM
 
 };
 
-FormEditParameterController.$inject = ['parameter', '$scope', '$controller', 
'$uibModal', '$anchorScroll', 'locationUtils', 'parameterService'];
+FormEditParameterController.$inject = ['parameter', '$scope', '$controller', 
'$uibModal', '$anchorScroll', 'locationUtils', 'parameterService', 
'profileService'];
 module.exports = FormEditParameterController;

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9b26ecee/traffic_portal/app/src/common/modules/form/parameter/form.parameter.tpl.html
----------------------------------------------------------------------
diff --git 
a/traffic_portal/app/src/common/modules/form/parameter/form.parameter.tpl.html 
b/traffic_portal/app/src/common/modules/form/parameter/form.parameter.tpl.html
index 6f31745..2d7b2b4 100644
--- 
a/traffic_portal/app/src/common/modules/form/parameter/form.parameter.tpl.html
+++ 
b/traffic_portal/app/src/common/modules/form/parameter/form.parameter.tpl.html
@@ -42,9 +42,16 @@ under the License.
                     <span ng-show="hasError(parameterForm[prop.name])" 
class="form-control-feedback"><i class="fa fa-times"></i></span>
                 </div>
             </div>
+            <div class="form-group" ng-class="{'has-error': 
hasError(parameterForm.secure), 'has-feedback': 
hasError(parameterForm.secure)}">
+                <label class="control-label col-md-2 col-sm-2 
col-xs-12">Secure *</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <select id="secure" name="secure" class="form-control" 
ng-model="parameter.secure" ng-options="x.value as x.label for x in falseTrue" 
required></select>
+                    <small class="input-error" 
ng-show="hasPropertyError(parameterForm.secure, 'required')">Required</small>
+                </div>
+            </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-danger" 
ng-show="!settings.isNew" ng-click="confirmDelete(parameter)">Delete</button>
-                <button type="button" class="btn btn-success" 
ng-disabled="parameterForm.$pristine || parameterForm.$invalid" 
ng-click="save(parameter)">{{settings.saveLabel}}</button>
+                <button type="button" class="btn btn-success" 
ng-disabled="parameterForm.$pristine || parameterForm.$invalid" 
ng-click="confirmSave(parameter)">{{settings.saveLabel}}</button>
             </div>
         </form>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9b26ecee/traffic_portal/app/src/common/modules/form/parameter/new/FormNewParameterController.js
----------------------------------------------------------------------
diff --git 
a/traffic_portal/app/src/common/modules/form/parameter/new/FormNewParameterController.js
 
b/traffic_portal/app/src/common/modules/form/parameter/new/FormNewParameterController.js
index 56b9202..5e2bfec 100644
--- 
a/traffic_portal/app/src/common/modules/form/parameter/new/FormNewParameterController.js
+++ 
b/traffic_portal/app/src/common/modules/form/parameter/new/FormNewParameterController.js
@@ -29,7 +29,7 @@ var FormNewParameterController = function(parameter, $scope, 
$controller, parame
         saveLabel: 'Create'
     };
 
-    $scope.save = function(parameter) {
+    $scope.confirmSave = function(parameter) {
         parameterService.createParameter(parameter);
     };
 

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9b26ecee/traffic_portal/app/src/common/modules/form/server/form.server.tpl.html
----------------------------------------------------------------------
diff --git 
a/traffic_portal/app/src/common/modules/form/server/form.server.tpl.html 
b/traffic_portal/app/src/common/modules/form/server/form.server.tpl.html
index 2bc9dd2..30f3970 100644
--- a/traffic_portal/app/src/common/modules/form/server/form.server.tpl.html
+++ b/traffic_portal/app/src/common/modules/form/server/form.server.tpl.html
@@ -67,13 +67,49 @@ under the License.
                     <input id="updPending" name="updPending" type="text" 
class="form-control" ng-model="server.updPending" ng-disabled="true">
                 </div>
             </div>
+            <div class="form-group" ng-class="{'has-error': 
hasError(serverForm.cdn), 'has-feedback': hasError(serverForm.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="server.cdnId" ng-options="cdn.id as cdn.name for cdn in cdns" 
required>
+                        <option value="">Select...</option>
+                    </select>
+                    <small class="input-error" 
ng-show="hasPropertyError(serverForm.cdn, 'required')">Required</small>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': 
hasError(serverForm.cachegroup), 'has-feedback': 
hasError(serverForm.cachegroup)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Cache 
Group *</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <select id="cachegroup" name="cachegroup" 
class="form-control" ng-model="server.cachegroupId" ng-options="cachegroup.id 
as cachegroup.name for cachegroup in cacheGroups" required>
+                        <option value="">Select...</option>
+                    </select>
+                    <small class="input-error" 
ng-show="hasPropertyError(serverForm.cachegroup, 'required')">Required</small>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': 
hasError(serverForm.type), 'has-feedback': hasError(serverForm.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="server.typeId" ng-options="type.id as type.name for type in types" 
required>
+                        <option value="">Select...</option>
+                    </select>
+                    <small class="input-error" 
ng-show="hasPropertyError(serverForm.type, 'required')">Required</small>
+                </div>
+            </div>
+            <div class="form-group" ng-class="{'has-error': 
hasError(serverForm.profile), 'has-feedback': hasError(serverForm.profile)}">
+                <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="server.profileId" ng-options="profile.id as profile.name for profile 
in profiles" required>
+                        <option value="">Select...</option>
+                    </select>
+                    <small class="input-error" 
ng-show="hasPropertyError(serverForm.profile, 'required')">Required</small>
+                </div>
+            </div>
             <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>
+                    <input id="hostName" name="hostName" type="text" 
class="form-control" ng-model="server.hostName" ng-required="true" 
ng-maxlength="45" 
ng-pattern="/^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$/"
 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>
+                    <small class="input-error" 
ng-show="hasPropertyError(serverForm.hostName, 'pattern')">Invalid</small>
                     <span ng-show="hasError(serverForm.hostName)" 
class="form-control-feedback"><i class="fa fa-times"></i></span>
                 </div>
             </div>
@@ -83,7 +119,7 @@ under the License.
                     <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>
+                    <small class="input-error" 
ng-show="hasPropertyError(serverForm.domainName, 'pattern')">Invalid</small>
                     <span ng-show="hasError(serverForm.domainName)" 
class="form-control-feedback"><i class="fa fa-times"></i></span>
                 </div>
             </div>
@@ -96,20 +132,13 @@ under the License.
                     <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="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="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>
+                    <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.interfaceName), 'has-feedback': 
hasError(serverForm.interfaceName)}">
@@ -122,7 +151,7 @@ under the License.
                 </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>
+                <label class="control-label col-md-2 col-sm-2 
col-xs-12">Network IP *</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>
@@ -132,7 +161,7 @@ under the License.
                 </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>
+                <label class="control-label col-md-2 col-sm-2 
col-xs-12">Network Subnet *</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>
@@ -142,7 +171,7 @@ under the License.
                 </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>
+                <label class="control-label col-md-2 col-sm-2 
col-xs-12">Network 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>
@@ -168,17 +197,26 @@ under the License.
                 </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>
+                <label class="control-label col-md-2 col-sm-2 
col-xs-12">Network 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>
+                    <input id="interfaceMtu" name="interfaceMtu" type="text" 
class="form-control" placeholder="1500 or 9000" 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.physLocation), 'has-feedback': 
hasError(serverForm.physLocation)}">
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Phys 
Location *</label>
+                <div class="col-md-10 col-sm-10 col-xs-12">
+                    <select id="physLocation" name="physLocation" 
class="form-control" ng-model="server.physLocationId" 
ng-options="physLocation.id as physLocation.name for physLocation in 
physLocations" required>
+                        <option value="">Select...</option>
+                    </select>
+                    <small class="input-error" 
ng-show="hasPropertyError(serverForm.physLocation, 'required')">Required</small>
+                </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>
+                <label class="control-label col-md-2 col-sm-2 col-xs-12">Rack 
/ Elevation</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>
@@ -273,60 +311,6 @@ under the License.
                     <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)}">
-                <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="server.cdnId" ng-options="cdn.id as cdn.name for cdn in cdns" 
required>
-                        <option value="">Select...</option>
-                    </select>
-                    <small class="input-error" 
ng-show="hasPropertyError(serverForm.cdn, 'required')">Required</small>
-                </div>
-            </div>
-            <div class="form-group" ng-class="{'has-error': 
hasError(serverForm.physLocation), 'has-feedback': 
hasError(serverForm.physLocation)}">
-                <label class="control-label col-md-2 col-sm-2 col-xs-12">Phys 
Location *</label>
-                <div class="col-md-10 col-sm-10 col-xs-12">
-                    <select id="physLocation" name="physLocation" 
class="form-control" ng-model="server.physLocationId" 
ng-options="physLocation.id as physLocation.name for physLocation in 
physLocations" required>
-                        <option value="">Select...</option>
-                    </select>
-                    <small class="input-error" 
ng-show="hasPropertyError(serverForm.physLocation, 'required')">Required</small>
-                </div>
-            </div>
-            <div class="form-group" ng-class="{'has-error': 
hasError(serverForm.cachegroup), 'has-feedback': 
hasError(serverForm.cachegroup)}">
-                <label class="control-label col-md-2 col-sm-2 col-xs-12">Cache 
Group *</label>
-                <div class="col-md-10 col-sm-10 col-xs-12">
-                    <select id="cachegroup" name="cachegroup" 
class="form-control" ng-model="server.cachegroupId" ng-options="cachegroup.id 
as cachegroup.name for cachegroup in cacheGroups" required>
-                        <option value="">Select...</option>
-                    </select>
-                    <small class="input-error" 
ng-show="hasPropertyError(serverForm.cachegroup, 'required')">Required</small>
-                </div>
-            </div>
-            <div class="form-group" ng-class="{'has-error': 
hasError(serverForm.type), 'has-feedback': hasError(serverForm.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="server.typeId" ng-options="type.id as type.name for type in types" 
required>
-                        <option value="">Select...</option>
-                    </select>
-                    <small class="input-error" 
ng-show="hasPropertyError(serverForm.type, 'required')">Required</small>
-                </div>
-            </div>
-            <div class="form-group" ng-class="{'has-error': 
hasError(serverForm.profile), 'has-feedback': hasError(serverForm.profile)}">
-                <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="server.profileId" ng-options="profile.id as profile.name for profile 
in profiles" required>
-                        <option value="">Select...</option>
-                    </select>
-                    <small class="input-error" 
ng-show="hasPropertyError(serverForm.profile, 'required')">Required</small>
-                </div>
-            </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-danger" 
ng-show="!settings.isNew" ng-click="confirmDelete(server)">Delete</button>
                 <button type="button" class="btn btn-success" 
ng-disabled="serverForm.$pristine || serverForm.$invalid" 
ng-click="save(server)">{{settings.saveLabel}}</button>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9b26ecee/traffic_portal/app/src/common/modules/header/header.tpl.html
----------------------------------------------------------------------
diff --git a/traffic_portal/app/src/common/modules/header/header.tpl.html 
b/traffic_portal/app/src/common/modules/header/header.tpl.html
index 99a4ee5..5788cc6 100644
--- a/traffic_portal/app/src/common/modules/header/header.tpl.html
+++ b/traffic_portal/app/src/common/modules/header/header.tpl.html
@@ -35,7 +35,7 @@ under the License.
                 </div>
             </li>
             <li role="presentation" class="dropdown">
-                <div class="btn-group" uib-dropdown is-open="alerts.isopen">
+                <div class="btn-group" title="Change Logs" uib-dropdown 
is-open="alerts.isopen">
                     <button id="alertsButton" type="button" class="btn 
btn-link" ng-click="getChangeLogs()" uib-dropdown-toggle>
                         <i class="fa fa-comment-o"></i>
                         <span class="badge bg-green">{{newLogCount()}}</span>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9b26ecee/traffic_portal/app/src/common/modules/navigation/NavigationController.js
----------------------------------------------------------------------
diff --git 
a/traffic_portal/app/src/common/modules/navigation/NavigationController.js 
b/traffic_portal/app/src/common/modules/navigation/NavigationController.js
index 5b7cefb..6413506 100644
--- a/traffic_portal/app/src/common/modules/navigation/NavigationController.js
+++ b/traffic_portal/app/src/common/modules/navigation/NavigationController.js
@@ -21,7 +21,7 @@ var NavigationController = function($scope, $log, $state, 
$location, $window, $t
 
     $scope.appName = propertiesModel.properties.name;
 
-    $scope.customMenuItems = propertiesModel.properties.customMenu.items;
+    $scope.customMenu = propertiesModel.properties.customMenu;
 
     $scope.userLoaded = userModel.loaded;
 

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9b26ecee/traffic_portal/app/src/common/modules/navigation/navigation.tpl.html
----------------------------------------------------------------------
diff --git 
a/traffic_portal/app/src/common/modules/navigation/navigation.tpl.html 
b/traffic_portal/app/src/common/modules/navigation/navigation.tpl.html
index e4c261e..2444a12 100644
--- a/traffic_portal/app/src/common/modules/navigation/navigation.tpl.html
+++ b/traffic_portal/app/src/common/modules/navigation/navigation.tpl.html
@@ -54,9 +54,9 @@ under the License.
                         <li class="side-menu-category-item" 
ng-class="{'current-page': isState('trafficPortal.private.admin.users')}"><a 
ng-click="navigateToPath('/admin/users')">Users</a></li>
                     </ul>
                 </li>
-                <li class="side-menu-category" ng-if="customMenuItems.length > 
0"><a href="javascript:void(0);"><i class="fa fa-cog"></i> Custom <span 
class="fa fa-chevron-down"></span></a>
+                <li class="side-menu-category" ng-if="customMenu.items.length 
> 0"><a href="javascript:void(0);"><i class="fa 
fa-ellipsis-h"></i>{{::customMenu.name}} <span class="fa 
fa-chevron-down"></span></a>
                     <ul class="nav child_menu" style="display: none">
-                        <li class="side-menu-category-item" ng-repeat="item in 
::customMenuItems"><a ng-click="openCustomItem(item.url, 
item.embed)">{{item.name}}</a></li>
+                        <li class="side-menu-category-item" ng-repeat="item in 
::customMenu.items"><a ng-click="openCustomItem(item.url, 
item.embed)">{{item.name}}</a></li>
                     </ul>
                 </li>
 

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9b26ecee/traffic_portal/app/src/common/modules/table/cacheGroupParameters/table.cacheGroupParameters.tpl.html
----------------------------------------------------------------------
diff --git 
a/traffic_portal/app/src/common/modules/table/cacheGroupParameters/table.cacheGroupParameters.tpl.html
 
b/traffic_portal/app/src/common/modules/table/cacheGroupParameters/table.cacheGroupParameters.tpl.html
index 04feb92..e401859 100644
--- 
a/traffic_portal/app/src/common/modules/table/cacheGroupParameters/table.cacheGroupParameters.tpl.html
+++ 
b/traffic_portal/app/src/common/modules/table/cacheGroupParameters/table.cacheGroupParameters.tpl.html
@@ -38,6 +38,7 @@ under the License.
                 <th>name</th>
                 <th>configFile</th>
                 <th>value</th>
+                <th>secure</th>
                 <th></th>
             </tr>
             </thead>
@@ -46,6 +47,7 @@ under the License.
                 <td>{{::parameter.name}}</td>
                 <td>{{::parameter.configFile}}</td>
                 <td>{{::parameter.value}}</td>
+                <td>{{::parameter.secure}}</td>
                 <td><button type="button" class="btn btn-link" title="Unlink 
Parameter from Cache Group" ng-click="removeParameter(parameter.id)"><i 
class="fa fa-chain-broken"></i></button></td>
             </tr>
             </tbody>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9b26ecee/traffic_portal/app/src/common/modules/table/cdnDeliveryServices/table.cdnDeliveryServices.tpl.html
----------------------------------------------------------------------
diff --git 
a/traffic_portal/app/src/common/modules/table/cdnDeliveryServices/table.cdnDeliveryServices.tpl.html
 
b/traffic_portal/app/src/common/modules/table/cdnDeliveryServices/table.cdnDeliveryServices.tpl.html
index ac8dffd..53d7aae 100644
--- 
a/traffic_portal/app/src/common/modules/table/cdnDeliveryServices/table.cdnDeliveryServices.tpl.html
+++ 
b/traffic_portal/app/src/common/modules/table/cdnDeliveryServices/table.cdnDeliveryServices.tpl.html
@@ -34,6 +34,7 @@ under the License.
         <table id="deliveryServicesTable" class="table responsive-utilities 
jambo_table">
             <thead>
             <tr class="headings">
+                <th>tenant</th>
                 <th>xmlId</th>
                 <th>orgServerFqdn</th>
                 <th>active</th>
@@ -48,6 +49,7 @@ under the License.
             </thead>
             <tbody>
             <tr ng-click="editDeliveryService(deliveryService)" 
ng-repeat="deliveryService in ::deliveryServices">
+                <td>{{::deliveryService.tenant}}</td>
                 <td>{{::deliveryService.xmlId}}</td>
                 <td>{{::deliveryService.orgServerFqdn}}</td>
                 <td>{{::deliveryService.active}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9b26ecee/traffic_portal/app/src/common/modules/table/deliveryServices/table.deliveryServices.tpl.html
----------------------------------------------------------------------
diff --git 
a/traffic_portal/app/src/common/modules/table/deliveryServices/table.deliveryServices.tpl.html
 
b/traffic_portal/app/src/common/modules/table/deliveryServices/table.deliveryServices.tpl.html
index 3b97e89..1e7e896 100644
--- 
a/traffic_portal/app/src/common/modules/table/deliveryServices/table.deliveryServices.tpl.html
+++ 
b/traffic_portal/app/src/common/modules/table/deliveryServices/table.deliveryServices.tpl.html
@@ -33,6 +33,7 @@ under the License.
         <table id="deliveryServicesTable" class="table responsive-utilities 
jambo_table">
             <thead>
                 <tr class="headings">
+                    <th>tenant</th>
                     <th>xmlId</th>
                     <th>orgServerFqdn</th>
                     <th>active</th>
@@ -47,6 +48,7 @@ under the License.
             </thead>
             <tbody>
                 <tr ng-click="editDeliveryService(deliveryService)" 
ng-repeat="deliveryService in ::deliveryServices">
+                    <td>{{::deliveryService.tenant}}</td>
                     <td>{{::deliveryService.xmlId}}</td>
                     <td>{{::deliveryService.orgServerFqdn}}</td>
                     <td>{{::deliveryService.active}}</td>

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/9b26ecee/traffic_portal/app/src/common/modules/table/parameterProfiles/TableParameterProfilesController.js
----------------------------------------------------------------------
diff --git 
a/traffic_portal/app/src/common/modules/table/parameterProfiles/TableParameterProfilesController.js
 
b/traffic_portal/app/src/common/modules/table/parameterProfiles/TableParameterProfilesController.js
index 3fb44f6..6a4ce71 100644
--- 
a/traffic_portal/app/src/common/modules/table/parameterProfiles/TableParameterProfilesController.js
+++ 
b/traffic_portal/app/src/common/modules/table/parameterProfiles/TableParameterProfilesController.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-var TableParameterProfilesController = function(parameter, parameterProfiles, 
$scope, $state, $uibModal, locationUtils, profileParameterService) {
+var TableParameterProfilesController = function(parameter, parameterProfiles, 
$scope, $state, $uibModal, locationUtils, deliveryServiceService, 
profileParameterService, serverService) {
 
        $scope.parameter = parameter;
 
@@ -27,7 +27,7 @@ var TableParameterProfilesController = function(parameter, 
parameterProfiles, $s
                alert('not hooked up yet: add profile to parameter');
        };
 
-       $scope.removeProfile = function(profileId) {
+       var removeProfile = function(profileId) {
                profileParameterService.unlinkProfileParameter(profileId, 
parameter.id)
                        .then(
                                function() {
@@ -36,6 +36,57 @@ var TableParameterProfilesController = function(parameter, 
parameterProfiles, $s
                        );
        };
 
+       $scope.confirmRemoveProfile = function(profile) {
+               if (profile.type == 'DS_PROFILE') { // if this is a ds profile, 
then it is used by delivery service(s) so we'll fetch the ds count...
+                       deliveryServiceService.getDeliveryServices({ profile: 
profile.id }).
+                               then(function(result) {
+                                       var params = {
+                                               title: 'Remove Parameter from 
Profile?',
+                                               message: 'The ' + profile.name 
+ ' profile is used by ' + result.length + ' delivery service(s). Are you sure 
you want to remove the ' + parameter.name + ' parameter from this profile?'
+                                       };
+                                       var modalInstance = $uibModal.open({
+                                               templateUrl: 
'common/modules/dialog/confirm/dialog.confirm.tpl.html',
+                                               controller: 
'DialogConfirmController',
+                                               size: 'md',
+                                               resolve: {
+                                                       params: function () {
+                                                               return params;
+                                                       }
+                                               }
+                                       });
+                                       modalInstance.result.then(function() {
+                                               removeProfile(profile.id);
+                                       }, function () {
+                                               // do nothing
+                                       });
+                               });
+               } else { // otherwise the profile is used by servers so we'll 
fetch the server count...
+                       serverService.getServers({ profileId: profile.id }).
+                               then(function(result) {
+                                       var params = {
+                                               title: 'Remove Parameter from 
Profile?',
+                                               message: 'The ' + profile.name 
+ ' profile is used by ' + result.length + ' server(s). Are you sure you want 
to remove the ' + parameter.name + ' parameter from this profile?'
+                                       };
+                                       var modalInstance = $uibModal.open({
+                                               templateUrl: 
'common/modules/dialog/confirm/dialog.confirm.tpl.html',
+                                               controller: 
'DialogConfirmController',
+                                               size: 'md',
+                                               resolve: {
+                                                       params: function () {
+                                                               return params;
+                                                       }
+                                               }
+                                       });
+                                       modalInstance.result.then(function() {
+                                               removeProfile(profile.id);
+                                       }, function () {
+                                               // do nothing
+                                       });
+                               });
+               }
+       };
+
+
        $scope.refresh = function() {
                $state.reload(); // reloads all the resolves for the view
        };
@@ -83,5 +134,5 @@ var TableParameterProfilesController = function(parameter, 
parameterProfiles, $s
 
 };
 
-TableParameterProfilesController.$inject = ['parameter', 'parameterProfiles', 
'$scope', '$state', '$uibModal', 'locationUtils', 'profileParameterService'];
+TableParameterProfilesController.$inject = ['parameter', 'parameterProfiles', 
'$scope', '$state', '$uibModal', 'locationUtils', 'deliveryServiceService', 
'profileParameterService', 'serverService'];
 module.exports = TableParameterProfilesController;


Reply via email to