atlas-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mad...@apache.org
Subject incubator-atlas git commit: ATLAS-1402: UI issues due to v2 API integration
Date Fri, 23 Dec 2016 02:07:35 GMT
Repository: incubator-atlas
Updated Branches:
  refs/heads/master 40e639edd -> 590b38ac5


ATLAS-1402: UI issues due to v2 API integration

Signed-off-by: Madhan Neethiraj <madhan@apache.org>


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

Branch: refs/heads/master
Commit: 590b38ac59dfcd94c3b31e93aa5e4f8143792216
Parents: 40e639e
Author: kalyanikk <kalyani.kashikar@freestoneinfotech.com>
Authored: Thu Dec 22 15:11:58 2016 +0530
Committer: Madhan Neethiraj <madhan@apache.org>
Committed: Thu Dec 22 17:47:40 2016 -0800

----------------------------------------------------------------------
 dashboardv2/public/css/scss/override.scss       |  4 --
 dashboardv2/public/css/scss/tag.scss            |  4 +-
 dashboardv2/public/index.html                   |  1 +
 .../public/js/utils/CommonViewFunction.js       | 35 +++++++------
 dashboardv2/public/js/utils/Utils.js            | 14 ++---
 .../js/views/audit/AuditTableLayoutView.js      | 18 +++++--
 .../views/audit/CreateAuditTableLayoutView.js   |  4 +-
 .../BusinessCatalogDetailLayoutView.js          | 54 +-------------------
 .../business_catalog/BusinessCatalogHeader.js   |  2 +-
 .../js/views/business_catalog/TreeLayoutView.js | 10 ++--
 .../views/detail_page/DetailPageLayoutView.js   | 18 ++++---
 .../js/views/entity/CreateEntityLayoutView.js   | 12 +++--
 .../public/js/views/schema/SchemaLayoutView.js  |  4 +-
 .../public/js/views/search/SearchLayoutView.js  |  2 +-
 .../js/views/search/SearchResultLayoutView.js   | 17 +++---
 .../public/js/views/tag/CreateTagLayoutView.js  |  4 +-
 .../views/tag/TagAttributeDetailLayoutView.js   | 43 +++++++++++-----
 .../js/views/tag/TagDetailTableLayoutView.js    |  6 +--
 .../public/js/views/tag/TagLayoutView.js        |  9 ++--
 .../public/js/views/tag/addTagModalView.js      | 13 ++---
 20 files changed, 129 insertions(+), 145 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/590b38ac/dashboardv2/public/css/scss/override.scss
----------------------------------------------------------------------
diff --git a/dashboardv2/public/css/scss/override.scss b/dashboardv2/public/css/scss/override.scss
index fab8c25..b0f5c7f 100644
--- a/dashboardv2/public/css/scss/override.scss
+++ b/dashboardv2/public/css/scss/override.scss
@@ -155,10 +155,6 @@
     width: 300px !important;
 }
 
-.select2-container--default .select2-selection--single .select2-selection__rendered {
-    width: 327px !important;
-}
-
 .typeLOV {
     .select2-container--default {
         .select2-selection--multiple {

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/590b38ac/dashboardv2/public/css/scss/tag.scss
----------------------------------------------------------------------
diff --git a/dashboardv2/public/css/scss/tag.scss b/dashboardv2/public/css/scss/tag.scss
index 0b931d0..1f9561d 100644
--- a/dashboardv2/public/css/scss/tag.scss
+++ b/dashboardv2/public/css/scss/tag.scss
@@ -365,10 +365,10 @@ legend.scheduler-border {
 
 .spanEntityType {
     position: absolute;
-    right: 38px;
+    right: 45px;
     top: 10px;
     cursor: help;
-    width: 45px;
+    width: 40px;
     overflow: hidden;
     z-index: 9;
     text-overflow: ellipsis;

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/590b38ac/dashboardv2/public/index.html
----------------------------------------------------------------------
diff --git a/dashboardv2/public/index.html b/dashboardv2/public/index.html
index 36ddef5..dcda435 100644
--- a/dashboardv2/public/index.html
+++ b/dashboardv2/public/index.html
@@ -30,6 +30,7 @@
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8; Cache-Control: no-cache" />
+    <meta http-equiv="X-Frame-Options" content="deny">
     <title>Atlas</title>
     <meta name="description" content="">
     <meta name="viewport" content="width=device-width">

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/590b38ac/dashboardv2/public/js/utils/CommonViewFunction.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/utils/CommonViewFunction.js b/dashboardv2/public/js/utils/CommonViewFunction.js
index d8cf9b0..d3a3f67 100644
--- a/dashboardv2/public/js/utils/CommonViewFunction.js
+++ b/dashboardv2/public/js/utils/CommonViewFunction.js
@@ -99,9 +99,9 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
 
                         }
                         if (value.length > 1) {
-                            scope.$('td div[data-id="' + id + '"]').html('<a href="#!/detailPage/' + id + '">' + value + '</a>');
+                            scope.$('td div[data-id="' + id + '"]').html('<a href="#!/detailPage/' + id + '">' + _.escape(value) + '</a>');
                         } else {
-                            scope.$('td div[data-id="' + id + '"]').html('<a href="#!/detailPage/' + id + '">' + id + '</a>');
+                            scope.$('td div[data-id="' + id + '"]').html('<a href="#!/detailPage/' + id + '">' + _.escape(id) + '</a>');
                         }
                         if (deleteButton.length) {
                             scope.$('td div[data-id="' + id + '"]').addClass('block readOnlyLink');
@@ -118,6 +118,7 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
                 });
             }
         _.keys(valueObject).map(function(key) {
+            key = _.escape(key)
             var keyValue = valueObject[key],
                 valueOfArray = [];
             if (_.isArray(keyValue) || _.isObject(keyValue)) {
@@ -132,7 +133,7 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
                         readOnly = false;
                     if (_.isString(inputOutputField) || _.isBoolean(inputOutputField) || _.isNumber(inputOutputField)) {
                         if (inputOutputField.indexOf("$") == -1) {
-                            valueOfArray.push('<span>' + inputOutputField + '</span>');
+                            valueOfArray.push('<span>' + _.escape(inputOutputField) + '</span>');
                         }
                     } else if (_.isObject(inputOutputField) && !inputOutputField.attributes && !id) {
                         _.each(inputOutputField, function(objValue, objKey) {
@@ -141,7 +142,7 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
                                 if (_.isObject(value)) {
                                     value = JSON.stringify(value);
                                 }
-                                valueOfArray.push('<span>' + objKey + ':' + value + '</span>');
+                                valueOfArray.push('<span>' + _.escape(objKey) + ':' + _.escape(value) + '</span>');
                             }
                         });
                     }
@@ -149,18 +150,18 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
                     if (id && inputOutputField) {
                         if (inputOutputField.attributes) {
                             if (inputOutputField.attributes.name) {
-                                tempLink += '<a href="#!/detailPage/' + id + '">' + inputOutputField.attributes.name + '</a>'
+                                tempLink += '<a href="#!/detailPage/' + id + '">' + _.escape(inputOutputField.attributes.name) + '</a>'
                             } else if (inputOutputField.attributes.qualifiedName) {
-                                tempLink += '<a href="#!/detailPage/' + id + '">' + inputOutputField.attributes.qualifiedName + '</a>'
+                                tempLink += '<a href="#!/detailPage/' + id + '">' + _.escape(inputOutputField.attributes.qualifiedName) + '</a>'
                             } else if (inputOutputField.typeName) {
-                                tempLink += '<a href="#!/detailPage/' + id + '">' + inputOutputField.typeName + '</a>'
+                                tempLink += '<a href="#!/detailPage/' + id + '">' + _.escape(inputOutputField.typeName) + '</a>'
                             } else {
                                 tempLink += '<a href="#!/detailPage/' + id + '">' + id + '</a>'
                             }
                         } else if (inputOutputField.name) {
-                            tempLink += '<a href="#!/detailPage/' + id + '">' + inputOutputField.name + '</a>';
+                            tempLink += '<a href="#!/detailPage/' + id + '">' + _.escape(inputOutputField.name) + '</a>';
                         } else if (inputOutputField.qualifiedName) {
-                            tempLink += '<a href="#!/detailPage/' + id + '">' + inputOutputField.qualifiedName + '</a>'
+                            tempLink += '<a href="#!/detailPage/' + id + '">' + _.escape(inputOutputField.qualifiedName) + '</a>'
                         } else {
                             var fetch = true;
                             fetchInputOutputValue(id);
@@ -191,7 +192,7 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
                 if (searchTable) {
                     table = subLink;
                 } else {
-                    table += '<tr><td>' + key + '</td><td>' + subLink + '</td></tr>';
+                    table += '<tr><td>' + key + '</td><td>' + _.escape(subLink) + '</td></tr>';
                 }
             } else {
                 if (key.indexOf("Time") !== -1 || key == "retention") {
@@ -208,7 +209,7 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
                             table = valueObject[key];
                         }
                     } else {
-                        table += '<tr><td>' + key + '</td><td>' + valueObject[key] + '</td></tr>';
+                        table += '<tr><td>' + key + '</td><td>' + _.escape(valueObject[key]) + '</td></tr>';
                     }
                 }
             }
@@ -236,13 +237,13 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
                 if (i == 0) {
                     href = splitUrlWithoutTerm[i];
                     urlList.push({
-                        value: splitUrlWithoutTerm[i],
+                        value: _.escape(splitUrlWithoutTerm[i]),
                         href: href
                     });
                 } else {
                     href += "/terms/" + splitUrlWithoutTerm[i];
                     urlList.push({
-                        value: splitUrlWithoutTerm[i],
+                        value: _.escape(splitUrlWithoutTerm[i]),
                         href: href
                     });
                 };
@@ -254,7 +255,7 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
         var li = "";
         if (options.urlList) {
             _.each(options.urlList, function(object) {
-                li += '<li><a class="link" href="#!/taxonomy/detailCatalog/api/atlas/v1/taxonomies/' + object.href + '?load=true">' + object.value + '</a></li>';
+                li += '<li><a class="link" href="#!/taxonomy/detailCatalog/api/atlas/v1/taxonomies/' + object.href + '?load=true">' + _.escape(object.value) + '</a></li>';
             });
         }
         if (options.scope) {
@@ -300,8 +301,8 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
             }
             if (tagName.term) {
                 terms.push({
-                    deleteHtml: '<a class="pull-left" title="Remove Term"><i class="fa fa-trash" data-id="tagClick" data-type="term" data-assetname="' + model.get("name") + '" data-name="' + tagName.fullName + '" data-guid="' + (model.get('$id$').id || model.get('$id$')) + '" ></i></a>',
-                    url: tagName.fullName.split(".").join("/"),
+                    deleteHtml: '<a class="pull-left" title="Remove Term"><i class="fa fa-trash" data-id="tagClick" data-type="term" data-assetname="' + _.escape(model.get("name")) + '" data-name="' + tagName.fullName + '" data-guid="' + (model.get('$id$').id || model.get('$id$')) + '" ></i></a>',
+                    url: _.unescape(tagName.fullName).split(".").join("/"),
                     name: tagName.fullName
                 });
             }
@@ -312,7 +313,7 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
                 className += "showHideDiv hide";
             }
             obj['valueUrl'] = CommonViewFunction.breadcrumbUrlMaker(obj.url);
-            html += '<div class="' + className + '" dataterm-name="' + obj.name + '"><div class="liContent"></div>' + obj.deleteHtml + '</div>';
+            html += '<div class="' + className + '" dataterm-name="' + _.escape(obj.name) + '"><div class="liContent"></div>' + obj.deleteHtml + '</div>';
         })
         if (terms.length > 1) {
             html += '<div><a  href="javascript:void(0)" data-id="showMoreLessTerm" class="inputTag inputTagGreen"><span>Show More </span><i class="fa fa-angle-right"></i></a></div>'

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/590b38ac/dashboardv2/public/js/utils/Utils.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/utils/Utils.js b/dashboardv2/public/js/utils/Utils.js
index 48963ad..d3a1b18 100644
--- a/dashboardv2/public/js/utils/Utils.js
+++ b/dashboardv2/public/js/utils/Utils.js
@@ -49,33 +49,33 @@ define(['require', 'utils/Globals', 'pnotify'], function(require, Globals, pnoti
     };
 
     var notify = function(options) {
-        new pnotify(_.extend({ icon: true, hide: true, delay: 3000,remove:true }, options));
+        new pnotify(_.extend({ icon: true, hide: true, delay: 3000, remove: true }, options));
     }
     Utils.notifyInfo = function(options) {
         notify({
             type: "info",
-            text: options.content || "Info message."
+            text: _.escape(options.content) || "Info message."
         });
     };
 
     Utils.notifyWarn = function(options) {
         notify({
             type: "notice",
-            text: options.content || "Info message."
+            text: _.escape(options.content) || "Info message."
         });
     };
 
     Utils.notifyError = function(options) {
         notify({
             type: "error",
-            text: options.content || "Error occurred."
+            text: _.escape(options.content) || "Error occurred."
         });
     };
 
     Utils.notifySuccess = function(options) {
         notify({
             type: "success",
-            text: options.content || "Error occurred."
+            text: _.escape(options.content) || "Error occurred."
         });
     };
     Utils.defaultErrorHandler = function(model, error) {
@@ -243,7 +243,7 @@ define(['require', 'utils/Globals', 'pnotify'], function(require, Globals, pnoti
             if (value == "TaxonomyTerm") {
                 return {}
             }
-            var name = value.split('.');
+            var name = _.escape(value).split('.');
             return {
                 term: true,
                 tag: false,
@@ -261,7 +261,7 @@ define(['require', 'utils/Globals', 'pnotify'], function(require, Globals, pnoti
             if (name === "TaxonomyTerm") {
                 return {}
             }
-            name = name.split('.');
+            name = _.escape(name).split('.');
             var trem = false;
             if (value['taxonomy.namespace']) {
                 trem = true;

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/590b38ac/dashboardv2/public/js/views/audit/AuditTableLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/audit/AuditTableLayoutView.js b/dashboardv2/public/js/views/audit/AuditTableLayoutView.js
index 2665d4c..9f42e4a 100644
--- a/dashboardv2/public/js/views/audit/AuditTableLayoutView.js
+++ b/dashboardv2/public/js/views/audit/AuditTableLayoutView.js
@@ -58,7 +58,7 @@ define(['require',
              * @constructs
              */
             initialize: function(options) {
-                _.extend(this, _.pick(options, 'globalVent', 'guid'));
+                _.extend(this, _.pick(options, 'globalVent', 'guid', 'vent'));
                 this.entityCollection = new VEntityList();
                 this.count = 26;
                 this.entityCollection.url = UrlLinks.entityCollectionaudit(this.guid);
@@ -79,6 +79,7 @@ define(['require',
                     paginatorOpts: {}
                 };
                 this.currPage = 1;
+                this.bindEvents();
                 // this.pageFrom = 1;
                 // this.pageTo = this.count;
             },
@@ -91,6 +92,17 @@ define(['require',
                 });
                 this.renderTableLayoutView();
             },
+            bindEvents: function() {
+                var that = this;
+                this.listenTo(this.vent, "reset:collection", function() {
+                    this.fetchCollection({
+                        next: this.ui.nextAuditData,
+                        nextClick: false,
+                        previous: this.ui.previousAuditData
+                    });
+                }, this);
+
+            },
             getToOffset: function() {
                 var toOffset = 0;
                 if (this.entityCollection.models.length < this.count) {
@@ -141,7 +153,6 @@ define(['require',
                         if ((that.entityCollection.models.length < that.count && that.currPage == 1) && that.next == that.entityCollection.last().get('eventKey')) {
                             options.next.attr('disabled', true);
                             options.previous.removeAttr("disabled");
-                            //that.renderTableLayoutView();
                         } else {
                             if (that.entityCollection.models.length > 0) {
                                 that.next = that.entityCollection.last().get('eventKey');
@@ -149,8 +160,9 @@ define(['require',
                                     options.previous.attr('disabled', true);
                                 }
                             }
-                            that.renderTableLayoutView();
+
                         }
+                        that.renderTableLayoutView();
                     },
                     silent: true
                 });

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/590b38ac/dashboardv2/public/js/views/audit/CreateAuditTableLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/audit/CreateAuditTableLayoutView.js b/dashboardv2/public/js/views/audit/CreateAuditTableLayoutView.js
index bc4fbea..76e229d 100644
--- a/dashboardv2/public/js/views/audit/CreateAuditTableLayoutView.js
+++ b/dashboardv2/public/js/views/audit/CreateAuditTableLayoutView.js
@@ -70,7 +70,7 @@ define(['require',
                     var valueObject = detailsObject.values;
                     if (this.action == Enums.auditAction.TAG_ADD) {
                         this.ui.auditHeaderValue.html('<th>Tag</th>');
-                        this.ui.auditValue.html("<tr><td>" + detailsObject.typeName + "</td></tr>");
+                        this.ui.auditValue.html("<tr><td>" + _.escape(detailsObject.typeName) + "</td></tr>");
                     } else {
                         this.ui.auditHeaderValue.html('<th>Key</th><th>New Value</th>');
                         table = CommonViewFunction.propertyTable(valueObject, this);
@@ -86,7 +86,7 @@ define(['require',
                 } else if (this.action == Enums.auditAction.TAG_DELETE) {
                     var appendedString = this.entityModel.get('details').split(':');
                     this.ui.auditHeaderValue.html('<th>Tag</th>');
-                    this.ui.auditValue.html("<tr><td>" + appendedString[1] + "</td></tr>");
+                    this.ui.auditValue.html("<tr><td>" + _.escape(appendedString[1]) + "</td></tr>");
                 }
 
             },

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/590b38ac/dashboardv2/public/js/views/business_catalog/BusinessCatalogDetailLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/business_catalog/BusinessCatalogDetailLayoutView.js b/dashboardv2/public/js/views/business_catalog/BusinessCatalogDetailLayoutView.js
index 0518578..f709f4d 100644
--- a/dashboardv2/public/js/views/business_catalog/BusinessCatalogDetailLayoutView.js
+++ b/dashboardv2/public/js/views/business_catalog/BusinessCatalogDetailLayoutView.js
@@ -104,7 +104,7 @@ define(['require',
                     }
                     if (description) {
                         this.ui.description.show();
-                        this.ui.description.html('<span>' + description + '</span>');
+                        this.ui.description.html('<span>' + _.escape(description) + '</span>');
                     } else {
                         this.ui.description.hide();
                     }
@@ -129,56 +129,6 @@ define(['require',
                 this.ui.editButton.show();
                 this.ui.editBox.hide();
             },
-            addTagCollectionList: function(obj, searchString) {
-                var list = "",
-                    that = this;
-                _.each(obj, function(model) {
-                    var tags = model.get("tags");
-                    if (!_.contains(that.tagElement, tags)) {
-                        if (searchString) {
-                            if (tags.search(new RegExp(searchString, "i")) != -1) {
-                                list += '<div><span>' + tags + '</span></div>';
-                                return;
-                            }
-                        } else {
-                            list += '<div><span>' + tags + '</span></div>';
-                        }
-                    }
-                });
-                if (list.length <= 0) {
-                    list += '<div><span>' + "No more tags" + '</span></div>';
-                }
-                this.ui.appendList.html(list);
-            },
-            addTagToTerms: function(tagObject) {
-                var tagData = "";
-                _.each(tagObject, function(val) {
-                    tagData += '<span class="inputTag"><span class="inputValue">' + val + '</span><i class="fa fa-close" data-id="deleteTag"></i></span>';
-                });
-                this.$('.addTag-dropdown').before(tagData);
-            },
-            saveTagFromList: function(ref) {
-                var that = this;
-                this.entityModel = new VEntity();
-                var tagName = ref.text();
-                var json = {
-                    "jsonClass": "org.apache.atlas.typesystem.json.InstanceSerialization$_Struct",
-                    "typeName": tagName,
-                    "values": {}
-                };
-                this.entityModel.saveEntity(this.id, {
-                    data: JSON.stringify(json),
-                    success: function(data) {
-                        that.collection.fetch({ reset: true });
-                    },
-                    error: function(error, data, status) {
-                        if (error && error.responseText) {
-                            var data = JSON.parse(error.responseText);
-                        }
-                    },
-                    complete: function() {}
-                });
-            },
             onEditButton: function(e) {
                 var that = this;
                 $(e.currentTarget).blur();
@@ -186,7 +136,7 @@ define(['require',
                     'views/tag/CreateTagLayoutView',
                     'modules/Modal'
                 ], function(CreateTagLayoutView, Modal) {
-                    var view = new CreateTagLayoutView({ 'termCollection': that.collection, 'descriptionData': that.model.get('description'), 'tag': that.termName.name });
+                    var view = new CreateTagLayoutView({ 'termCollection': that.collection, 'descriptionData': that.model.get('description'), 'tag': _.unescape(that.termName.name) });
                     var modal = new Modal({
                         title: 'Edit Term',
                         content: view,

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/590b38ac/dashboardv2/public/js/views/business_catalog/BusinessCatalogHeader.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/business_catalog/BusinessCatalogHeader.js b/dashboardv2/public/js/views/business_catalog/BusinessCatalogHeader.js
index 6be1d2d..75ed98c 100644
--- a/dashboardv2/public/js/views/business_catalog/BusinessCatalogHeader.js
+++ b/dashboardv2/public/js/views/business_catalog/BusinessCatalogHeader.js
@@ -41,7 +41,7 @@ define(['require',
             var that = this;
             $(this.el).html(this.template());
             if (Globals.userLogedIn.status) {
-                that.$('.userName').html(Globals.userLogedIn.response.userName);
+                that.$('.userName').text(Globals.userLogedIn.response.userName);
             }
             var that = this;
             if (this.url) {

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/590b38ac/dashboardv2/public/js/views/business_catalog/TreeLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/business_catalog/TreeLayoutView.js b/dashboardv2/public/js/views/business_catalog/TreeLayoutView.js
index 5b23966..431a6e7 100644
--- a/dashboardv2/public/js/views/business_catalog/TreeLayoutView.js
+++ b/dashboardv2/public/js/views/business_catalog/TreeLayoutView.js
@@ -259,11 +259,11 @@ define(['require',
                 if (isParent) {
                     this.parentCollection.url = this.url;
                     this.parentCollection.fullCollection.reset(undefined, { silent: true });
-                    this.parentCollection.fetch({ reset: true,cache:true });
+                    this.parentCollection.fetch({ reset: true, cache: true });
                 } else {
                     this.childCollection.url = this.url + "?hierarchy/path:.";
                     this.childCollection.fullCollection.reset(undefined, { silent: true });
-                    this.childCollection.fetch({ reset: true });
+                    this.childCollection.fetch({ reset: true, cache: true });
                 }
             },
             showLoader: function() {
@@ -387,7 +387,7 @@ define(['require',
                         }
                         var name = Utils.checkTagOrTerm(model.get('name'), true);
                         if (name.name) {
-                              // data-name="<space>'<tagName>'"  Space is required for DSL search Input 
+                            // data-name="<space>'<tagName>'"  Space is required for DSL search Input 
                             if (that.viewBased) {
                                 parentLi = '<div class="tools"><i class="fa fa-refresh fa-spin-custom taxanomyloader"></i><i class="fa fa-ellipsis-h termPopover"></i></div><i class="fa fa-angle-right toggleArrow" data-id="expandArrow" data-href="' + hrefUrl + '"></i><a href="javascript:void(0)" data-href="' + hrefUrl + '" data-name="`' + model.get('name') + '`">' + name.name + '</a>';
                             } else {
@@ -530,7 +530,7 @@ define(['require',
                     assetName = $(e.target).data("assetname"),
                     that = this,
                     modal = CommonViewFunction.deleteTagModel({
-                        msg: "<div class='ellipsis'>Delete: " + "<b>" + termName + "?</b></div>" +
+                        msg: "<div class='ellipsis'>Delete: " + "<b>" + _.escape(termName) + "?</b></div>" +
                             "<p class='termNote'>Assets mapped to this term will be unclassified.</p>",
                         titleMessage: Messages.deleteTerm,
                         buttonText: "Delete"
@@ -616,7 +616,7 @@ define(['require',
                     var view = new AddTermLayoutView({
                         url: UrlLinks.taxonomiesApiUrl(),
                         model: new that.parentCollection.model(),
-                        defaultTerm:true
+                        defaultTerm: true
                     });
                     var modal = new Modal({
                         title: 'Taxonomy',

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/590b38ac/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js b/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
index 041204f..c34e6f7 100644
--- a/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
+++ b/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
@@ -113,6 +113,7 @@ define(['require',
             initialize: function(options) {
                 _.extend(this, _.pick(options, 'globalVent', 'collection', 'vent', 'id'));
                 this.bindEvents();
+                this.auditVent = new Backbone.Wreqr.EventAggregator();
             },
             bindEvents: function() {
                 var that = this;
@@ -151,7 +152,7 @@ define(['require',
                             this.description = collectionJSON.attributes.description;
                             if (this.name) {
                                 this.ui.title.show();
-                                var titleName = '<span>' + this.name + '</span>';
+                                var titleName = '<span>' + _.escape(this.name) + '</span>';
                                 if (this.readOnly) {
                                     titleName += '<button title="Deleted" class="btn btn-atlasAction btn-atlas deleteBtn"><i class="fa fa-trash"></i> Deleted</button>';
                                 }
@@ -161,18 +162,18 @@ define(['require',
                             }
                             if (this.description) {
                                 this.ui.description.show();
-                                this.ui.description.html('<span>' + this.description + '</span>');
+                                this.ui.description.html('<span>' + _.escape(this.description) + '</span>');
                             } else {
                                 this.ui.description.hide();
                             }
                         }
                         if (collectionJSON.classifications) {
                             this.addTagToTerms(collectionJSON.classifications);
-                        }else{
-                             this.addTagToTerms([]);
+                        } else {
+                            this.addTagToTerms([]);
                         }
                     }
-
+                    this.auditVent.trigger("reset:collection");
                     this.renderEntityDetailTableLayoutView();
                     this.renderTagTableLayoutView(tagGuid);
                     this.renderTermTableLayoutView(tagGuid);
@@ -199,13 +200,13 @@ define(['require',
                     that = this;
                 if (tagOrTerm === "term") {
                     var modal = CommonViewFunction.deleteTagModel({
-                        msg: "<div class='ellipsis'>Remove: " + "<b>" + tagName + "</b> assignment from" + " " + "<b>" + this.name + "?</b></div>",
+                        msg: "<div class='ellipsis'>Remove: " + "<b>" + _.escape(tagName) + "</b> assignment from" + " " + "<b>" + this.name + "?</b></div>",
                         titleMessage: Messages.removeTerm,
                         buttonText: "Remove"
                     });
                 } else if (tagOrTerm === "tag") {
                     var modal = CommonViewFunction.deleteTagModel({
-                        msg: "<div class='ellipsis'>Remove: " + "<b>" + tagName + "</b> assignment from" + " " + "<b>" + this.name + "?</b></div>",
+                        msg: "<div class='ellipsis'>Remove: " + "<b>" + _.escape(tagName) + "</b> assignment from" + " " + "<b>" + this.name + "?</b></div>",
                         titleMessage: Messages.removeTag,
                         buttonText: "Remove"
                     });
@@ -344,7 +345,8 @@ define(['require',
                 require(['views/audit/AuditTableLayoutView'], function(AuditTableLayoutView) {
                     that.RAuditTableLayoutView.show(new AuditTableLayoutView({
                         globalVent: that.globalVent,
-                        guid: tagGuid
+                        guid: tagGuid,
+                        vent: that.auditVent
                     }));
                 });
             },

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/590b38ac/dashboardv2/public/js/views/entity/CreateEntityLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/entity/CreateEntityLayoutView.js b/dashboardv2/public/js/views/entity/CreateEntityLayoutView.js
index a3e0389..c98ea18 100644
--- a/dashboardv2/public/js/views/entity/CreateEntityLayoutView.js
+++ b/dashboardv2/public/js/views/entity/CreateEntityLayoutView.js
@@ -115,7 +115,7 @@ define(['require',
                         }
                     }
                 }).open();
-                var enable = false;
+                this.modal.$el.find('button.ok').attr("disabled", true);
                 this.ui.entityList.val("");
                 $(this.ui.entityInputData).on('keyup change dp.change', that.modal.$el.find('input select textarea'), function(e) {
                     that.ui.entityInputData.find("input,select,textarea").each(function() {
@@ -176,7 +176,7 @@ define(['require',
                     value;
                 if (this.guid) {
                     this.collection.each(function(val) {
-                        name += val.get("attributes").name || val.get("attributes").qualifiedName || val.get("attributes").id;
+                        name += _.escape(val.get("attributes").name) || _.escape(val.get("attributes").qualifiedName) || _.escape(val.get("attributes").id);
                         that.entityData = val;
                     });
                     this.ui.assetName.html(name);
@@ -187,7 +187,7 @@ define(['require',
                         return model.get('name');
                     }
                     this.collection.fullCollection.sort().each(function(val) {
-                        str += '<option>' + val.get("name") + '</option>';
+                        str += '<option>' + _.escape(val.get("name")) + '</option>';
                     });
                     this.ui.entityList.html(str);
                 }
@@ -208,6 +208,7 @@ define(['require',
 
             },
             onEntityChange: function(e, value) {
+                this.modal.$el.find('button.ok').prop("disabled", false);
                 var that = this,
                     typeName;
                 this.showLoader();
@@ -464,6 +465,7 @@ define(['require',
                                     }
                                 } else {
                                     if (that.selectStoreCollection.length && pickKey) {
+
                                         var temp = {} // I9 support;
                                         temp[pickKey] = $(this).val();
                                         var parseData = that.selectStoreCollection.findWhere(temp).toJSON();
@@ -554,7 +556,7 @@ define(['require',
                             } else if (value.get("id")) {
                                 labelName = "id";
                             }
-                            str += '<option>' + value.get(labelName) + '</option>';
+                            str += '<option>' + _.escape(value.get(labelName)) + '</option>';
                         });
                     }
                 }
@@ -591,7 +593,7 @@ define(['require',
                                 var dataValue = that.entityData.get("attributes")[keyData];
                                 if (dataValue !== null) {
                                     _.each(dataValue, function(obj) {
-                                        str += '<option>' + obj + '</option>';
+                                        str += '<option>' + _.escape(obj) + '</option>';
                                     });
                                     $this.html(str);
                                 }

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/590b38ac/dashboardv2/public/js/views/schema/SchemaLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/schema/SchemaLayoutView.js b/dashboardv2/public/js/views/schema/SchemaLayoutView.js
index 21ab40c..8d7dfe4 100644
--- a/dashboardv2/public/js/views/schema/SchemaLayoutView.js
+++ b/dashboardv2/public/js/views/schema/SchemaLayoutView.js
@@ -414,13 +414,13 @@ define(['require',
                     that = this;
                 if (tagOrTerm === "term") {
                     var modal = CommonViewFunction.deleteTagModel({
-                        msg: "<div class='ellipsis'>Remove: " + "<b>" + tagName + "</b> assignment from" + " " + "<b>" + assetName + " ?</b></div>",
+                        msg: "<div class='ellipsis'>Remove: " + "<b>" + _.escape(tagName) + "</b> assignment from" + " " + "<b>" + assetName + " ?</b></div>",
                         titleMessage: Messages.removeTerm,
                         buttonText: "Remove"
                     });
                 } else if (tagOrTerm === "tag") {
                     var modal = CommonViewFunction.deleteTagModel({
-                        msg: "<div class='ellipsis'>Remove: " + "<b>" + tagName + "</b> assignment from" + " " + "<b>" + assetName + " ?</b></div>",
+                        msg: "<div class='ellipsis'>Remove: " + "<b>" + _.escape(tagName) + "</b> assignment from" + " " + "<b>" + assetName + " ?</b></div>",
                         titleMessage: Messages.removeTag,
                         buttonText: "Remove"
                     });

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/590b38ac/dashboardv2/public/js/views/search/SearchLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/search/SearchLayoutView.js b/dashboardv2/public/js/views/search/SearchLayoutView.js
index 2dd2549..38bf6b5 100644
--- a/dashboardv2/public/js/views/search/SearchLayoutView.js
+++ b/dashboardv2/public/js/views/search/SearchLayoutView.js
@@ -124,7 +124,7 @@ define(['require',
                     return model.get('name').toLowerCase();
                 }
                 this.typecollection.fullCollection.sort().each(function(model) {
-                    str += '<option>' + model.get("name") + '</option>';
+                    str += '<option>' + _.escape(model.get("name")) + '</option>';
                 });
                 that.ui.typeLov.html(str);
             },

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/590b38ac/dashboardv2/public/js/views/search/SearchResultLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/search/SearchResultLayoutView.js b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
index ded4e38..71dcb8b 100644
--- a/dashboardv2/public/js/views/search/SearchResultLayoutView.js
+++ b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
@@ -269,7 +269,7 @@ define(['require',
                         if (that.searchCollection.models.length) {
                             that.startRenderTableProcess();
                         }
-                        var resultData = 'Results for <b>' + that.searchCollection.queryParams.query + '</b>';
+                        var resultData = 'Results for <b>' + _.escape(that.searchCollection.queryParams.query) + '</b>';
                         var multiAssignDataTag = '<a href="javascript:void(0)" class="inputAssignTag multiSelectTag assignTag" style="display:none" data-id="addAssignTag"><i class="fa fa-plus"></i>' + " " + 'Assign Tag</a>';
                         if (Globals.taxonomy) {
                             var multiAssignDataTerm = '<a href="javascript:void(0)" class="inputAssignTag multiSelect" style="display:none" data-id="addTerm"><i class="fa fa-folder-o"></i>' + " " + 'Assign Term</a>';
@@ -279,7 +279,8 @@ define(['require',
                         }
 
                     },
-                    silent: true
+                    silent: true,
+                    reset: true
                 });
             },
             startRenderTableProcess: function() {
@@ -444,13 +445,13 @@ define(['require',
                                     }
                                 }
                                 if (model.get('$id$')) {
-                                    nameHtml = '<a href="#!/detailPage/' + (model.get('$id$').id || model.get('$id$')) + '">' + rawValue + '</a>';
+                                    nameHtml = '<a href="#!/detailPage/' + (model.get('$id$').id || model.get('$id$')) + '">' + _.escape(rawValue) + '</a>';
                                 } else {
-                                    nameHtml = '<a>' + rawValue + '</a>';
+                                    nameHtml = '<a>' + _.escape(rawValue) + '</a>';
                                 }
                                 if (model.get('$id$') && model.get('$id$').state && Enums.entityStateReadOnly[model.get('$id$').state]) {
                                     nameHtml += '<button type="button" title="Deleted" class="btn btn-atlasAction btn-atlas deleteBtn"><i class="fa fa-trash"></i></button>';
-                                    return '<div class="readOnly readOnlyLink">' + nameHtml + '</div>';
+                                    return '<div class="readOnly readOnlyLink">' + _.escape(nameHtml) + '</div>';
                                 } else {
                                     nameHtml += '<button title="Edit" data-id="editEntityButton"  data-giud= "' + (model.get('$id$').id || model.get('$id$')) + '" class="btn btn-atlasAction btn-atlas editBtn"><i class="fa fa-pencil"></i></button>'
                                     return nameHtml;
@@ -488,7 +489,7 @@ define(['require',
                                     nameHtml += '<button type="button" title="Deleted" class="btn btn-atlasAction btn-atlas deleteBtn"><i class="fa fa-trash"></i></button>';
                                     return '<div class="readOnly readOnlyLink">' + nameHtml + '</div>';
                                 } else {
-                                    nameHtml += '<button title="Edit" data-giud= "' +(model.get('$id$').id || model.get('$id$')) + '" class="btn btn-atlasAction btn-atlas editBtn"><i class="fa fa-pencil"></i></button>'
+                                    nameHtml += '<button title="Edit" data-giud= "' + (model.get('$id$').id || model.get('$id$')) + '" class="btn btn-atlasAction btn-atlas editBtn"><i class="fa fa-pencil"></i></button>'
                                     return nameHtml;
                                 }
                             }
@@ -619,13 +620,13 @@ define(['require',
                     that = this;
                 if (tagOrTerm === "term") {
                     var modal = CommonViewFunction.deleteTagModel({
-                        msg: "<div class='ellipsis'>Remove: " + "<b>" + tagName + "</b> assignment from" + " " + "<b>" + assetName + " ?</b></div>",
+                        msg: "<div class='ellipsis'>Remove: " + "<b>" + _.escape(tagName) + "</b> assignment from" + " " + "<b>" + assetName + " ?</b></div>",
                         titleMessage: Messages.removeTerm,
                         buttonText: "Remove"
                     });
                 } else if (tagOrTerm === "tag") {
                     var modal = CommonViewFunction.deleteTagModel({
-                        msg: "<div class='ellipsis'>Remove: " + "<b>" + tagName + "</b> assignment from" + " " + "<b>" + assetName + " ?</b></div>",
+                        msg: "<div class='ellipsis'>Remove: " + "<b>" + _.escape(tagName) + "</b> assignment from" + " " + "<b>" + assetName + " ?</b></div>",
                         titleMessage: Messages.removeTag,
                         buttonText: "Remove"
                     });

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/590b38ac/dashboardv2/public/js/views/tag/CreateTagLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/tag/CreateTagLayoutView.js b/dashboardv2/public/js/views/tag/CreateTagLayoutView.js
index bf8f88d..3179276 100644
--- a/dashboardv2/public/js/views/tag/CreateTagLayoutView.js
+++ b/dashboardv2/public/js/views/tag/CreateTagLayoutView.js
@@ -87,7 +87,7 @@ define(['require',
                 if (this.create) {
                     this.tagCollectionList();
                 } else {
-                    this.ui.title.html('<span>' + this.tag + '</span>');
+                    this.ui.title.html('<span>' + _.escape(this.tag) + '</span>');
                 }
                 if (!('placeholder' in HTMLInputElement.prototype)) {
                     this.ui.createTagForm.find('input,textarea').placeholder();
@@ -98,7 +98,7 @@ define(['require',
                     that = this;
                 this.ui.parentTag.empty();
                 this.tagCollection.fullCollection.each(function(val) {
-                    str += '<option>' + val.get("name") + '</option>';
+                    str += '<option>' + _.escape(val.get("name")) + '</option>';
                 });
                 that.ui.parentTag.html(str);
                 console.log(platform);

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/590b38ac/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js b/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js
index 6c3cfe4..b72d84b 100644
--- a/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js
+++ b/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js
@@ -46,6 +46,7 @@ define(['require',
                 addTagListBtn: '[data-id="addTagListBtn"]',
                 addTagtext: '[data-id="addTagtext"]',
                 addTagPlus: '[data-id="addTagPlus"]',
+                addTagBtn: '[data-id="addTagBtn"]',
                 description: '[data-id="description"]',
                 descriptionTextArea: '[data-id="descriptionTextArea"]',
                 publishButton: '[data-id="publishButton"]'
@@ -69,13 +70,29 @@ define(['require',
             bindEvents: function() {
                 this.listenTo(this.collection, 'reset', function() {
                     this.model = this.collection.fullCollection.findWhere({ name: this.tag });
-                    this.renderTagDetail();
+                    /// this.model = this.collection.fullCollection.findWhere({ typeName: $(".dataTypeSelector").val() });
+                    if (this.model) {
+                        this.renderTagDetail();
+                    } else {
+                        this.ui.addTagBtn.hide();
+                        this.ui.editButton.hide();
+                        Utils.notifyError({
+                            content: 'Something went wrong'
+                        });
+                    }
+
                 }, this);
                 this.listenTo(this.tagCollection, 'error', function(error, response) {
+                    this.ui.addTagBtn.hide();
+                    this.ui.editButton.hide();
                     if (response.responseJSON && response.responseJSON.error) {
                         Utils.notifyError({
                             content: response.responseJSON.error
                         });
+                    } else {
+                        Utils.notifyError({
+                            content: 'Something went wrong'
+                        });
                     }
 
                 }, this);
@@ -93,17 +110,17 @@ define(['require',
                 var attributeData = "",
                     attributeDefs = this.model.get("attributeDefs");
                 if (this.model.get("name")) {
-                    this.ui.title.html('<span>' + this.model.get("name") + '</span>');
+                    this.ui.title.html('<span>' + _.escape(this.model.get("name")) + '</span>');
                 }
                 if (this.model.get("description")) {
-                    this.ui.description.html(this.model.get("description"));
+                    this.ui.description.text(this.model.get("description"));
                 }
                 if (this.model.get("attributeDefs")) {
                     if (!_.isArray(attributeDefs)) {
                         attributeDefs = [attributeDefs];
                     }
                     _.each(attributeDefs, function(value, key) {
-                        attributeData += '<span class="inputAttribute">' + value.name + '</span>';
+                        attributeData += '<span class="inputAttribute">' + _.escape(value.name) + '</span>';
                     });
                     this.ui.showAttribute.html(attributeData);
                 }
@@ -190,11 +207,11 @@ define(['require',
                 this.ui.editButton.show();
                 this.ui.editBox.hide();
             },
-            textAreaChangeEvent: function(view, modal) {
+            textAreaChangeEvent: function(view) {
                 if (this.model.get('description') === view.ui.description.val()) {
-                    modal.$el.find('button.ok').prop('disabled', true);
+                    this.modal.$el.find('button.ok').prop('disabled', true);
                 } else {
-                    modal.$el.find('button.ok').prop('disabled', false);
+                    this.modal.$el.find('button.ok').prop('disabled', false);
                 }
             },
             onPublishClick: function(view) {
@@ -210,7 +227,7 @@ define(['require',
                     'modules/Modal'
                 ], function(CreateTagLayoutView, Modal) {
                     var view = new CreateTagLayoutView({ 'tagCollection': that.collection, 'model': that.model, 'tag': that.tag });
-                    var modal = new Modal({
+                    that.modal = new Modal({
                         title: 'Edit Tag',
                         content: view,
                         cancelText: "Cancel",
@@ -218,14 +235,14 @@ define(['require',
                         allowCancel: true,
                     }).open();
                     view.ui.description.on('keyup', function(e) {
-                        that.textAreaChangeEvent(view, modal);
+                        that.textAreaChangeEvent(view);
                     });
-                    modal.$el.find('button.ok').prop('disabled', true);
-                    modal.on('ok', function() {
+                    that.modal.$el.find('button.ok').prop('disabled', true);
+                    that.modal.on('ok', function() {
                         that.onPublishClick(view);
                     });
-                    modal.on('closeModal', function() {
-                        modal.trigger('cancel');
+                    that.modal.on('closeModal', function() {
+                        that.modal.trigger('cancel');
                     });
                 });
             }

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/590b38ac/dashboardv2/public/js/views/tag/TagDetailTableLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/tag/TagDetailTableLayoutView.js b/dashboardv2/public/js/views/tag/TagDetailTableLayoutView.js
index 06cc8b1..c02600e 100644
--- a/dashboardv2/public/js/views/tag/TagDetailTableLayoutView.js
+++ b/dashboardv2/public/js/views/tag/TagDetailTableLayoutView.js
@@ -136,7 +136,7 @@ define(['require',
                                         var stringArr = [];
                                         tagValue = "";
                                         _.each(values, function(val, key) {
-                                            var attrName = "<span>" + key + ":" + val + "</span>";
+                                            var attrName = "<span>" + _.escape(key) + ":" + _.escape(val) + "</span>";
                                             stringArr.push(attrName);
                                         });
                                         tagValue += stringArr.join(", ");
@@ -178,13 +178,13 @@ define(['require',
                     that = this;
                 if (that.term) {
                     var modal = CommonViewFunction.deleteTagModel({
-                        msg: "<div class='ellipsis'>Remove: " + "<b>" + tagName + "</b> assignment from" + " " + "<b>" + this.assetName + "?</b></div>",
+                        msg: "<div class='ellipsis'>Remove: " + "<b>" + _.escape(tagName) + "</b> assignment from" + " " + "<b>" + this.assetName + "?</b></div>",
                         titleMessage: Messages.removeTerm,
                         buttonText: "Remove",
                     });
                 } else {
                     var modal = CommonViewFunction.deleteTagModel({
-                        msg: "<div class='ellipsis'>Remove: " + "<b>" + tagName + "</b> assignment from" + " " + "<b>" + this.assetName + "?</b></div>",
+                        msg: "<div class='ellipsis'>Remove: " + "<b>" + _.escape(tagName) + "</b> assignment from" + " " + "<b>" + this.assetName + "?</b></div>",
                         titleMessage: Messages.removeTag,
                         buttonText: "Remove",
                     });

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/590b38ac/dashboardv2/public/js/views/tag/TagLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/tag/TagLayoutView.js b/dashboardv2/public/js/views/tag/TagLayoutView.js
index 6997658..0ac3745 100644
--- a/dashboardv2/public/js/views/tag/TagLayoutView.js
+++ b/dashboardv2/public/js/views/tag/TagLayoutView.js
@@ -147,15 +147,16 @@ define(['require',
                     return model.get('name').toLowerCase();
                 };
                 that.collection.fullCollection.sort().each(function(model) {
+                    var name = _.escape(model.get('name'))
                     if (searchString) {
-                        if (model.get('name').search(new RegExp(searchString, "i")) != -1) {
+                        if (name.search(new RegExp(searchString, "i")) != -1) {
                             // data-name="<space>'<tagName>'"  Space is required for DSL search Input 
-                            str += '<li class="parent-node" data-id="tags"><div class="tools"><i class="fa fa-ellipsis-h tagPopover"></i></div><a href="#!/tag/tagAttribute/' + model.get('name') + '"  data-name="`' + model.get('name') + '`" >' + model.get('name') + '</a></li>';
+                            str += '<li class="parent-node" data-id="tags"><div class="tools"><i class="fa fa-ellipsis-h tagPopover"></i></div><a href="#!/tag/tagAttribute/' + name + '"  data-name=" `' + name + '`" >' + name + '</a></li>';
                         } else {
                             return;
                         }
                     } else {
-                        str += '<li class="parent-node" data-id="tags"><div class="tools"><i class="fa fa-ellipsis-h tagPopover"></i></div><a href="#!/tag/tagAttribute/' + model.get('name') + '"  data-name="`' + model.get('name') + '`">' + model.get('name') + '</a></li>';
+                        str += '<li class="parent-node" data-id="tags"><div class="tools"><i class="fa fa-ellipsis-h tagPopover"></i></div><a href="#!/tag/tagAttribute/' + name + '"  data-name=" `' + name + '`">' + name + '</a></li>';
                     }
                 });
                 this.ui.tagsParent.empty().html(str);
@@ -187,7 +188,7 @@ define(['require',
                         modal.$el.find('button.ok').removeAttr("disabled");
                     });
                     view.ui.tagName.on('keyup', function(e) {
-                        if (e.keyCode == 8 && e.currentTarget.value == "") {
+                        if ((e.keyCode == 8 || e.keyCode == 32 || e.keyCode == 46) && e.currentTarget.value == "") {
                             modal.$el.find('button.ok').attr("disabled", "true");
                         }
                     });

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/590b38ac/dashboardv2/public/js/views/tag/addTagModalView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/tag/addTagModalView.js b/dashboardv2/public/js/views/tag/addTagModalView.js
index 206d826..649cad5 100644
--- a/dashboardv2/public/js/views/tag/addTagModalView.js
+++ b/dashboardv2/public/js/views/tag/addTagModalView.js
@@ -57,6 +57,7 @@ define(['require',
                 cancelText: "Cancel",
                 allowCancel: true,
             }).open();
+            this.modal.$el.find('button.ok').attr("disabled", true);
             this.on('ok', function() {
                 var tagName = this.ui.addTagOptions.val();
                 var tagAttributes = {};
@@ -103,11 +104,11 @@ define(['require',
                 this.tagsCollection();
             }, this);
             this.listenTo(this.commonCollection, 'reset', function() {
-                --this.asyncAttrFetchCounter;
+                --this.asyncAttrFetchCounter
                 this.subAttributeData();
             }, this);
             this.listenTo(this.commonCollection, 'error', function() {
-                --this.asyncAttrFetchCounter;
+                --this.asyncAttrFetchCounter
                 this.$('.attrLoader').hide();
             }, this);
         },
@@ -118,17 +119,17 @@ define(['require',
 
             var str = '<option selected="selected" disabled="disabled">-- Select a tag from the dropdown list --</option>';
             this.collection.fullCollection.sort().each(function(obj, key) {
-                str += '<option>' + obj.get('name') + '</option>';
+                str += '<option>' + _.escape(obj.get('name')) + '</option>';
             });
             this.ui.addTagOptions.html(str);
             this.ui.addTagOptions.select2({
                 placeholder: "Select Tag",
-                allowClear: true
+                allowClear: false
             });
         },
         onChangeTagDefination: function() {
             this.ui.tagAttribute.empty();
-            var saveBtn = this.modal.$el.find('.btn-success');
+            var saveBtn = this.modal.$el.find('button.ok');
             saveBtn.prop("disabled", false);
             var tagname = this.ui.addTagOptions.val();
             this.hideAttributeBox();
@@ -157,7 +158,7 @@ define(['require',
             if (this.commonCollection.models[0]) {
                 if (this.commonCollection.models[0].get('attributeDefs')) {
                     _.each(this.commonCollection.models[0].get('attributeDefs'), function(obj) {
-                        that.ui.tagAttribute.append('<div class="form-group"><label>' + obj.name + '</label>' +
+                        that.ui.tagAttribute.append('<div class="form-group"><label>' + _.escape(obj.name) + '</label>' +
                             '<input type="text" class="form-control attributeInputVal attrName" data-key="' + obj.name + '" ></input></div>');
                     });
                 }


Mime
View raw message