diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devicetype.edit/edit.hbs b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devicetype.edit/edit.hbs
index 599ffcec4e1..1203de1aea5 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devicetype.edit/edit.hbs
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devicetype.edit/edit.hbs
@@ -98,14 +98,15 @@
@@ -115,16 +116,16 @@
-
+
@@ -268,4 +269,4 @@
{{#zone "bottomJs"}}
{{js "js/bottomJs.js"}}
-{{/zone}}
\ No newline at end of file
+{{/zone}}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devicetype.edit/public/js/bottomJs.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devicetype.edit/public/js/bottomJs.js
index 320d630efe8..d5bd168f87d 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devicetype.edit/public/js/bottomJs.js
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devicetype.edit/public/js/bottomJs.js
@@ -123,27 +123,28 @@ $(document).ready(function () {
var addFeatureButton = $('.add_feature_button'); //Add button selector
var featureWrapper = $('.feature_field_wrapper'); //Input field wrapper
$(addFeatureButton).click(function(){ //Once add button is clicked
- var featureFieldHtml = '
'
+ var featureFieldHtml = '
' +
+ '
' +
+ '
' +
+ '
' +
+ '
';
$(featureWrapper).append(featureFieldHtml); // Add field html
});
$(featureWrapper).on('click', '.remove_feature_button', function(e){ //Once remove button is clicked
e.preventDefault();
$(this).parent('div').remove(); //Remove field html
- op--; //Decrement field counter
});
/**
* Following click function would execute
* when a user clicks on "Add Device type" button.
*/
- $("button#add-devicetype-btn").click(function () {
+ $("button#edit-devicetype-btn").click(function () {
var errorMsgWrapper = "#devicetype-create-error-msg";
var errorMsg = "#devicetype-create-error-msg span";
@@ -155,13 +156,19 @@ $(document).ready(function () {
if (!deviceTypeName || deviceTypeName.trim() == "" ) {
$(errorMsg).text("Device Type Name Cannot be empty.");
$(errorMsgWrapper).removeClass("hidden");
+ $([document.documentElement, document.body]).animate({
+ scrollTop: $(".page-sub-title").offset().top
+ }, 500);
return;
}
- if (!deviceTypeDescription || deviceTypeDescription.trim() == "" ) {
+ if (!deviceTypeDescription || deviceTypeDescription.trim() == "") {
$(errorMsg).text("Device Type Description Cannot be empty.");
$(errorMsgWrapper).removeClass("hidden");
- return
+ $([document.documentElement, document.body]).animate({
+ scrollTop: $(".page-sub-title").offset().top
+ }, 500);
+ return;
}
deviceType.name = deviceTypeName.trim();
@@ -197,17 +204,29 @@ $(document).ready(function () {
}
var features = [];
+ var featureCodesValidation = true;
+ var regexp = /^[a-zA-Z0-9-_]+$/;
$('div[name^="deviceFeature"]').each(function() {
- var featureName = $(this).find("#feature-name").val();
- var featureCode = $(this).find("#feature-code").val();
- if (featureName && featureName.trim() != "" && featureCode && featureCode.trim() != "") {
- var feature = {};
- feature.name = featureName.trim();
- feature.code = featureCode.trim();
- feature.description = $("#feature-description").val();
- features.push(feature);
- }
+ var featureName = $(this).find(".feature-name").val();
+ var featureCode = $(this).find(".feature-code").val();
+ var featureDescription = $(this).find(".feature-description").val();
+ if (featureName && featureName.trim() != "" && featureCode && featureCode.trim() != "") {
+ featureCodesValidation = featureCodesValidation && (featureCode.search(regexp) != -1);
+ var feature = {};
+ feature.name = featureName.trim();
+ feature.code = featureCode.trim();
+ feature.description = featureDescription;
+ features.push(feature);
+ }
});
+ if (!featureCodesValidation) {
+ $(errorMsg).text("Device Type feature code can only contain alphanumeric, underscore and dash characters.");
+ $(errorMsgWrapper).removeClass("hidden");
+ $([document.documentElement, document.body]).animate({
+ scrollTop: $(".page-sub-title").offset().top
+ }, 500);
+ return;
+ }
deviceType.deviceTypeMetaDefinition.features = features;
var addRoleAPI = apiBasePath + "/admin/device-types/" + deviceType.name;
@@ -217,6 +236,7 @@ $(document).ready(function () {
deviceType,
function (data, textStatus, jqXHR) {
if (jqXHR.status == 200) {
+ $(errorMsgIdentifier).addClass(" hidden");
$("#modalDevice").modal('show');
}
},
@@ -234,4 +254,4 @@ $(document).ready(function () {
);
});
-});
\ No newline at end of file
+});