Repository: incubator-atlas Updated Branches: refs/heads/master a05f752d2 -> 6148b22ac
ATLAS-843 Atlas UI: Feature to search terms in left navigation. (Kalyanikashikar via sumasai) Project: http://git-wip-us.apache.org/repos/asf/incubator-atlas/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-atlas/commit/6148b22a Tree: http://git-wip-us.apache.org/repos/asf/incubator-atlas/tree/6148b22a Diff: http://git-wip-us.apache.org/repos/asf/incubator-atlas/diff/6148b22a Branch: refs/heads/master Commit: 6148b22acd479f83335b5f272981f04771f86158 Parents: a05f752 Author: Suma Shivaprasad <[email protected]> Authored: Wed Jun 1 15:09:29 2016 -0700 Committer: Suma Shivaprasad <[email protected]> Committed: Wed Jun 1 15:09:29 2016 -0700 ---------------------------------------------------------------------- .../BusinessCatalogLayoutView_tmpl.html | 7 +- dashboardv2/public/js/utils/Utils.js | 11 +- .../BusinessCatalogLayoutView.js | 102 ++++++++++++++----- release-log.txt | 1 + 4 files changed, 90 insertions(+), 31 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6148b22a/dashboardv2/public/js/templates/business_catalog/BusinessCatalogLayoutView_tmpl.html ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/templates/business_catalog/BusinessCatalogLayoutView_tmpl.html b/dashboardv2/public/js/templates/business_catalog/BusinessCatalogLayoutView_tmpl.html index ab6e234..844071d 100644 --- a/dashboardv2/public/js/templates/business_catalog/BusinessCatalogLayoutView_tmpl.html +++ b/dashboardv2/public/js/templates/business_catalog/BusinessCatalogLayoutView_tmpl.html @@ -14,6 +14,9 @@ * See the License for the specific language governing permissions and * limitations under the License. --> +<div class="form-group"> + <select type="text" class="form-control" data-id="searchTermInput" placeholder="Search term"></select> +</div> <div class="row"> <button class="btn btn-taxanomyBack btn-atlas" data-id="backTaxanomy"><i class="fa fa-chevron-left"></i> Back</button> </div> @@ -21,8 +24,8 @@ <ul class="taxonomyTree"> <div class="contentLoading"></div> <li class="children parent" data-id="Parent"></li> - <li class="chileds parentChiled"> - <ul data-id="chiledList"> + <li class="childs parentChild"> + <ul data-id="childList"> </ul> </li> </ul> http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6148b22a/dashboardv2/public/js/utils/Utils.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/utils/Utils.js b/dashboardv2/public/js/utils/Utils.js index 5923b3f..e867f2b 100644 --- a/dashboardv2/public/js/utils/Utils.js +++ b/dashboardv2/public/js/utils/Utils.js @@ -75,11 +75,18 @@ define(['require', 'utils/Globals'], function(require, Globals) { }); }; Utils.defaultErrorHandler = function(model, error) { - /*require(['views/common/ErrorView', 'App'], function(vError, App) {*/ if (error.status == 401) { window.location = 'login.jsp' } else if (error.status == 419) { window.location = 'login.jsp' + } else if (error.status == 403) { + var message = "You are not authorized"; + if (error.statusText) { + message = JSON.parse(error.statusText).AuthorizationError; + } + Utils.notifyError({ + content: message + }); } else if (error.status == "0") { var diffTime = (new Date().getTime() - prevNetworkErrorTime); if (diffTime > 3000) { @@ -90,8 +97,6 @@ define(['require', 'utils/Globals'], function(require, Globals) { }); } } - /*});*/ - }; Utils.localStorage = { http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6148b22a/dashboardv2/public/js/views/business_catalog/BusinessCatalogLayoutView.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/views/business_catalog/BusinessCatalogLayoutView.js b/dashboardv2/public/js/views/business_catalog/BusinessCatalogLayoutView.js index 044afc2..66f870a 100644 --- a/dashboardv2/public/js/views/business_catalog/BusinessCatalogLayoutView.js +++ b/dashboardv2/public/js/views/business_catalog/BusinessCatalogLayoutView.js @@ -37,10 +37,11 @@ define(['require', /** ui selector cache */ ui: { Parent: '[data-id="Parent"]', - chiledList: '[data-id="chiledList"]', + childList: '[data-id="childList"]', liClick: 'li a[data-href]', backTaxanomy: '[data-id="backTaxanomy"]', - expandArrow: '[data-id="expandArrow"]' + expandArrow: '[data-id="expandArrow"]', + searchTermInput: '[data-id="searchTermInput"]' }, /** ui events hash */ events: function() { @@ -56,6 +57,11 @@ define(['require', }; events['click ' + this.ui.backTaxanomy] = 'backButtonTaxanomy'; events['click ' + this.ui.expandArrow] = 'changeArrowState'; + events["change " + this.ui.searchTermInput] = function() { + this.singleClick = false; + var termUrl = this.termCollection.url.split("/", 5).join("/") + "/" + this.ui.searchTermInput.val().split(".").join("/terms/"); + this.forwardClick(undefined, true, termUrl); + }; return events; }, /** @@ -65,7 +71,9 @@ define(['require', initialize: function(options) { _.extend(this, _.pick(options, 'globalVent', 'url')); this.parentCollection = new VCatalogList(); - this.chiledCollection = new VCatalogList(); + this.childCollection = new VCatalogList(); + this.taxanomy = new VCatalogList(); + this.termCollection = new VCatalogList(); this.dblClick = false; this.singleClick = false; }, @@ -75,11 +83,17 @@ define(['require', this.dblClick = false; this.generateTree(true); }, this); - this.listenTo(this.chiledCollection, 'reset', function() { + this.listenTo(this.childCollection, 'reset', function() { this.dblClick = false; this.generateTree(); }, this); - this.listenTo(this.chiledCollection, 'error', function(model, response) { + this.listenTo(this.taxanomy, 'reset', function() { + this.searchResult(); + }, this); + this.listenTo(this.termCollection, 'reset', function() { + this.termSearchData(); + }, this); + this.listenTo(this.childCollection, 'error', function(model, response) { if (response && response.responseJSON && response.responseJSON.message) { Utils.notifyError({ content: response.responseJSON.message @@ -102,7 +116,9 @@ define(['require', var that = this; this.bindEvents(); that.ui.backTaxanomy.hide(); + this.fetchCollection(this.url, true); + $('body').on("click", '.termPopoverList li', function(e) { that[$(this).find("a").data('fn')](e); }); @@ -114,6 +130,7 @@ define(['require', that.$('.termPopover').popover('hide'); } }); + this.fetchTaxanomyCollections(); }, manualRender: function(url, isParent, back) { if (back) { @@ -143,16 +160,16 @@ define(['require', scope.removeClass('fa-chevron-down'); scope.addClass('fa-chevron-right'); this.addActiveClass(scope[0]); - this.ui.chiledList.hide(); + this.ui.childList.hide(); } else { - if (e && $(e.currentTarget).parents('li.parentChiled').length) { + if (e && $(e.currentTarget).parents('li.parentChild').length) { scope.parent('li').find('.tools .taxanomyloader').show(); this.forwardClick(e, true); } else { scope.addClass('fa-chevron-down'); scope.removeClass('fa-chevron-right'); this.singleClick = false; - this.ui.chiledList.show(); + this.ui.childList.show(); } } @@ -177,9 +194,9 @@ define(['require', this.parentCollection.fullCollection.reset(undefined, { silent: true }); this.parentCollection.fetch({ reset: true }); } else { - this.chiledCollection.url = this.url + "?hierarchy/path:."; - this.chiledCollection.fullCollection.reset(undefined, { silent: true }); - this.chiledCollection.fetch({ reset: true }); + this.childCollection.url = this.url + "?hierarchy/path:."; + this.childCollection.fullCollection.reset(undefined, { silent: true }); + this.childCollection.fetch({ reset: true }); } }, forwardClick: function(e, forward, url) { @@ -190,22 +207,29 @@ define(['require', if (url) { hrefUrl = url; } - + if (!e && !url) { + var dataHref = this.ui.Parent.find('a').data('href'); + if (dataHref) { + hrefUrl = dataHref; + } + } if (forward) { this.dblClick = true; - this.ui.chiledList.show(); + this.ui.childList.show(); this.fetchCollection(hrefUrl, true); } else { this.singleClick = true; } - Utils.setUrl({ - url: '#!/taxonomy/detailCatalog' + hrefUrl, - mergeBrowserUrl: false, - updateTabState: function() { - return { taxonomyUrl: this.url, stateChanged: false }; - }, - trigger: true - }); + if (hrefUrl.length > 1) { + Utils.setUrl({ + url: '#!/taxonomy/detailCatalog' + hrefUrl, + mergeBrowserUrl: false, + updateTabState: function() { + return { taxonomyUrl: this.url, stateChanged: false }; + }, + trigger: true + }); + } if (e) { this.addActiveClass(e); } @@ -216,7 +240,7 @@ define(['require', }, generateTree: function(isParent) { var parentLi = "", - chiledLi = "", + childLi = "", that = this; function createTaxonomy(url) { @@ -246,18 +270,18 @@ define(['require', var hrefUrl = "/api" + href.split("/api")[1]; that.fetchCollection(hrefUrl); } - that.ui.chiledList.html(''); + that.ui.childList.html(''); that.ui.Parent.addClass('active'); that.ui.Parent.html(parentLi); } function createTerm() { - _.each(that.chiledCollection.fullCollection.models, function(model, key) { + _.each(that.childCollection.fullCollection.models, function(model, key) { var name = Utils.checkTagOrTerm(model.get('name')); var hrefUrl = "/api" + model.get('href').split("/api")[1] - chiledLi += '<li class="children"><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-chevron-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></li>'; + childLi += '<li class="children"><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-chevron-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></li>'; }); - that.ui.chiledList.html(chiledLi); + that.ui.childList.html(childLi); } if (isParent) { @@ -422,6 +446,32 @@ define(['require', } }); } + }, + fetchTaxanomyCollections: function() { + this.taxanomy.fetch({ reset: true }); + }, + searchResult: function() { + + var that = this; + _.each(this.taxanomy.models, function(model, key) { + var name = model.get('name'); + that.termCollection.url = "/api/atlas/v1/taxonomies/" + name + "/terms"; + }); + this.termCollection.fetch({ reset: true }); + }, + termSearchData: function() { + var that = this; + var str = '<option></option>'; + for (var j = 0; j < this.termCollection.models.length; j++) { + var terms = this.termCollection.models[j].attributes.name; + str += '<option>' + terms + '</option>'; + this.ui.searchTermInput.html(str); + } + // this.ui.searchTermInput.setAttribute('data-href' : that.termCollection.url); + this.ui.searchTermInput.select2({ + placeholder: "Search Term", + allowClear: true + }); } }); return BusinessCatalogLayoutView; http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6148b22a/release-log.txt ---------------------------------------------------------------------- diff --git a/release-log.txt b/release-log.txt index 1bb1920..3ba4725 100644 --- a/release-log.txt +++ b/release-log.txt @@ -22,6 +22,7 @@ ATLAS-409 Atlas will not import avro tables with schema read from a file (dosset ATLAS-379 Create sqoop and falcon metadata addons (venkatnrangan,bvellanki,sowmyaramesh via shwethags) ALL CHANGES: +ATLAS-843 Atlas UI: Feature to search terms in left navigation. (Kalyanikashikar via sumasai) ATLAS-731 Remove dashboard module in Atlas, replaced by dashboardv2 (kevalbhatt18 via sumasai) ATLAS-664 UI: Add Support for Versioning / History (Kalyanikashikar via yhemanth) ATLAS-833 Make default build profile for External HBase and Solr (tbeerbower via yhemanth)
