You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by kb...@apache.org on 2017/03/04 11:43:28 UTC
incubator-atlas git commit: ATLAS-1608 :Search UI improvement
Repository: incubator-atlas
Updated Branches:
refs/heads/master 670a4c001 -> b9779eca9
ATLAS-1608 :Search UI improvement
Project: http://git-wip-us.apache.org/repos/asf/incubator-atlas/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-atlas/commit/b9779eca
Tree: http://git-wip-us.apache.org/repos/asf/incubator-atlas/tree/b9779eca
Diff: http://git-wip-us.apache.org/repos/asf/incubator-atlas/diff/b9779eca
Branch: refs/heads/master
Commit: b9779eca9c5bbc36e6c36e8ef6bcfb4979e07f10
Parents: 670a4c0
Author: kevalbhatt <kb...@apache.org>
Authored: Sat Mar 4 16:34:20 2017 +0530
Committer: kevalbhatt <kb...@apache.org>
Committed: Sat Mar 4 17:12:15 2017 +0530
----------------------------------------------------------------------
dashboardv2/public/css/scss/override.scss | 5 +
dashboardv2/public/css/scss/search.scss | 95 +++++-----
dashboardv2/public/js/collection/VSearchList.js | 6 +-
dashboardv2/public/js/router/Router.js | 31 ++--
.../SideNavLayoutView_tmpl.html | 6 +-
.../search/AdvancedSearchInfo_tmpl.html | 38 ++++
.../templates/search/SearchLayoutView_tmpl.html | 28 ++-
.../search/SearchResultLayoutView_tmpl.html | 4 +-
dashboardv2/public/js/utils/Enums.js | 2 +-
.../views/business_catalog/SideNavLayoutView.js | 6 +-
.../js/views/business_catalog/TreeLayoutView.js | 2 +-
.../js/views/search/AdvancedSearchInfoView.js | 61 +++++++
.../js/views/search/SearchDetailLayoutView.js | 10 +-
.../public/js/views/search/SearchLayoutView.js | 176 +++++++++++--------
.../js/views/search/SearchResultLayoutView.js | 75 +++-----
.../public/js/views/tag/TagDetailLayoutView.js | 3 +-
.../public/js/views/tag/TagLayoutView.js | 2 +-
release-log.txt | 6 +
18 files changed, 325 insertions(+), 231 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b9779eca/dashboardv2/public/css/scss/override.scss
----------------------------------------------------------------------
diff --git a/dashboardv2/public/css/scss/override.scss b/dashboardv2/public/css/scss/override.scss
index 89c12ca..48ab1a6 100644
--- a/dashboardv2/public/css/scss/override.scss
+++ b/dashboardv2/public/css/scss/override.scss
@@ -255,3 +255,8 @@
.ui-pnotify-text {
word-break: break-all;
}
+
+.advancedInfo{
+ margin-left: 5px;
+ cursor: pointer;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b9779eca/dashboardv2/public/css/scss/search.scss
----------------------------------------------------------------------
diff --git a/dashboardv2/public/css/scss/search.scss b/dashboardv2/public/css/scss/search.scss
index a754924..8c3dbec 100644
--- a/dashboardv2/public/css/scss/search.scss
+++ b/dashboardv2/public/css/scss/search.scss
@@ -19,68 +19,65 @@
//colors
$color_celeste_approx: #1D1F2B;
$switchTransition: .4s ease-out;
-
@mixin transition($transition...) {
- -webkit-transition: $transition;
- -moz-transition: $transition;
- -o-transition: $transition;
- transition: $transition;
+ -webkit-transition: $transition;
+ -moz-transition: $transition;
+ -o-transition: $transition;
+ transition: $transition;
}
@mixin transition-property($properties...) {
- -webkit-transition-property: $properties;
- -moz-transition-property: $properties;
- -o-transition-property: $properties;
- transition-property: $properties;
+ -webkit-transition-property: $properties;
+ -moz-transition-property: $properties;
+ -o-transition-property: $properties;
+ transition-property: $properties;
}
.switch {
- position: relative;
- width: 50px;
- height: 22px;
- margin-left: 8px;
- padding: 3px;
- vertical-align: top;
- background-color: $color_celeste_approx;
- border-radius: 18px;
- cursor: pointer;
+ position: relative;
+ width: 50px;
+ height: 22px;
+ margin-left: 8px;
+ padding: 3px;
+ vertical-align: top;
+ background-color: $color_celeste_approx;
+ border-radius: 18px;
+ cursor: pointer;
}
.switch-input {
- position: absolute;
- top: 0;
- left: 0;
- opacity: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ opacity: 0;
}
.switch-slider {
- position: absolute;
- top: 1px;
- left: 3px;
- width: 16px;
- height: 16px;
- border-radius: 10px;
- box-shadow: 1px 1px 5px rgba(black, .2);
- @include transition(left #{$switchTransition});
-
- &:before {
- content: '';
position: absolute;
- top: 50%;
- left: 50%;
- margin: -6px 0 0 -8px;
+ top: 1px;
+ left: 3px;
width: 16px;
height: 16px;
- background-color: $color_jungle_green_approx;
border-radius: 10px;
- box-shadow: inset 0 1px rgba(black, .02);
- @include transition(inherit)
- }
-
- .switch-input:checked ~ & {
- left: 30px;
- box-shadow: -1px 1px 5px rgba(black, .2);
- }
+ box-shadow: 1px 1px 5px rgba(black, .2);
+ @include transition(left #{$switchTransition});
+ &:before {
+ content: '';
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ margin: -6px 0 0 -8px;
+ width: 16px;
+ height: 16px;
+ background-color: $color_jungle_green_approx;
+ border-radius: 10px;
+ box-shadow: inset 0 1px rgba(black, .02);
+ @include transition(inherit)
+ }
+ .switch-input:checked ~ & {
+ left: 30px;
+ box-shadow: -1px 1px 5px rgba(black, .2);
+ }
}
.advanceSearchBtn {
@@ -109,3 +106,11 @@ $switchTransition: .4s ease-out;
.btnAssign {
margin-bottom: 15px;
}
+
+.srchType {
+ margin: 5px 0px;
+ .srchTitle {
+ font-size: 14px;
+ color: $gray
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b9779eca/dashboardv2/public/js/collection/VSearchList.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/collection/VSearchList.js b/dashboardv2/public/js/collection/VSearchList.js
index 60fe8fb..6a84943 100644
--- a/dashboardv2/public/js/collection/VSearchList.js
+++ b/dashboardv2/public/js/collection/VSearchList.js
@@ -37,11 +37,7 @@ define(['require',
parseRecords: function(resp, options) {
this.queryType = resp.queryType;
this.queryText = resp.queryText;
- if (resp.queryType && resp.queryType == "DSL") {
- return resp.entities ? resp.entities : [];
- } else {
- return resp.fullTextResult ? resp.fullTextResult : [];
- }
+ return resp.entities ? resp.entities : [];
},
},
//Static Class Members
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b9779eca/dashboardv2/public/js/router/Router.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/router/Router.js b/dashboardv2/public/js/router/Router.js
index 799cbc7..f68927e 100644
--- a/dashboardv2/public/js/router/Router.js
+++ b/dashboardv2/public/js/router/Router.js
@@ -29,7 +29,7 @@ define([
var AppRouter = Backbone.Router.extend({
routes: {
// Define some URL routes
- '': 'commonAction',
+ '': 'defaultAction',
'!/': 'tagAttributePageLoad',
'!/tag/tagAttribute/(*name)': 'tagAttributePageLoad',
'!/taxonomy/detailCatalog/(*url)': 'detailCatalog',
@@ -243,31 +243,20 @@ define([
'value': paramObj,
'entityDefCollection': that.entityDefCollection,
'typeHeaders': that.typeHeaders,
- 'initialView': paramObj.query.trim().length === 0
+ 'initialView': (paramObj.query.trim() || paramObj.type || (paramObj.dslChecked == "true" ? "" : paramObj.tag)).length === 0
}));
});
},
defaultAction: function(actions) {
// We have no matching route, lets just log what the URL was
- if (Globals.taxonomy) {
- Utils.setUrl({
- url: '#!/taxonomy',
- mergeBrowserUrl: false,
- updateTabState: function() {
- return { taxonomyUrl: this.url, stateChanged: false };
- },
- trigger: true
- });
- } else {
- Utils.setUrl({
- url: '#!/tag',
- mergeBrowserUrl: false,
- updateTabState: function() {
- return { tagUrl: this.url, stateChanged: false };
- },
- trigger: true
- });
- }
+ Utils.setUrl({
+ url: '#!/search',
+ mergeBrowserUrl: false,
+ updateTabState: function() {
+ return { searchUrl: this.url, stateChanged: false };
+ },
+ trigger: true
+ });
console.log('No route:', actions);
}
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b9779eca/dashboardv2/public/js/templates/business_catalog/SideNavLayoutView_tmpl.html
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/templates/business_catalog/SideNavLayoutView_tmpl.html b/dashboardv2/public/js/templates/business_catalog/SideNavLayoutView_tmpl.html
index 38f76ff..3f4c11a 100644
--- a/dashboardv2/public/js/templates/business_catalog/SideNavLayoutView_tmpl.html
+++ b/dashboardv2/public/js/templates/business_catalog/SideNavLayoutView_tmpl.html
@@ -19,11 +19,11 @@
<a href="index.html"><i class="fa fa-globe"></i> Apache Atlas</a>
</li>
<ul class="tabs" style="width: 100%;" role="tablist">
- <li role="presentation" class="{{tabClass}}"><a href="#tab-tag" aria-controls="tab-tag" data-name="tab-tag" role="tab" data-toggle="tab">Tags</a></li>
+ <li role="presentation" class="{{tabClass}}"><a href="#tab-search" aria-controls="tab-search" data-name="tab-search" role="tab" data-toggle="tab" class=""><i class="fa fa-search"></i> Search</a></li>
+ <li role="presentation" class="{{tabClass}}"><a href="#tab-tag" aria-controls="tab-tag" data-name="tab-tag" role="tab" data-toggle="tab"><i class="fa fa-tags"></i> Tags</a></li>
{{#if taxonomy}}
- <li role="presentation" class="tab col-sm-4"><a href="#tab-taxonomy" aria-controls="tab-taxonomy" data-name="tab-taxonomy" role="tab" data-toggle="tab" class="">Taxonomy</a></li>
+ <li role="presentation" class="tab col-sm-4"><a href="#tab-taxonomy" aria-controls="tab-taxonomy" data-name="tab-taxonomy" role="tab" data-toggle="tab" class=""><i class="fa fa-sitemap"></i> Taxonomy</a></li>
{{/if}}
- <li role="presentation" class="{{tabClass}}"><a href="#tab-search" aria-controls="tab-search" data-name="tab-search" role="tab" data-toggle="tab" class=""><i class="fa fa-search"></i> Search</a></li>
</ul>
</ul>
<div class="tab-content">
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b9779eca/dashboardv2/public/js/templates/search/AdvancedSearchInfo_tmpl.html
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/templates/search/AdvancedSearchInfo_tmpl.html b/dashboardv2/public/js/templates/search/AdvancedSearchInfo_tmpl.html
new file mode 100644
index 0000000..9b8e1bc
--- /dev/null
+++ b/dashboardv2/public/js/templates/search/AdvancedSearchInfo_tmpl.html
@@ -0,0 +1,38 @@
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+-->
+<div class="">
+ <h4>Use DSL (Doamin Specific Language) to build queries</h4>
+ <ul>
+ <li><b>Entity Name</b></li>
+ <li>name="string"</li>
+ </ul>
+ <ul>
+ <li><b>Joining queries</b></li>
+ <li>name="sales_fact",columns as column select column.name</li>
+ </ul>
+ <ul>
+ <li><b>Query Name</b></li>
+ <li>Query Example</li>
+ </ul>
+ <ul>
+ <li><b>Query Name</b></li>
+ <li>Query Example</li>
+ </ul>
+ <ul>
+ <a href="http://atlas.incubator.apache.org/Search.html" target="_blank">More sample queries and use-cases >></a>
+ </ul>
+</div>
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b9779eca/dashboardv2/public/js/templates/search/SearchLayoutView_tmpl.html
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/templates/search/SearchLayoutView_tmpl.html b/dashboardv2/public/js/templates/search/SearchLayoutView_tmpl.html
index 5ccfe18..a766cdf 100644
--- a/dashboardv2/public/js/templates/search/SearchLayoutView_tmpl.html
+++ b/dashboardv2/public/js/templates/search/SearchLayoutView_tmpl.html
@@ -17,29 +17,41 @@
<div class="row row-margin-bottom">
<div class="col-sm-12" style="margin:15px 0px;">
<div class="row">
- <div class="col-md-6">
- <span class="pull-left">Text</span>
+ <div class="col-md-9" style="margin-top: 5px;">
+ <span class="pull-left">Basic</span>
<label class="switch pull-left">
<input type="checkbox" class="switch-input" name="queryType" value="text" />
<span class="switch-slider"></span>
</label>
- <span class="pull-left">DSL</span>
+ <span class="pull-left">Advanced</span>
+ <span class="advancedInfo" data-id="advancedInfo"><i class="fa fa-question-circle-o"></i></span>
</div>
- <div class="col-md-6">
+ <div class="col-md-3">
<button type="button" class="btn btn-atlasAction btn-atlas pull-right typeLOV" title="Refresh" data-id="refreshBtn"><i class="fa fa-refresh"></i></button>
</div>
</div>
</div>
<div class="col-sm-12">
<div class="form-group">
- <div class="typeLOV">
- <select data-id="typeLOV"></select>
+ <div class="srchType">
+ <span class="srchTitle">Search By Type</span>
+ <div class="typeLOV">
+ <select data-id="typeLOV"></select>
+ </div>
</div>
- <div class="searchInputClick">
- <input type="text" class="form-control" data-id="searchInput" placeholder="Search using a query string: e.g. sales_fact" style="margin-top: 5px;">
+ <div class="srchType tagBox">
+ <span class="srchTitle">Search By Tag</span>
+ <div class="typeLOV">
+ <select data-id="tagLOV"></select>
+ </div>
+ </div>
+ <div class="srchType">
+ <span class="srchTitle">Search By Query</span>
+ <input type="text" class="form-control" data-id="searchInput" placeholder="Search using a query string: e.g. sales_fact" style="margin: 5px 0px;">
</div>
</div>
<div class="clearAdvanceSearch" data-id="clearSearch">Clear</div>
<button type="button" class="btn btn-atlas advanceSearchBtn" data-id="searchBtn" disabled="disabled">Search</button>
</div>
<div id="searchResult"></div>
+</div>
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b9779eca/dashboardv2/public/js/templates/search/SearchResultLayoutView_tmpl.html
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/templates/search/SearchResultLayoutView_tmpl.html b/dashboardv2/public/js/templates/search/SearchResultLayoutView_tmpl.html
index eece7d2..f51ea0a 100644
--- a/dashboardv2/public/js/templates/search/SearchResultLayoutView_tmpl.html
+++ b/dashboardv2/public/js/templates/search/SearchResultLayoutView_tmpl.html
@@ -34,9 +34,9 @@
<div id="r_searchResultTableLayoutView">
{{#if entityCreate}}
<div class="entityLink" style="display:none">
- <h1><b>Atlas Search</b></h1>
+ <h1><b>{{searchType}}</b></h1>
<p class="entityLink">Search Atlas for existing entities or
- <a href="javascript:void(0)" data-id='createEntity'> create new entity </a><i class="fa fa-question-circle" aria-hidden="true"></i>
+ <a href="javascript:void(0)" data-id='createEntity'> create new entity </a>
</p>
</div>
{{/if}}
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b9779eca/dashboardv2/public/js/utils/Enums.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/utils/Enums.js b/dashboardv2/public/js/utils/Enums.js
index 4948dcc..c779cd4 100644
--- a/dashboardv2/public/js/utils/Enums.js
+++ b/dashboardv2/public/js/utils/Enums.js
@@ -44,7 +44,7 @@ define(['require'], function(require) {
Enums.searchUrlType = {
DSL: 'dsl',
- FULLTEXT: 'fulltext'
+ FULLTEXT: 'basic'
}
return Enums;
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b9779eca/dashboardv2/public/js/views/business_catalog/SideNavLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/business_catalog/SideNavLayoutView.js b/dashboardv2/public/js/views/business_catalog/SideNavLayoutView.js
index d92a0e8..b2c144c 100644
--- a/dashboardv2/public/js/views/business_catalog/SideNavLayoutView.js
+++ b/dashboardv2/public/js/views/business_catalog/SideNavLayoutView.js
@@ -111,13 +111,13 @@ define(['require',
});
},
selectTab: function() {
- if (Utils.getUrlState.isTagTab() || (Utils.getUrlState.isInitial() && !Globals.taxonomy)) {
+ if (Utils.getUrlState.isTagTab()) {
this.$('.tabs').find('li a[aria-controls="tab-tag"]').parents('li').addClass('active').siblings().removeClass('active');
this.$('.tab-content').find('div#tab-tag').addClass('active').siblings().removeClass('active');
- } else if (Utils.getUrlState.isTaxonomyTab() || (Utils.getUrlState.isInitial() && Globals.taxonomy)) {
+ } else if (Utils.getUrlState.isTaxonomyTab()) {
this.$('.tabs').find('li a[aria-controls="tab-taxonomy"]').parents('li').addClass('active').siblings().removeClass('active');
this.$('.tab-content').find('div#tab-taxonomy').addClass('active').siblings().removeClass('active');
- } else if (Utils.getUrlState.isSearchTab() || (Utils.getUrlState.isDetailPage())) {
+ } else if (Utils.getUrlState.isSearchTab() || (Utils.getUrlState.isDetailPage()) || Utils.getUrlState.isInitial()) {
this.$('.tabs').find('li a[aria-controls="tab-search"]').parents('li').addClass('active').siblings().removeClass('active');
this.$('.tab-content').find('div#tab-search').addClass('active').siblings().removeClass('active');
}
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b9779eca/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 7c8eb23..0bca0df 100644
--- a/dashboardv2/public/js/views/business_catalog/TreeLayoutView.js
+++ b/dashboardv2/public/js/views/business_catalog/TreeLayoutView.js
@@ -338,7 +338,7 @@ define(['require',
var dataURL = this.$('.taxonomyTree').find('li[data-id="Parent"]').find("a").data('href');
if (dataURL) {
this.url = dataURL;
- if (this.viewBased) {
+ if (this.viewBased && Utils.getUrlState.isTaxonomyTab()) {
Utils.setUrl({
url: "#!/taxonomy/detailCatalog" + dataURL,
mergeBrowserUrl: false,
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b9779eca/dashboardv2/public/js/views/search/AdvancedSearchInfoView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/search/AdvancedSearchInfoView.js b/dashboardv2/public/js/views/search/AdvancedSearchInfoView.js
new file mode 100644
index 0000000..44319ec
--- /dev/null
+++ b/dashboardv2/public/js/views/search/AdvancedSearchInfoView.js
@@ -0,0 +1,61 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+define(['require',
+ 'backbone',
+ 'hbs!tmpl/search/AdvancedSearchInfo_tmpl',
+], function(require, Backbone, AdvancedSearchInfoTmpl) {
+
+ var AdvancedSearchInfoView = Backbone.Marionette.LayoutView.extend(
+ /** @lends AdvancedSearchInfoView */
+ {
+ _viewName: 'AdvancedSearchInfoView',
+
+ template: AdvancedSearchInfoTmpl,
+
+
+
+ /** Layout sub regions */
+ regions: {},
+
+
+ /** ui selector cache */
+ ui: {
+
+ },
+ /** ui events hash */
+ events: function() {
+ var events = {};
+ return events;
+ },
+ /**
+ * intialize a new AdvancedSearchInfoView Layout
+ * @constructs
+ */
+ initialize: function(options) {
+
+ },
+ bindEvents: function() {},
+ onRender: function() {
+
+ },
+
+
+ });
+ return AdvancedSearchInfoView;
+});
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b9779eca/dashboardv2/public/js/views/search/SearchDetailLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/search/SearchDetailLayoutView.js b/dashboardv2/public/js/views/search/SearchDetailLayoutView.js
index 73bbb97..c24f7a4 100644
--- a/dashboardv2/public/js/views/search/SearchDetailLayoutView.js
+++ b/dashboardv2/public/js/views/search/SearchDetailLayoutView.js
@@ -53,16 +53,10 @@ define(['require',
var that = this;
require(['views/search/SearchResultLayoutView'], function(SearchResultLayoutView) {
- var value = {};
- if (that.value) {
- value = {
- 'query': that.value.query,
- 'searchType': that.value.searchType
- };
- }
+
if (that.RSearchResultLayoutView) {
that.RSearchResultLayoutView.show(new SearchResultLayoutView({
- value: value,
+ value: that.value,
tag: that.tag,
initialView: that.initialView,
entityDefCollection: that.entityDefCollection,
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b9779eca/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 df7e448..d3a9030 100644
--- a/dashboardv2/public/js/views/search/SearchLayoutView.js
+++ b/dashboardv2/public/js/views/search/SearchLayoutView.js
@@ -42,7 +42,9 @@ define(['require',
searchBtn: '[data-id="searchBtn"]',
clearSearch: '[data-id="clearSearch"]',
typeLov: '[data-id="typeLOV"]',
- refreshBtn: '[data-id="refreshBtn"]'
+ tagLov: '[data-id="tagLOV"]',
+ refreshBtn: '[data-id="refreshBtn"]',
+ advancedInfoBtn: '[data-id="advancedInfo"]'
},
/** ui events hash */
@@ -51,19 +53,18 @@ define(['require',
that = this;
events["keyup " + this.ui.searchInput] = function(e) {
var code = e.which;
- this.ui.searchBtn.removeAttr("disabled");
if (code == 13) {
that.findSearchResult();
}
- if (code == 8 && this.ui.searchInput.val() == "" && this.ui.typeLov.val() == "") {
- this.ui.searchBtn.attr("disabled", "true");
- }
+ this.checkForButtonVisiblity();
};
events["change " + this.ui.searchType] = 'dslFulltextToggle';
events["click " + this.ui.searchBtn] = 'findSearchResult';
events["click " + this.ui.clearSearch] = 'clearSearchData';
- events["change " + this.ui.typeLov] = 'onChangeTypeList';
+ events["change " + this.ui.typeLov] = 'checkForButtonVisiblity';
+ events["change " + this.ui.tagLov] = 'checkForButtonVisiblity';
events["click " + this.ui.refreshBtn] = 'onRefreshButton';
+ events["click " + this.ui.advancedInfoBtn] = 'advancedInfo';
return events;
},
/**
@@ -72,42 +73,68 @@ define(['require',
*/
initialize: function(options) {
_.extend(this, _.pick(options, 'value', 'typeHeaders'));
- this.type = "fulltext";
+ this.type = "basic";
var param = Utils.getUrlState.getQueryParams();
this.query = {
dsl: {
- query: ""
+ query: "",
+ type: ""
},
- fulltext: {
- query: ""
+ basic: {
+ query: "",
+ type: "",
+ tag: ""
}
};
this.dsl = false;
- if (param && param.query && param.searchType) {
- this.query[param.searchType].query = param.query;
+ if (param && param.searchType) {
+ _.extend(this.query[param.searchType], _.pick(param, 'query', 'type', 'tag'));
}
},
bindEvents: function(param) {
this.listenTo(this.typeHeaders, "reset", function(value) {
- this.renderTypeList();
+ this.renderTypeTagList();
this.setValues();
this.ui.typeLov.select2({
- placeholder: "Search For",
+ placeholder: "Select",
allowClear: true
});
+ this.ui.tagLov.select2({
+ placeholder: "Select",
+ allowClear: true
+ });
+ this.checkForButtonVisiblity();
}, this);
},
+ checkForButtonVisiblity: function() {
+ var that = this,
+ value = this.ui.searchInput.val() || this.ui.typeLov.val();
+ if (!this.dsl && !value.length) {
+ value = this.ui.tagLov.val();
+ }
+ if (value && value.length) {
+ this.ui.searchBtn.removeAttr("disabled");
+ setTimeout(function() {
+ that.ui.searchInput.focus();
+ }, 0);
+ } else {
+ this.ui.searchBtn.attr("disabled", "true");
+ }
+ },
onRender: function() {
// array of tags which is coming from url
- this.$('.typeLOV').hide();
- this.renderTypeList();
+ this.renderTypeTagList();
this.setValues();
this.ui.typeLov.select2({
- placeholder: "Search For",
+ placeholder: "Select",
+ allowClear: true
+ });
+ this.ui.tagLov.select2({
+ placeholder: "Select",
allowClear: true
});
- this.ui.searchBtn.attr("disabled", "true");
this.bindEvents();
+ this.checkForButtonVisiblity();
},
fetchCollection: function(value) {
this.typeHeaders.fetch({ reset: true });
@@ -115,33 +142,45 @@ define(['require',
onRefreshButton: function() {
this.fetchCollection();
},
+ advancedInfo: function(e) {
+ require([
+ 'views/search/AdvancedSearchInfoView',
+ 'modules/Modal'
+ ], function(AdvancedSearchInfoView, Modal) {
+ var view = new AdvancedSearchInfoView();
+ var modal = new Modal({
+ title: 'Advanced Search Queries',
+ content: view,
+ okCloses: true,
+ showFooter: true,
+ allowCancel: false
+ }).open();
+ view.on('closeModal', function() {
+ modal.trigger('cancel');
+ });
+ });
+ },
manualRender: function(paramObj) {
this.setValues(paramObj);
},
- renderTypeList: function() {
+ renderTypeTagList: function() {
var that = this;
this.ui.typeLov.empty();
- var str = '<option></option>';
+ var typeStr = '<option></option>',
+ tagStr = typeStr;
this.typeHeaders.fullCollection.comparator = function(model) {
return Utils.getName(model.toJSON(), 'name').toLowerCase();
}
this.typeHeaders.fullCollection.sort().each(function(model) {
if (model.get('category') == 'ENTITY') {
- str += '<option>' + (Utils.getName(model.toJSON(), 'name')) + '</option>';
+ typeStr += '<option>' + (Utils.getName(model.toJSON(), 'name')) + '</option>';
+ }
+ if (model.get('category') == 'CLASSIFICATION') {
+ tagStr += '<option>' + (Utils.getName(model.toJSON(), 'name')) + '</option>';
}
});
- that.ui.typeLov.html(str);
- },
- onChangeTypeList: function(e) {
- var that = this;
- if (this.ui.typeLov.select2('val') !== "") {
- this.ui.searchBtn.removeAttr("disabled");
- } else if (this.ui.searchInput.val() === "") {
- this.ui.searchBtn.attr("disabled", "true");
- }
- setTimeout(function() {
- that.ui.searchInput.focus();
- }, 0);
+ that.ui.typeLov.html(typeStr);
+ that.ui.tagLov.html(tagStr);
},
setValues: function(paramObj) {
var arr = [],
@@ -157,56 +196,42 @@ define(['require',
}
if (this.value.query !== undefined) {
// get only search value and append it to input box
- if (this.dsl) {
- var query = this.value.query.split(" ");
- if (query.length > 1) {
- var typeList = query.shift();
- } else {
- var typeList = "";
- }
- if (this.ui.typeLov.data('select2')) {
- this.ui.typeLov.val(typeList).trigger('change');
- } else {
- this.ui.typeLov.val(typeList);
- setTimeout(function() {
- that.ui.searchInput.focus();
- }, 0);
- }
- this.ui.searchInput.val(query.join(" "));
+
+ if (this.ui.typeLov.data('select2')) {
+ this.ui.typeLov.val(this.value.type).trigger('change');
} else {
- this.ui.searchInput.val(this.value.query);
- setTimeout(function() {
- that.ui.searchInput.focus();
- }, 0);
+ this.ui.typeLov.val(this.value.type);
}
- if (this.ui.searchBtn.val() !== "" || this.ui.typeLov.val() !== "") {
- this.ui.searchBtn.removeAttr("disabled");
+ if (!this.dsl) {
+ if (this.ui.tagLov.data('select2')) {
+ this.ui.tagLov.val(this.value.tag).trigger('change');
+ } else {
+ this.ui.tagLov.val(this.value.tag);
+ }
}
+ this.ui.searchInput.val(this.value.query);
+ setTimeout(function() {
+ that.ui.searchInput.focus();
+ }, 0);
}
}
- this.bindEvents(arr);
},
findSearchResult: function() {
this.triggerSearch(this.ui.searchInput.val());
},
triggerSearch: function(value) {
- if (this.ui.searchType.is(':checked')) {
- this.type = "dsl";
- } else if (!this.ui.searchType.is(':checked')) {
- this.type = "fulltext";
- }
- if (this.ui.typeLov.select2('val') !== null && this.dsl === true) {
- this.query[this.type].query = this.ui.typeLov.select2('val') + ' ' + value;
- } else {
- this.query[this.type].query = value
+ this.query[this.type].query = value;
+ this.query[this.type].type = this.ui.typeLov.select2('val');
+ if (!this.dsl) {
+ this.query[this.type].tag = this.ui.tagLov.select2('val');
}
+
Utils.setUrl({
url: '#!/search/searchResult',
- urlParams: {
- query: this.query[this.type].query,
+ urlParams: _.extend(this.query[this.type], {
searchType: this.type,
dslChecked: this.ui.searchType.is(':checked')
- },
+ }),
updateTabState: function() {
return { searchUrl: this.url, stateChanged: true };
},
@@ -219,35 +244,34 @@ define(['require',
if (e.currentTarget.checked) {
this.type = "dsl";
this.dsl = true;
- this.$('.typeLOV').show();
+ this.$('.tagBox').hide();
} else {
+ this.$('.tagBox').show();
this.dsl = false;
- this.$('.typeLOV').hide();
- this.type = "fulltext";
+ this.type = "basic";
}
if (Utils.getUrlState.getQueryParams() && this.query[this.type].query !== Utils.getUrlState.getQueryParams().query && this.type == Utils.getUrlState.getQueryParams().searchType) {
this.query[this.type].query = Utils.getUrlState.getQueryParams().query;
}
Utils.setUrl({
url: '#!/search/searchResult',
- urlParams: {
- query: this.query[this.type].query,
+ urlParams: _.extend(this.query[this.type], {
searchType: this.type,
dslChecked: this.ui.searchType.is(':checked')
- },
+ }),
updateTabState: function() {
return { searchUrl: this.url, stateChanged: true };
},
mergeBrowserUrl: false,
trigger: true
});
- this.ui.searchInput.attr("placeholder", this.type == "dsl" ? 'Optional conditions' : 'Search using a query string: e.g. sales_fact');
},
clearSearchData: function() {
this.query[this.type].query = "";
this.ui.typeLov.val("").trigger("change");
+ this.ui.tagLov.val("").trigger("change");
this.ui.searchInput.val("");
- this.ui.searchBtn.attr("disabled", "true");
+ this.checkForButtonVisiblity()
Utils.setUrl({
url: '#!/search',
mergeBrowserUrl: false,
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b9779eca/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 8dce5be..46c3229 100644
--- a/dashboardv2/public/js/views/search/SearchResultLayoutView.js
+++ b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
@@ -63,7 +63,8 @@ define(['require',
},
templateHelpers: function() {
return {
- entityCreate: Globals.entityCreate
+ entityCreate: Globals.entityCreate,
+ searchType: this.searchType
};
},
/** ui events hash */
@@ -147,6 +148,10 @@ define(['require',
this.bindEvents();
this.bradCrumbList = [];
this.arr = [];
+ this.searchType = 'Basic Search';
+ if (this.value && this.value.searchType && this.value.searchType == 'dsl') {
+ this.searchType = 'Advanced Search';
+ }
},
bindEvents: function() {
var that = this;
@@ -160,11 +165,7 @@ define(['require',
this.searchCollection.find(function(item) {
if (item.get('isEnable')) {
var term = [];
- if (that.searchCollection.queryType == "DSL") {
- var obj = item.toJSON();
- } else {
- var obj = item.get('entity');
- }
+ var obj = model.toJSON();
that.arr.push({
id: obj.guid,
model: obj
@@ -202,7 +203,7 @@ define(['require',
} else {
value = {
'query': '',
- 'searchType': 'fulltext'
+ 'searchType': 'basic'
};
}
this.fetchCollection(value);
@@ -223,9 +224,6 @@ define(['require',
},
fetchCollection: function(value) {
var that = this;
- if (value && (value.query === undefined || value.query.trim() === "")) {
- return;
- }
this.showLoader();
if (Globals.searchApiCallRef && Globals.searchApiCallRef.readyState === 1) {
Globals.searchApiCallRef.abort();
@@ -240,7 +238,7 @@ define(['require',
if (Utils.getUrlState.isTagTab()) {
this.searchCollection.url = UrlLinks.searchApiUrl(Enums.searchUrlType.DSL);
}
- _.extend(this.searchCollection.queryParams, { 'query': value.query.trim() });
+ _.extend(this.searchCollection.queryParams, { 'query': value.query.trim() || null, 'type': value.type || null, 'classification': value.tag || null });
}
Globals.searchApiCallRef = this.searchCollection.fetch({
skipDefaultError: true,
@@ -293,7 +291,7 @@ define(['require',
if (Globals.taxonomy) {
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>';
}
- if (Globals.entityCreate && (resultText.indexOf("\`") != 0) && Globals.entityTypeConfList) {
+ if (Globals.entityCreate && Globals.entityTypeConfList) {
createEntityTag = "<p>If you do not find the entity in search result below then you can" + '<a href="javascript:void(0)" data-id="createEntity"> create new entity</a></p>';
}
that.$('.searchResult').html(resultData + multiAssignDataTag + multiAssignDataTerm + createEntityTag);
@@ -349,14 +347,9 @@ define(['require',
className: "searchTableName",
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
- if (that.searchCollection.queryType == "DSL") {
- var obj = model.toJSON();
- } else {
- var obj = model.get('entity');
- }
- var nameHtml = "";
-
- var name = Utils.getName(obj);
+ var obj = model.toJSON(),
+ nameHtml = "",
+ name = Utils.getName(obj);
if (obj.guid) {
nameHtml = '<a title="' + name + '" href="#!/detailPage/' + obj.guid + '">' + name + '</a>';
} else {
@@ -388,11 +381,7 @@ define(['require',
sortable: false,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
- if (that.searchCollection.queryType == "DSL") {
- var obj = model.toJSON();
- } else {
- var obj = model.get('entity');
- }
+ var obj = model.toJSON();
if (obj && obj.attributes && obj.attributes.description) {
return obj.attributes.description;
}
@@ -406,11 +395,7 @@ define(['require',
sortable: false,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
- if (that.searchCollection.queryType == "DSL") {
- var obj = model.toJSON();
- } else {
- var obj = model.get('entity');
- }
+ var obj = model.toJSON();
if (obj && obj.typeName) {
return '<a title="Search ' + obj.typeName + '" href="#!/search/searchResult?query=' + obj.typeName + ' &searchType=dsl&dslChecked=true">' + obj.typeName + '</a>';
}
@@ -424,11 +409,7 @@ define(['require',
sortable: false,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
- if (that.searchCollection.queryType == "DSL") {
- var obj = model.toJSON();
- } else {
- var obj = model.get('entity');
- }
+ var obj = model.toJSON();
if (obj && obj.attributes && obj.attributes.owner) {
return obj.attributes.owner;
}
@@ -444,11 +425,7 @@ define(['require',
className: 'searchTag',
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
- if (that.searchCollection.queryType == "DSL") {
- var obj = model.toJSON();
- } else {
- var obj = model.get('entity');
- }
+ var obj = model.toJSON();
if (obj.status && Enums.entityStateReadOnly[obj.status]) {
return '<div class="readOnly">' + CommonViewFunction.tagForTable(obj); + '</div>';
} else {
@@ -468,11 +445,7 @@ define(['require',
className: 'searchTerm',
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
- if (that.searchCollection.queryType == "DSL") {
- var obj = model.toJSON();
- } else {
- var obj = model.get('entity');
- }
+ var obj = model.toJSON();
var returnObject = CommonViewFunction.termTableBreadcrumbMaker(obj);
if (returnObject.object) {
that.bradCrumbList.push(returnObject.object);
@@ -509,21 +482,13 @@ define(['require',
var that = this;
if (!multiple || multiple.length === 0) {
var modal = this.searchCollection.find(function(item) {
- if (that.searchCollection.queryType == "DSL") {
- var obj = item.toJSON();
- } else {
- var obj = item.get('entity');
- }
+ var obj = model.toJSON();
if (obj.guid === guid) {
return true;
}
});
if (modal) {
- if (that.searchCollection.queryType == "DSL") {
- var obj = modal.toJSON();
- } else {
- var obj = modal.get('entity');
- }
+ var obj = model.toJSON();
} else {
return [];
}
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b9779eca/dashboardv2/public/js/views/tag/TagDetailLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/tag/TagDetailLayoutView.js b/dashboardv2/public/js/views/tag/TagDetailLayoutView.js
index d342b96..20da1be 100644
--- a/dashboardv2/public/js/views/tag/TagDetailLayoutView.js
+++ b/dashboardv2/public/js/views/tag/TagDetailLayoutView.js
@@ -55,8 +55,7 @@ define(['require',
var that = this;
require(['views/search/SearchResultLayoutView'], function(SearchResultLayoutView) {
var value = {
- 'query': "`" + that.tag + "`",
- 'type': 'dsl'
+ 'query': "`" + that.tag + "`"
};
that.RSearchResultLayoutView.show(new SearchResultLayoutView({
value: value,
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b9779eca/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 13ea0f4..e6b2065 100644
--- a/dashboardv2/public/js/views/tag/TagLayoutView.js
+++ b/dashboardv2/public/js/views/tag/TagLayoutView.js
@@ -96,7 +96,7 @@ define(['require',
}
},
setValues: function(manual) {
- if (Utils.getUrlState.isTagTab() || (Utils.getUrlState.isInitial() && !Globals.taxonomy)) {
+ if (Utils.getUrlState.isTagTab()) {
if (!this.tag) {
this.selectFirst = false;
this.ui.tagsParent.find('li').first().addClass('active');
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/b9779eca/release-log.txt
----------------------------------------------------------------------
diff --git a/release-log.txt b/release-log.txt
index a4c04ca..344f5bf 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -9,6 +9,12 @@ ATLAS-1060 Add composite indexes for exact match performance improvements for al
ATLAS-1127 Modify creation and modification timestamps to Date instead of Long(sumasai)
ALL CHANGES:
+ATLAS-1608 :Search UI improvement (kevalbhatt)
+ATLAS-1630: basic search implementation (#2)
+ATLAS-1630: basic search implementation using fulltext with support for filter by type & classification
+ATLAS-1629: updated copyright date in NOTICE file
+ATLAS-1627: fix for missed update to full-text index attribute on entity-update
+ATLAS-1626: updated Atlas type-load to be resilient to incorrect constraints in the store (from earlier version env)
ATLAS-1628 Restrict user from entering text in datepicker input (kevalbhatt)
ATLAS-1538 Make AtlasLdapAuthenticationProvider like Ranger for OpenLdap type (nixonrodrigues via kevalbhatt)
ATLAS-1605 Edit Entity in UI : Update button is not enabled when updating attribute of type date (Kalyanikashikar via kevalbhatt)