Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
atlas
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
dataplatform
atlas
Commits
a77d1ab5
Commit
a77d1ab5
authored
Mar 07, 2016
by
Shwetha GS
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ATLAS-500 UI: Search Default (sanjayp via shwethags)
parent
b6fb1f1a
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
118 additions
and
42 deletions
+118
-42
common.css
dashboard/public/css/common.css
+28
-3
select_arrow_img.png
dashboard/public/img/select_arrow_img.png
+0
-0
config.js
dashboard/public/js/config.js
+12
-0
navigationController.js
dashboard/public/modules/navigation/navigationController.js
+5
-3
navigation.html
dashboard/public/modules/navigation/views/navigation.html
+7
-6
searchController.js
dashboard/public/modules/search/searchController.js
+38
-12
searchResource.js
dashboard/public/modules/search/searchResource.js
+1
-1
searchRoutes.js
dashboard/public/modules/search/searchRoutes.js
+2
-1
search.html
dashboard/public/modules/search/views/search.html
+24
-16
release-log.txt
release-log.txt
+1
-0
No files found.
dashboard/public/css/common.css
View file @
a77d1ab5
...
...
@@ -163,6 +163,31 @@ Search Bar design
padding
:
14px
20px
;
}
.main-search
.search-type-large
{
width
:
95px
!important
;
}
.main-search
select
{
height
:
50px
!important
;
padding-right
:
0px
;
margin-right
:
0px
;
width
:
83px
;
font-weight
:
bold
;
-webkit-appearance
:
none
;
-moz-appearance
:
none
;
appearance
:
none
;
cursor
:
pointer
;
background
:
url('../img/select_arrow_img.png')
no-repeat
;
background-size
:
22px
22px
;
background-position
:
54px
13px
!important
;
}
.search-type-large
.form-control
:focus
{
border-color
:
#ccc
;
box-shadow
:
none
;
outline
:
0
none
;
}
/*=======================================================================================
Tags on Home Page design
=======================================================================================*/
...
...
@@ -299,7 +324,7 @@ Tags on Home Page design
}
.tabsearch-result
{
max-width
:
500px
;
max-width
:
93%
;
display
:
list-item
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
...
...
@@ -364,4 +389,4 @@ Tags on Home Page design
.see-more
{
font-weight
:
bold
;
font-size
:
16px
;
}
\ No newline at end of file
}
\ No newline at end of file
dashboard/public/img/select_arrow_img.png
0 → 100644
View file @
a77d1ab5
423 Bytes
dashboard/public/js/config.js
View file @
a77d1ab5
...
...
@@ -32,5 +32,17 @@ angular.module('dgc').constant('atlasConfig', {
TRAITS_LIST
:
apiHost
+
'types?type=TRAIT'
,
SEARCH
:
apiHost
+
'discovery/search/'
,
CREATE_TRAIT
:
apiHost
+
'types'
},
SEARCH_TYPE
:
{
dsl
:
{
value
:
'dsl'
,
displayText
:
'DSL'
,
placeholder
:
'Search using a DSL query: e.g. DataSet where name="sales_fact"'
},
fulltext
:
{
value
:
'fulltext'
,
displayText
:
'Text'
,
placeholder
:
'Search using a query string: e.g. sales_fact'
}
}
});
dashboard/public/modules/navigation/navigationController.js
View file @
a77d1ab5
...
...
@@ -27,6 +27,8 @@ angular.module('dgc.navigation').controller('navigationController', ['$scope', '
};
$scope
.
dslQueryVal
=
atlasConfig
.
SEARCH_TYPE
.
dsl
.
value
;
$scope
.
$on
(
'load_Traits'
,
function
()
{
$scope
.
leftnav
=
navigationResource
.
get
();
});
...
...
@@ -43,12 +45,12 @@ angular.module('dgc.navigation').controller('navigationController', ['$scope', '
$scope
.
intialCount
=
limitIntialCount
;
};
$scope
.
showMore
=
function
(){
$scope
.
showMore
=
function
()
{
$scope
.
intialCount
+=
limitIntialCount
;
};
$scope
.
filterTags
=
function
()
{
$scope
.
intialCount
=
limitIntialCount
;
$scope
.
filterTags
=
function
()
{
$scope
.
intialCount
=
limitIntialCount
;
};
}
]);
dashboard/public/modules/navigation/views/navigation.html
View file @
a77d1ab5
...
...
@@ -16,20 +16,20 @@
~ limitations under the License.
-->
<div
data-ng-controller=
"navigationController"
class=
"main-tags leftNavigation"
>
<div
data-ng-controller=
"navigationController"
class=
"main-tags leftNavigation"
>
<div>
<h4
class=
"pull-left"
>
Tags
</h4>
<a
href
ng-click=
"refreshTags()"
class=
"pull-right"
>
<h4
class=
"pull-left"
>
Tags
</h4>
<a
href
ng-click=
"refreshTags()"
class=
"pull-right"
>
<img
src=
"../img/refresh.png"
style=
"margin: 5px;"
title=
"Refresh Tags"
>
</a>
<form
ng-submit=
"filterTags()"
>
<input
type=
"text"
class=
"filter-tag"
placeholder=
"Search for Tags…"
ng-model=
"tagFilter"
ng-keydown=
"filterTags()"
>
</input>
<input
type=
"submit"
id=
"submit"
value=
"Submit"
class=
"hide"
/>
</form>
</div>
</br>
</div>
</br>
<div
class=
"list-group"
>
<a
ng-repeat=
"nav in filtered = (leftnav | filter:tagFilter | limitTo:intialCount + 1)"
ui-sref=
"search({ query: nav })"
class=
"list-group-item limitSize"
title=
"{{nav}}"
><i
class=
"fa fa-tag"
></i>
{{nav}}
</a>
<a
ng-repeat=
"nav in filtered = (leftnav | filter:tagFilter | limitTo:intialCount + 1)"
ui-sref=
"search({ query: nav
, searchType: dslQueryVal
})"
class=
"list-group-item limitSize"
title=
"{{nav}}"
><i
class=
"fa fa-tag"
></i>
{{nav}}
</a>
<a
ng-click=
"showMore()"
class=
"see-more"
ng-class=
"filtered.length > intialCount ? 'show' : 'hide'"
>
Load more ...
</a>
</div>
</div>
\ No newline at end of file
dashboard/public/modules/search/searchController.js
View file @
a77d1ab5
...
...
@@ -17,8 +17,8 @@
*/
'use strict'
;
angular
.
module
(
'dgc.search'
).
controller
(
'searchController'
,
[
'$scope'
,
'$location'
,
'$http'
,
'$state'
,
'$stateParams'
,
'lodash'
,
'searchResource'
,
'detailsResource'
,
'notificationService'
,
function
(
$scope
,
$location
,
$http
,
$state
,
$stateParams
,
_
,
searchResource
,
detailsResource
,
notificationService
)
{
angular
.
module
(
'dgc.search'
).
controller
(
'searchController'
,
[
'$scope'
,
'$location'
,
'$http'
,
'$state'
,
'$stateParams'
,
'lodash'
,
'searchResource'
,
'detailsResource'
,
'notificationService'
,
'atlasConfig'
,
function
(
$scope
,
$location
,
$http
,
$state
,
$stateParams
,
_
,
searchResource
,
detailsResource
,
notificationService
,
atlasConfig
)
{
$scope
.
results
=
[];
$scope
.
resultCount
=
0
;
...
...
@@ -32,6 +32,7 @@ angular.module('dgc.search').controller('searchController', ['$scope', '$locatio
$scope
.
isString
=
angular
.
isString
;
$scope
.
isArray
=
angular
.
isArray
;
$scope
.
isNumber
=
angular
.
isNumber
;
$scope
.
searchTypes
=
atlasConfig
.
SEARCH_TYPE
;
$scope
.
mapAttr
=
[
'guid'
,
'typeName'
,
'owner'
,
'description'
,
'createTime'
,
'$traits$'
,
'$id$'
,
'comment'
,
'dataType'
];
$scope
.
setPage
=
function
(
pageNo
)
{
...
...
@@ -89,14 +90,15 @@ angular.module('dgc.search').controller('searchController', ['$scope', '$locatio
});
};
$scope
.
search
=
function
(
query
)
{
$scope
.
search
=
function
(
query
,
type
)
{
$scope
.
results
=
[];
notificationService
.
reset
();
$scope
.
limit
=
4
;
$scope
.
searchMessage
=
'load-gif'
;
$scope
.
$parent
.
query
=
query
;
searchResource
.
search
({
query
:
query
query
:
query
,
searchType
:
type
},
function
searchSuccess
(
response
)
{
$scope
.
resultCount
=
response
.
count
;
$scope
.
results
=
response
.
results
;
...
...
@@ -106,6 +108,11 @@ angular.module('dgc.search').controller('searchController', ['$scope', '$locatio
$scope
.
transformedResults
=
{};
$scope
.
dataTransitioned
=
false
;
$scope
.
showText
=
"Text"
;
if
(
$scope
.
searchTypeModel
===
$scope
.
searchTypes
.
dsl
.
value
)
{
$scope
.
showText
=
"DSL"
;
}
if
(
$scope
.
results
)
{
if
(
response
.
dataType
)
{
$scope
.
resultType
=
response
.
dataType
.
typeName
;
...
...
@@ -114,9 +121,9 @@ angular.module('dgc.search').controller('searchController', ['$scope', '$locatio
}
else
if
(
typeof
response
.
dataType
===
'undefined'
)
{
$scope
.
resultType
=
"full text"
;
}
$scope
.
searchMessage
=
$scope
.
resultCount
+
' results matching your search query '
+
$scope
.
query
+
' were found'
;
$scope
.
searchMessage
=
$scope
.
resultCount
+
' results matching your
'
+
$scope
.
showText
+
'
search query '
+
$scope
.
query
+
' were found'
;
}
else
{
$scope
.
searchMessage
=
'0 results matching your search query '
+
$scope
.
query
+
' were found'
;
$scope
.
searchMessage
=
'0 results matching your
'
+
$scope
.
showText
+
'
search query '
+
$scope
.
query
+
' were found'
;
}
if
(
response
.
dataType
&&
response
.
dataType
.
typeName
&&
response
.
dataType
.
typeName
.
toLowerCase
().
indexOf
(
'table'
)
===
-
1
)
{
...
...
@@ -157,8 +164,16 @@ angular.module('dgc.search').controller('searchController', ['$scope', '$locatio
}
});
},
function
searchError
(
err
)
{
$scope
.
searchMessage
=
'0 results matching your search query '
+
$scope
.
query
+
' were found'
;
notificationService
.
error
(
'Error occurred during executing search query, error status code = '
+
err
.
status
+
', status text = '
+
err
.
statusText
,
false
);
if
((
$scope
.
searchTypeModel
===
$scope
.
searchTypes
.
dsl
.
value
)
&&
err
.
status
===
400
)
{
$scope
.
searchMessageDsl
=
true
;
$scope
.
searchMessage
=
false
;
}
else
{
$scope
.
searchMessageDsl
=
false
;
$scope
.
searchMessage
=
true
;
$scope
.
searchMessage
=
'0 results matching your '
+
$scope
.
showText
+
' search query '
+
$scope
.
query
+
' were found'
;
notificationService
.
error
(
'Error occurred during executing search query, error status code = '
+
err
.
status
+
', status text = '
+
err
.
statusText
,
false
);
}
});
$state
.
go
(
'search'
,
{
query
:
query
...
...
@@ -281,11 +296,22 @@ angular.module('dgc.search').controller('searchController', ['$scope', '$locatio
};
$scope
.
searchQuery
=
$location
.
search
();
$scope
.
searchTypeModel
=
$stateParams
.
searchType
;
$scope
.
query
=
(
$location
.
search
()).
query
;
if
(
$scope
.
query
)
{
$scope
.
search
(
$scope
.
query
);
$stateParams
.
searchType
=
(
$location
.
search
()).
searchType
;
if
(
$scope
.
query
&&
$stateParams
.
searchType
)
{
$scope
.
search
(
$scope
.
query
,
$stateParams
.
searchType
);
}
$scope
.
searchTypeChanged
=
function
()
{
if
(
$scope
.
query
)
{
$state
.
go
(
'search'
,
{
query
:
$scope
.
query
,
searchType
:
$scope
.
searchTypeModel
},
{
location
:
'replace'
});
}
};
}
]);
dashboard/public/modules/search/searchResource.js
View file @
a77d1ab5
...
...
@@ -19,7 +19,7 @@
'use strict'
;
angular
.
module
(
'dgc.search'
).
factory
(
'searchResource'
,
[
'$resource'
,
'atlasConfig'
,
function
(
$resource
,
atlasConfig
)
{
return
$resource
(
atlasConfig
.
API_ENDPOINTS
.
SEARCH
,
{},
{
return
$resource
(
atlasConfig
.
API_ENDPOINTS
.
SEARCH
+
':searchType'
,
{},
{
search
:
{
'method'
:
'GET'
,
'responseType'
:
'json'
,
...
...
dashboard/public/modules/search/searchRoutes.js
View file @
a77d1ab5
...
...
@@ -21,7 +21,8 @@
angular
.
module
(
'dgc.search'
).
config
([
'$stateProvider'
,
function
(
$stateProvider
)
{
$stateProvider
.
state
(
'search'
,
{
url
:
'/search?query'
,
url
:
'/search?query&searchType'
,
params
:
{
searchType
:
'fulltext'
},
templateUrl
:
'/modules/search/views/search.html'
,
controller
:
'searchController'
});
...
...
dashboard/public/modules/search/views/search.html
View file @
a77d1ab5
...
...
@@ -17,15 +17,22 @@
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<div
class=
"col-lg-10 paddingR0"
>
<div
class=
"col-lg-10 paddingR0"
xmlns=
"http://www.w3.org/1999/html"
>
<div
class=
""
>
<div
class=
"row main-search"
>
<form
class=
"col-lg-12"
name=
"form"
novalidate
>
<div
class=
"input-group"
>
<input
type=
"text"
class=
"form-control"
placeholder=
"Search: Table, DB, Column"
data-ng-model=
"query"
required
/>
<div
class=
"col-lg-2 search-type-large"
>
<select
class=
"form-control"
ng-model=
"searchTypeModel"
ng-change=
"searchTypeChanged()"
>
<option
ng-selected =
"{{searchTypeModel === searchTypes.dsl.value}}"
value=
{{searchTypes.dsl.value}}
>
{{ searchTypes.dsl.displayText }}
</option>
<option
ng-selected =
"{{searchTypeModel === searchTypes.fulltext.value}}"
value=
{{searchTypes.fulltext.value}}
>
{{ searchTypes.fulltext.displayText }}
</option>
</select>
</div>
<div
class=
"input-group col-lg-10"
>
<input
type=
"text"
class=
"form-control"
placeholder=
{{searchTypes[searchTypeModel].placeholder}}
data-ng-model=
"query"
required
>
</input>
<span
class=
"input-group-btn"
>
<button
class=
"btn btn-success"
type=
"submit"
data-ng-disabled=
"form.$invalid"
ui-sref=
"search({ query: query })"
>
<i
class=
"glyphicon glyphicon-search white "
></i>
<button
class=
"btn btn-success"
type=
"submit"
data-ng-disabled=
"form.$invalid"
ui-sref=
"search({ query: query
, searchType: searchTypeModel
})"
>
<i
class=
"glyphicon glyphicon-search white "
></i>
</button>
</span>
</div>
...
...
@@ -35,7 +42,8 @@
<div
ng-switch
on=
"searchMessage"
>
<div
ng-switch-when=
"load-gif"
class=
"search-spinner"
><img
src=
"../img/spinner.gif"
align=
"middle"
/></div>
<div
ng-switch-default
>
<h4
ng-show=
"searchMessage"
title=
"{{searchMessage}}"
class=
"tabsearch-result"
>
{{searchMessage}}
</h4>
<h5
ng-show=
"searchMessage"
title=
"{{searchMessage}}"
class=
"tabsearch-result"
>
{{searchMessage}}
</h5>
<h5
ng-show=
"searchMessageDsl"
title=
"{{searchMessage}}"
class=
"tabsearch-result"
>
Invalid DSL Syntax, Click
<a
ui-sref=
"search({ query: query, searchType: searchTypes.fulltext.value })"
>
here
</a>
to execute as a Text search.
</h5>
</div>
</div>
<div
class=
"panel panel-default"
ng-show=
'resultCount > 0'
>
...
...
@@ -62,7 +70,7 @@
<td>
{{result.description}}
</td>
<td>
<td>
<span
ng-repeat=
"(key, value) in filterSearchResults(result)"
>
<span
ng-if=
"key =='owner'"
>
{{value}}
</span>
</span>
...
...
@@ -74,21 +82,21 @@
</tr>
<tr
ng-if=
"isTag(resultType)"
ng-repeat=
"result in filteredResults track by $index"
>
<td
data-ng-if=
"isObject(result) && !isString(result) && res != 'id' && res != 'guid'"
data-ng-repeat=
"res in transformedProperties track by $index"
>
<a
data-ng-if=
"res == 'guid' && !result['name']"
data-ui-sref=
"details({id:result[res]})"
>
{{result[res]}}
</a>
<span
data-ng-if=
"res != '$traits$' && res != 'Tools' && res != 'guid' && res.toLowerCase().indexOf('name') == -1 && res.toLowerCase().indexOf('time') == -1"
>
{{result[res]}}
</span>
<span
data-ng-if=
"res.toLowerCase().indexOf('time') != -1 && isNumber(result[res])"
>
{{result[res] * 1000 | date:'yyyy-MM-dd HH:mm:ss'}} UTC
</span>
<span
data-ng-if=
"res != '$traits$' && res != 'Tools' && res != 'guid' && res.toLowerCase().indexOf('name') == -1 && res.toLowerCase().indexOf('time') == -1"
>
{{result[res]}}
</span>
<span
data-ng-if=
"res.toLowerCase().indexOf('time') != -1 && isNumber(result[res])"
>
{{result[res] * 1000 | date:'yyyy-MM-dd HH:mm:ss'}} UTC
</span>
<a
data-ng-if=
"res.toLowerCase().indexOf('name') != -1 && (result['id'] || result['guid']) "
data-ui-sref=
"details({id:result['id']|| result['guid']})"
>
{{result[res]}}
</a>
<span
data-ng-if=
"res.toLowerCase().indexOf('name') != -1 && !result['id'] && !result['guid']"
>
{{result[res]}}
</span>
<span
data-ng-if=
"res.toLowerCase().indexOf('name') != -1 && !result['id'] && !result['guid']"
>
{{result[res]}}
</span>
<div
data-ng-if=
"res == '$traits$'"
class=
"word-break tags"
id=
"{{result['id']|| result['guid']}}"
>
<a
class=
"tab-search-tags"
ng-repeat=
"(key, value) in result[res]"
data-ui-sref=
"search({query: key})"
title=
"{{key}}"
>
{{key}}
<span>
</span></a>
</div>
<span
data-ng-if=
"res == 'Tools'"
class=
"add-tag"
>
<img
ng-src=
"img/addTag.png"
tooltip=
"Add Tag"
ng-click=
"openAddTagHome(result['id']|| result['guid'])"
>
</span>
</td>
<td
data-ng-if=
"isString(result) || result == false || result == true"
>
...
...
release-log.txt
View file @
a77d1ab5
...
...
@@ -3,6 +3,7 @@ Apache Atlas Release Notes
--trunk - unreleased
INCOMPATIBLE CHANGES:
ATLAS-500 UI: Search Default (sanjayp via shwethags)
ATLAS-483 Remove client.properties (tbeerbower via shwethags)
ATLAS-349 SSL - Atlas SSL connection has weak/unsafe Ciphers suites (ndjouhr via shwethags)
ATLAS-409 Atlas will not import avro tables with schema read from a file (dossett@gmail.com via shwethags)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment