Commit bcb9ea24 by kevalbhatt

ATLAS-3607 : UI: changes to create namespace type definitions and define namespace attributes

parent 8f6cb0e9
......@@ -254,6 +254,7 @@ pre {
text-align: center;
width: 17%;
margin-left: 1%;
margin-bottom: 10px;
}
}
}
......
......@@ -30,6 +30,7 @@
@extend .control-label-sm;
padding-right: 10px;
}
}
.form-group {
......@@ -245,6 +246,10 @@ button:focus {
padding: 2px 6px;
}
&.btn-xs {
padding: 0px 5px;
}
&.btn-md {
padding: 6px 10px;
}
......@@ -305,6 +310,10 @@ button:focus {
padding: 2px 6px;
}
&.btn-xs {
padding: 0px 5px;
}
&.btn-md {
padding: 5px 10px;
}
......
......@@ -36,6 +36,10 @@
background: $color_jungle_green_approx !important;
}
.jstree-custom-filter {
background: #beebff !important;
}
.jstree-hovered {
background: $color_star_dust_approx;
}
......
// 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.
/* namespace */
.namespace-tree-parent {
padding: 0px;
>li:first-child {
font-weight: 600;
}
.namespace-tree-child {
padding-left: 20px;
margin-top: 10px;
}
}
.namespace-options.dropdown {
.dropdown-menu {
min-width: 100px;
.dropdown-item {
display: block;
width: 100%;
padding: .25rem 1.5rem;
clear: both;
font-weight: 400;
color: $color_jungle_green_approx;
text-align: inherit;
white-space: nowrap;
background-color: transparent;
border: 0;
}
}
}
.namespace-options.dropdown.open {
.btn-action {
background-color: $color_jungle_green_approx;
border: 1px solid $color_jungle_green_approx;
color: #fff !important;
}
}
.namespace-details {
.expandable .attr-details {
max-height: 300px;
overflow: auto;
margin-left: 100px;
width: calc(100% - 100px);
}
}
.tab-pane {
.namespace-attr-page {
position: absolute;
top: 0px;
left: 0px;
padding: 20px;
background-color: $white;
width: 100%;
height: inherit;
}
}
.namespace-attr-page {
.form-horizontal {
padding: 10px 22px;
// border: 1px solid #DEDEDE;
.control-label-sm {
padding-top: 3px;
}
.control-label-sm-pl {
@extend .control-label-sm;
padding-left: 10px;
}
.control-label-sm-pr {
@extend .control-label-sm;
padding-right: 10px;
}
.namespace-attr {
border: 1px solid #DEDEDE;
padding: 10px 20px
}
}
}
.namespace-attr-fontLoader {
position: absolute;
top: 50%;
left: 50%;
display: none;
}
.namespace-attr-tableOverlay {
position: absolute;
width: 100%;
height: 100%;
background: #808080;
z-index: 99;
display: none;
opacity: 0.2;
}
.name-space-details {
.backgrid {
td.expandable-content {
width: 100%;
max-width: none;
background: #f8f8f8;
div {
table {
width: 100%;
}
}
}
tbody>tr:last-child>td {
border-bottom: none;
}
}
}
.namespace-attr-page {
.modal-footer {
text-align: center;
}
}
.remove-from-list {
.select2-results__option[aria-selected=true] {
display: none;
}
}
\ No newline at end of file
......@@ -76,6 +76,17 @@
}
}
.modal-full-screen {
width: 80%;
height: 80vh;
.modal-content {
height: inherit;
width: 100%;
}
}
.switch.pull-left {
margin-right: 8px;
}
......@@ -238,6 +249,13 @@
overflow-x: hidden;
}
.purge-details {
.tab-pane.active {
min-height: 400px;
}
}
.advancedInfo {
margin-left: 5px;
cursor: pointer;
......@@ -356,6 +374,10 @@ div.columnmanager-visibilitycontrol {
}
div.columnmanager-dropdown-container {
.columnmanager-dropdown-item {
padding: 2px 13px;
}
&.open {
overflow: auto;
width: auto;
......@@ -452,4 +474,24 @@ div.columnmanager-dropdown-container {
.query-builder .error-container {
cursor: pointer;
}
.renderable {
.glyphicon {
color: $color_jungle_green_approx;
font-size: large;
font-weight: bold;
}
}
.backgrid-internal-table {
th,
td {
display: table-cell;
}
}
.table-hover>tbody>tr:hover {
background-color: #fafafa;
}
\ No newline at end of file
......@@ -62,6 +62,7 @@
.panel {
&.panel-default {
padding: 5px;
margin: 5px;
}
.panel-body {
......@@ -81,6 +82,12 @@
.table {
&.stat-table {
width: 100%;
td {
display: table-cell;
}
&.notification-table {
&.table-striped>tbody>tr:nth-of-type(odd) {
background-color: $color_white_lilac_approx;
......
......@@ -34,6 +34,7 @@
@import "profile-table.scss";
@import "glossary.scss";
@import "wizard.scss";
@import "namespace.scss";
@import "stats.scss";
@import "override.scss";
@import "leftsidebar.scss"
\ No newline at end of file
......@@ -55,7 +55,7 @@ tr.empty {
.entity-detail-table-toggle {
position: absolute;
right: 0;
top: 18px;
top: 7px;
}
table {
......@@ -183,26 +183,36 @@ tr.empty {
}
}
>thead>tr>th {
border-width: thin;
border-color: $color_jungle_green_approx;
border-bottom-style: solid;
box-shadow: none;
padding: 12px 15px !important;
background-color: transparent;
text-align: left;
font-weight: 800;
border-top: 0;
font-size: 14px;
letter-spacing: 0.25px;
color: rgba(52, 52, 52, 1);
>thead>tr {
background: #eeeeee;
&>th {
border-width: thin;
// border-color: $color_jungle_green_approx;
border-bottom-style: solid;
box-shadow: none;
padding: 6px 15px !important;
background-color: transparent;
text-align: left;
font-weight: 800;
border-top: 0;
font-size: 14px;
letter-spacing: 0.25px;
color: #6a6a6a;
}
>td {
border-color: $color_gallery_approx;
color: #333333;
font-weight: 100;
padding: 9px 15px;
}
}
>tbody>tr>td {
border-color: $color_gallery_approx;
color: #333333;
font-weight: 100;
padding: 9px 15px;
&.select-row-cell {
text-align: center;
}
}
}
......@@ -240,4 +250,13 @@ td {
float: left;
}
}
}
.auditStatusContainer {
display: flex;
justify-content: center;
}
.auditStatusContainer>div {
flex-grow: 1;
}
\ No newline at end of file
......@@ -205,4 +205,8 @@
.addtag-propagte-box {
border: 1px solid #ddd;
border-radius: 7px;
}
.entityTypeSelector {
margin: 10px 0px;
}
\ No newline at end of file
......@@ -158,6 +158,14 @@ header.atlas-header {
position: relative;
transition: width 0.3s !important;
.admin-icon {
background-color: $color_ironside_gray_approx;
width: 24px;
height: 20px;
-webkit-mask: url(../img/support.svg) no-repeat center;
mask: url(../img/support.svg) no-repeat center;
}
.search-box {
width: 50%;
margin: 0 auto;
......@@ -172,7 +180,8 @@ header.atlas-header {
left: auto;
}
&>li>a {
&>li>a,
{
color: $color_ironside_gray_approx;
&:hover {
......@@ -188,19 +197,23 @@ header.atlas-header {
td {
>a {
display: inline-block;
color: $color_ironside_gray_approx;
color: $color_ironside_gray_approx !important;
padding: 13px 14px;
border-bottom: 2px solid transparent;
}
>a,
>table {
padding: 15px 14px;
padding: 14px 14px;
&:hover {
border-bottom: 2px solid $color_jungle_green_approx;
padding: 14px 14px;
color: $color_jungle_green_approx;
color: $color_jungle_green_approx !important;
.admin-icon {
background-color: $color_jungle_green_approx;
}
a {
color: $color_jungle_green_approx;
......@@ -776,4 +789,44 @@ td.searchTableName:hover {
z-index: 1;
left: calc(50% - 8px);
}
}
.dropdown-menu.multi-level {
.dropdown-submenu {
position: relative;
&>a:after {
display: none;
content: " ";
width: 0;
height: 0;
border-color: transparent;
border-style: solid;
border-width: 5px 5px 5px 0px;
border-right-color: #ccc;
position: absolute;
left: 8px;
top: calc(50% - 5px);
}
&>a:hover:after {
display: block;
}
&>.dropdown-menu {
top: 0;
left: -100%;
width: 100%;
margin-top: -6px;
margin-left: -1px;
-webkit-border-radius: 0 6px 6px 6px;
-moz-border-radius: 0 6px 6px;
border-radius: 0 6px 6px 6px;
}
&:hover>.dropdown-menu {
display: block;
}
}
}
\ No newline at end of file
......@@ -202,25 +202,35 @@ require(['App',
'select2'
], function(App, Router, Helper, CommonViewFunction, Globals, UrlLinks, VEntityList, VTagList, Enums) {
var that = this;
this.asyncFetchCounter = 6 + (Enums.addOnEntities.length + 1);
this.asyncFetchCounter = 7 + (Enums.addOnEntities.length + 1);
// entity
this.entityDefCollection = new VEntityList();
this.entityDefCollection.url = UrlLinks.entitiesDefApiUrl();
// typeHeaders
this.typeHeaders = new VTagList();
this.typeHeaders.url = UrlLinks.typesApiUrl();
// enum
this.enumDefCollection = new VTagList();
this.enumDefCollection.url = UrlLinks.enumDefApiUrl();
this.enumDefCollection.modelAttrName = "enumDefs";
// classfication
this.classificationDefCollection = new VTagList();
// metric
this.metricCollection = new VTagList();
this.metricCollection.url = UrlLinks.metricsApiUrl();
this.metricCollection.modelAttrName = "data";
// nameSpace
this.nameSpaceCollection = new VEntityList();
this.nameSpaceCollection.url = UrlLinks.nameSpaceApiUrl();
this.nameSpaceCollection.modelAttrName = "namespaceDefs";
App.appRouter = new Router({
entityDefCollection: this.entityDefCollection,
typeHeaders: this.typeHeaders,
enumDefCollection: this.enumDefCollection,
classificationDefCollection: this.classificationDefCollection,
metricCollection: this.metricCollection
metricCollection: this.metricCollection,
nameSpaceCollection: this.nameSpaceCollection
});
var startApp = function() {
......@@ -310,6 +320,18 @@ require(['App',
}
});
this.nameSpaceCollection.fetch({
skipDefaultError: true,
complete: function() {
that.nameSpaceCollection.fullCollection.comparator = function(model) {
return model.get('name').toLowerCase();
};
that.nameSpaceCollection.fullCollection.sort({ silent: true });
--that.asyncFetchCounter;
startApp();
}
});
Enums.addOnEntities.forEach(function(addOnEntity) {
CommonViewFunction.fetchRootEntityAttributes({
url: UrlLinks.rootEntityDefUrl(addOnEntity),
......
......@@ -95,6 +95,18 @@ define(['require',
dataType: 'json'
}, options);
return this.constructor.nonCrudOperation.call(this, url, "POST", options);
},
saveNameSpaceAttribute: function(options) {
var url = UrlLinks.nameSpaceUpdateUrl();
options = _.extend({
contentType: 'application/json',
dataType: 'json'
}, options);
return this.constructor.nonCrudOperation.call(this, url, 'PUT', options);
},
deleteNameSpace: function(options) {
var url = UrlLinks.nameSpaceUpdateUrl(options.typeName);
return this.constructor.nonCrudOperation.call(this, url, 'DELETE', options);
}
}, {});
return VEntity;
......
......@@ -47,13 +47,16 @@ define([
"!/glossary/:id": "renderGlossaryLayoutView",
// Details
"!/detailPage/:id": "detailPage",
//Audit table
'!/administrator': 'administrator',
'!/administrator/namespace/:id': 'nameSpaceDetailPage',
// Default
"*actions": "defaultAction"
},
initialize: function(options) {
_.extend(
this,
_.pick(options, "entityDefCollection", "typeHeaders", "enumDefCollection", "classificationDefCollection", "metricCollection")
_.pick(options, "entityDefCollection", "typeHeaders", "enumDefCollection", "classificationDefCollection", "metricCollection", "nameSpaceCollection")
);
this.showRegions();
this.bindFooterEvent();
......@@ -72,7 +75,8 @@ define([
enumDefCollection: this.enumDefCollection,
classificationDefCollection: this.classificationDefCollection,
glossaryCollection: this.glossaryCollection,
metricCollection: this.metricCollection
metricCollection: this.metricCollection,
nameSpaceCollection: this.nameSpaceCollection
};
this.sharedObj = {
searchTableColumns: {},
......@@ -277,6 +281,16 @@ define([
updateTabState: true
});
}
if (Utils.getUrlState.getQueryUrl().lastValue !== "search" && Utils.getUrlState.isAdministratorTab() === false) {
paramObj = _.omit(paramObj, ["tabActive", "ns", "nsa"]);
Utils.setUrl({
url: "#!/search/searchResult",
urlParams: paramObj,
mergeBrowserUrl: false,
trigger: false,
updateTabState: true
});
}
if (paramObj) {
if (!paramObj.type) {
if (paramObj.entityFilters) {
......@@ -365,38 +379,6 @@ define([
});
});
},
renderSearchResult: function() {
var that = this;
require(["views/site/Header", "views/search/SearchDetailLayoutView"], function(Header, SearchDetailLayoutView) {
var paramObj = Utils.getUrlState.getQueryParams();
var isinitialView = true,
isTypeTagNotExists = false,
tempParam = _.extend({}, paramObj);
that.renderViewIfNotExists(that.getHeaderOptions(Header));
if (paramObj) {
isinitialView =
(
paramObj.type ||
(paramObj.dslChecked == "true" ? "" : paramObj.tag || paramObj.term) ||
(paramObj.query ? paramObj.query.trim() : "")
).length === 0;
}
App.rContent.show(
new SearchDetailLayoutView(
_.extend({
value: paramObj,
searchVent: that.searchVent,
categoryEvent: that.categoryEvent,
initialView: isinitialView,
isTypeTagNotExists: paramObj.type != tempParam.type || tempParam.tag != paramObj.tag
},
that.preFetchedCollectionLists,
that.sharedObj
)
)
);
});
},
detailPage: function(id) {
var that = this;
if (id) {
......@@ -416,7 +398,10 @@ define([
},
render: function() {
return new SideNavLayoutView(
_.extend({ searchVent: that.searchVent, categoryEvent: that.categoryEvent }, that.preFetchedCollectionLists, that.sharedObj)
_.extend({
searchVent: that.searchVent,
categoryEvent: that.categoryEvent
}, that.preFetchedCollectionLists, that.sharedObj)
);
}
});
......@@ -438,73 +423,6 @@ define([
});
}
},
tagAttributePageLoad: function(tagName) {
var that = this;
require(["views/site/Header", "views/tag/TagDetailLayoutView", "views/site/SideNavLayoutView"], function(Header, TagDetailLayoutView, SideNavLayoutView) {
var paramObj = Utils.getUrlState.getQueryParams(),
url = Utils.getUrlState.getQueryUrl().queyParams[0];
that.renderViewIfNotExists(that.getHeaderOptions(Header));
// that.renderViewIfNotExists({
// view: App.rSideNav,
// manualRender: function() {
// if (paramObj && paramObj.dlttag) {
// Utils.setUrl({
// url: url,
// trigger: false,
// updateTabState: true
// });
// }
// this.view.currentView.RTagLayoutView.currentView.manualRender(_.extend({}, paramObj, { 'tagName': tagName }));
// this.view.currentView.selectTab();
// },
// render: function() {
// if (paramObj && paramObj.dlttag) {
// Utils.setUrl({
// url: url,
// trigger: false,
// updateTabState: true
// });
// }
// return new SideNavLayoutView(
// _.extend({
// 'tag': tagName,
// 'value': paramObj
// }, that.preFetchedCollectionLists, that.sharedObj)
// );
// }
// });
that.renderViewIfNotExists({
view: App.rSideNav,
manualRender: function() {
this.view.currentView.selectTab();
},
render: function() {
return new SideNavLayoutView(
_.extend({ searchVent: that.searchVent, categoryEvent: that.categoryEvent }, that.preFetchedCollectionLists, that.sharedObj)
);
}
});
if (tagName) {
// updating paramObj to check for new queryparam.
paramObj = Utils.getUrlState.getQueryParams();
if (paramObj && paramObj.dlttag) {
return false;
}
App.rContent.show(
new TagDetailLayoutView(
_.extend({
tag: tagName,
value: paramObj
},
that.preFetchedCollectionLists,
that.sharedObj
)
)
);
}
});
},
glossaryDetailPage: function(id) {
var that = this;
if (id) {
......@@ -542,25 +460,6 @@ define([
require(["views/site/Header", "views/search/SearchDetailLayoutView", "views/site/SideNavLayoutView"], function(Header, SearchDetailLayoutView, SideNavLayoutView) {
var paramObj = Utils.getUrlState.getQueryParams();
that.renderViewIfNotExists(that.getHeaderOptions(Header));
// that.renderViewIfNotExists({
// view: App.rSideNav,
// manualRender: function() {
// this.view.currentView.selectTab();
// if (Utils.getUrlState.isTagTab()) {
// this.view.currentView.RTagLayoutView.currentView.manualRender();
// } else if (Utils.getUrlState.isGlossaryTab()) {
// this.view.currentView.RGlossaryLayoutView.currentView.manualRender(_.extend({ "isTrigger": true }, { "value": paramObj }));
// }
// },
// render: function() {
// return new SideNavLayoutView(
// _.extend({
// 'searchVent': that.searchVent
// }, that.preFetchedCollectionLists, that.sharedObj)
// )
// }
// });
that.renderViewIfNotExists({
view: App.rSideNav,
manualRender: function() {
......@@ -593,6 +492,52 @@ define([
}
});
},
administrator: function() {
var that = this;
require(["views/site/Header", "views/site/SideNavLayoutView", 'views/administrator/AdministratorLayoutView'], function(Header, SideNavLayoutView, AdministratorLayoutView) {
var value = Utils.getUrlState.getQueryParams(),
paramObj = _.extend({ value: value, namespaceID: null }, that.preFetchedCollectionLists);
that.renderViewIfNotExists(that.getHeaderOptions(Header));
that.renderViewIfNotExists({
view: App.rSideNav,
manualRender: function() {
this.view.currentView.manualRender(paramObj);
},
render: function() {
return new SideNavLayoutView(
_.extend({ searchVent: that.searchVent, categoryEvent: that.categoryEvent }, that.preFetchedCollectionLists, that.sharedObj)
);
}
});
App.rContent.show(new AdministratorLayoutView(paramObj));
});
},
nameSpaceDetailPage: function(namespaceGuid) {
var that = this;
require(["views/site/Header", "views/site/SideNavLayoutView", "views/name_space/NameSpaceContainerLayoutView", ], function(Header, SideNavLayoutView, NameSpaceContainerLayoutView) {
var paramObj = Utils.getUrlState.getQueryParams();
that.renderViewIfNotExists(that.getHeaderOptions(Header));
var options = _.extend({
namespaceID: namespaceGuid,
value: paramObj,
searchVent: that.searchVent,
categoryEvent: that.categoryEvent
},
that.preFetchedCollectionLists,
that.sharedObj
)
that.renderViewIfNotExists({
view: App.rSideNav,
manualRender: function() {
this.view.currentView.manualRender(options);
},
render: function() {
return new SideNavLayoutView(options);
}
});
App.rContent.show(new NameSpaceContainerLayoutView(options));
});
},
defaultAction: function(actions) {
// We have no matching route, lets just log what the URL was
Utils.setUrl({
......
<!--
* 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="clearfix">
<!-- <div class="fontLoader">
<i class="fa fa-refresh fa-spin-custom"></i>
</div> -->
<div class="col-sm-12 default-tab">
<ul class="nav nav-tabs" data-id="tab-list">
<li role="namespace" class="tab active"><a href="#tab-namespace" aria-controls="tab-namespace" role="tab" data-toggle="tab">Namespaces</a></li>
<li role="enum"><a href="#tab-enum" aria-controls="tab-enum" role="tab" data-toggle="tab">Enumerations</a></li>
</ul>
</div>
</div>
<div>
<div class="tab-content purge-details">
<div id="tab-namespace" role="namespace" class="tab-pane active animated fadeIn">
<div id="r_namespaceTableLayoutView">
</div>
</div>
<div id="tab-enum" role="enum" class="tab-pane animated fadeIn">
<div id="r_enumTableLayoutView">
</div>
</div>
</div>
</div>
</div>
\ No newline at end of file
<!--
* 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="page-title clearfix">
<!-- <div class="fontLoader">
<i class="fa fa-refresh fa-spin-custom"></i>
</div> -->
<div class="row">
<div class="col-sm-12 default-tab">
<ul class="nav nav-tabs" data-id="tab-list">
<li role="purgeaudit" class="tab active"><a href="#tab-audit" aria-controls="tab-audit" role="tab" data-toggle="tab">Audits</a></li>
<li role="namespace"><a href="#tab-namespace" aria-controls="tab-namespace" role="tab" data-toggle="tab">Namespace</a></li>
</ul>
</div>
</div>
</div>
<div>
<div class="tab-content purge-details">
<div id="tab-audit" role="purgeaudit" class="tab-pane active animated fadeIn">
<div id="r_auditTableLayoutView">
<div class="fontLoader-relative">
<i class="fa fa-refresh fa-spin-custom"></i>
</div>
<div class="position-relative">
<div class="tableOverlay"></div>
<!-- Not for table Loader its only for initial loading -->
<div class="fontLoader">
<i class="fa fa-refresh fa-spin-custom"></i>
</div>
<div class="attributeResultContainer form-group ">
<button class="btn-action btn-sm attribute-filter-text" data-id='purgeAttrFilter'> <i class="fa fa-angle-right"></i> Filters</button>
<div class="attribute-filter-container hide">
<div class="panel panel-default expand_collapse_panel-icon" data-id="purgeRegion">
<div class="panel-heading" data-toggle="collapse" href="#collapsePurge" aria-expanded="true">
<h4 class="panel-title">
<a>Purge</a>
</h4>
<div class="btn-group pull-right">
<button type="button" title="Collapse"><i class="ec-icon fa"></i></button>
</div>
</div>
<div id="collapsePurge" class="panel-collapse collapse in">
<div class="panel-body">
<div id='r_attributeQueryBuilderPurge' class='attribute-querybuilder'>
<div class='fontLoader'><i class='fa fa-refresh fa-spin-custom'></i></div>
</div>
</div>
</div>
</div>
<div class='attribute-result-footer'>
<div type="ok" class="btn btn-atlas ok search" data-id='attrApply'>Apply</div>
<div type="ok" class="btn btn-atlas ok" data-id='attrClose'>Close</div>
</div>
</div>
<div class="pull-right">
<select class="pull-right form-controlrow-margin-bottom" data-id="purgeType"></select>
</div>
</div>
<div class='attr-filter-overlay hide'></div>
<div class="auditTable" style="display: none">
<div id="r_purgeAuditTableLayoutView"></div>
<div>
<span class="labelShowRecord pull-left" data-id="pageRecordText"></span>
</div>
<div class="pagination-box">
<div class="backgrid-paginator pull-right">
<ul>
<li>
<button type="button" data-id="previousAuditData" title="Previous" disabled=true>
<i class="fa fa-angle-left" aria-hidden="true"></i>
</button>
</li>
<li class="active">
<a href="javascript:void(0)" data-id="activePage"></a>
</li>
<li>
<button type="button" data-id="nextAuditData" title="Next">
<i class="fa fa-angle-right" aria-hidden="true"></i>
</button>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="no-data" data-id="showDefault">
<div class="position-relative thick-border">
<div style="padding-top: 20px; " class="table-responsive tableBorder">
<table class="table table-hover backgrid table-quickMenu">
<tbody>
<tr class="empty">
<td colspan="16"><span>No Records found!</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div id="tab-namespace" role="namespace" class="tab-pane animated fadeIn">
<div id="r_namespaceTableLayoutView">
</div>
</div>
</div>
</div>
</div>
\ No newline at end of file
......@@ -14,9 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
-->
<h4 style="word-break: break-word;">Name: <span data-id="name"></span></h4>
<div class="panel-group server-stats-container statsContainer " id="accordion">
<div class="panel panel-default custom-panel expand_collapse_panel-icon hide" data-id="detailsAttribute">
<h4 class="entity-name" style="word-break: break-word;">Name: <span data-id="name"></span></h4>
<div class="panel-group server-stats-container auditStatusContainer clearfix" id="accordion">
<div class="panel panel-default custom-panel expand_collapse_panel-icon hide col-sm-5" data-id="detailsAttribute">
<div class="panel-heading" data-toggle="collapse" href="#detailAttributeTableCollapse" aria-expanded="true">
<h4 class="panel-title">
<a>Properties </a>
......@@ -37,7 +37,7 @@
</div>
</div>
</div>
<div class="panel panel-default custom-panel expand_collapse_panel-icon hide" data-id="attributeDetails">
<div class="panel panel-default custom-panel expand_collapse_panel-icon hide col-sm-5" data-id="attributeDetails">
<div class="panel-heading" data-toggle="collapse" href="#attributeTableCollapse" aria-expanded="true">
<h4 class="panel-title">
<a data-id="panel-attr-heading">Technical properties </a>
......@@ -58,7 +58,7 @@
</div>
</div>
</div>
<div class="panel panel-default custom-panel expand_collapse_panel-icon hide" data-id="relationShipAttributeDetails">
<div class="panel panel-default custom-panel expand_collapse_panel-icon hide col-sm-5" data-id="relationShipAttributeDetails">
<div class="panel-heading" data-toggle="collapse" href="#relationShipAttributeTableCollapse" aria-expanded="true">
<h4 class="panel-title">
<a>Relationship properties </a>
......@@ -79,7 +79,7 @@
</div>
</div>
</div>
<div class="panel panel-default custom-panel expand_collapse_panel-icon hide" data-id="customAttributeDetails">
<div class="panel panel-default custom-panel expand_collapse_panel-icon hide col-sm-5" data-id="customAttributeDetails">
<div class="panel-heading" data-toggle="collapse" href="#customAttributeCollapse" aria-expanded="true">
<h4 class="panel-title">
<a>User-defined properties </a>
......@@ -100,7 +100,7 @@
</div>
</div>
</div>
<div class="panel panel-default custom-panel expand_collapse_panel-icon hide" data-id="labelsDetails">
<div class="panel panel-default custom-panel expand_collapse_panel-icon hide col-sm-5" data-id="labelsDetails">
<div class="panel-heading" data-toggle="collapse" href="#labelsTableCollapse" aria-expanded="true">
<h4 class="panel-title">
<a>Labels</a>
......
......@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
-->
<div class="modal-dialog {{mainClass}} " style="width:{{width}}" role="document">
<div class="modal-dialog {{mainClass}}{{modal-full-screen}}" style="width:{{width}}" role="document">
<div class="modal-content">
{{#if title}}
<div class="modal-header">
......
<!--
* 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="fontLoader">
<i class="fa fa-refresh fa-spin-custom"></i>
</div>
<form name="tagDefinitionform" class="hide form-horizontal" data-id="createTagForm" style="width: 70%;margin: 0 auto;">
{{#if fromTable}}
<div class="form-group">
<label class="control-label col-sm-2 {{#if create}}required{{/if}}" for="name">Name</label>
{{#if create}}
<div class="col-sm-10">
<input class="form-control namespace-name" data-id="tagName" placeholder="Name(required)" autofocus />
</div>
{{else}}
<span class="ellipsis-with-margin control-label text-left col-sm-10" data-id="title"></span> {{/if}}
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="description">Description</label>
<div class="col-sm-10">
<input class="form-control" data-id="description" value="{{description}}" placeholder="Description" />
</div>
</div>
{{/if}}
<div class="form-group">
<!-- <h4 class="col-sm-6">Attributes</h4> -->
{{#if isEditAttr}}
<div class="col-sm-12 no-padding-left">
<button title="Add Namespace attribute" type="button" class="btn btn-action btn-sm pull-left" data-id="attributeData"><i class="fa fa-plus"></i> Add Namespace attribute</button>
</div>
{{/if}}
</div>
<div data-id="addAttributeDiv">
</div>
</div>
</form>
<div class="modal-footer " data-id="modalFooter">
<button type="button" class="btn btn-action cancel" data-id="namespaceAttrPageCancle">Cancel</button>
<button type="button" class="btn btn-atlas ok" data-id="namespaceAttrPageOk">Ok</button>
</div>
\ No newline at end of file
<!--
* 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="form-horizontal form-group clearfix enum-attr">
<div class="form-group" data-id="enumTypeSelectorContainer">
<label class="control-label col-sm-3 required" for="enumType">Enum Name</label>
<div class="col-sm-8">
<select class="form-control enumTypeSelector" data-id="enumSelector">
</select>
</div>
</div>
<div class="form-group " data-id="enumValueSelectorContainer">
<label class="control-label col-sm-3 required" for="enumVal">Enum Value</label>
<div class="col-sm-8">
<select class="form-control enumValueSelector" data-id="valueSelector" multiple="multiple">
</select>
</div>
</div>
<div class="form-group " data-id="enumFooter">
<label class="control-label col-sm-3" for="enumVal"></label>
<div class="col-sm-8">
<button type="button" data-id="enumCancleBtn" class="btn btn-action cancel">Cancel</button>
<button type="button" data-id="enumOkBtn" class="btn btn-atlas ok">Update</button>
</div>
</div>
</div>
\ No newline at end of file
<!--
* 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="namespace-attr-page" data-id="namespaceAttrPage">
<div class="namespace-attr-tableOverlay"></div>
<div class=" modal-header" data-id="namespaceAttrPageHeader">
<h4 class="modal-title" data-id="namespaceAttrPageTitle"></h4>
</div>
<div id="r_modal">
</div>
<div class="namespace-attr-fontLoader">
<i class="fa fa-refresh fa-spin-custom"></i>
</div>
<!-- <div class="modal-footer " data-id="modalFooter">
<button type="button" class="btn btn-action cancel" data-id="namespaceAttrPageCancle">Cancel</button>
<button type="button" class="btn btn-atlas ok" data-id="namespaceAttrPageOk">Ok</button>
</div> -->
</div>
<div class="namespace-details" data-id="namespaceDetailPage">
<div class="position-relative">
<div class="pull-right inline-content-fr no-padding-left">
<div class="inline" data-id="colManager"></div>
<div class="inline">
<button type="button" data-id="addAttribute" title="Create Namespace" class="btn btn-action btn-sm pull-right btn-loader" style="margin-bottom: 10px;" data-action="createNamespace">
<i class='fa fa-plus'></i> Attributes
</button></div>
</div>
<div class="tableOverlay"></div>
<div class='attr-filter-overlay hide'></div>
<div class="auditTable name-space-details">
<div id="r_nameSpaceAttrTableLayoutView"></div>
</div>
</div>
</div>
\ No newline at end of file
<!--
* 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="form-group clearfix namespace-attr">
<div class="form-group">
<div class="col-sm-12 attributePlusData " align="right">
<button type="button" class="btn btn-danger btn-sm closeInput" data-id="close"><i class="fa fa-times"></i></button>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3 required" for="name">Name</label>
<div class="col-sm-8">
<input class="form-control attributeInput" data-id="attributeInput" placeholder="Attribute name">
</input>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3 required" for="type">Type</label>
<div class="col-sm-8">
<select class="form-control dataTypeSelector" data-id="dataTypeSelector">
<option selected="selected">string</option>
<option>boolean</option>
<option>byte</option>
<option>short</option>
<option>int</option>
<option>float</option>
<option>double</option>
<option>long</option>
<option>date</option>
<option>enumeration</option>
</select>
</div>
</div>
<!-- <div class="form-group" data-id="multiValueSelect">
<label class="control-label col-sm-3" for="multiValSelect">Enable Multivalues</label>
<div class="col-sm-8">
<input type="checkbox" class="form-check-input multi-value-select" data-id="multiValueSelectStatus">
</div>
</div> -->
<div class="form-group enumtype-container" data-id="enumTypeSelectorContainer">
<div class="">
<label class="control-label col-sm-3 required" for="enumType">Enum Name</label>
<div class="col-sm-5">
<select class="form-control enumTypeSelector" data-id="enumTypeSelector" multiple="false">
</select>
</div>
<div class="col-sm-3">
<button type="button" class="btn btn-action btn-sm" data-id="createNewEnum" data-action="" title="Create/Update Enum"> <i class="fa fa-pencil"></i> Enum</button>
</div>
</div>
</div>
<div class="form-group enumvalue-container" data-id="enumValueSelectorContainer">
<div class="">
<label class="control-label col-sm-3 required" for="enumVal">Enum Value</label>
<div class="col-sm-8">
<select class="form-control enumValueSelector" data-id="enumValueSelector" multiple="true">
</select>
</div>
</div>
</div>
<div class="form-group" data-id="stringLengthContainer">
<div class="stringlength-container">
<label class="control-label col-sm-3 required" for="name">Max length</label>
<div class="col-sm-8">
<input type="number" class="form-control stringLengthVal" data-id="stringLength" placeholder="Maximum length">
</div>
</div>
</div>
<div class="form-group entity-namespace-selector">
<label class="control-label col-sm-3" for="name">Applicable Types</label>
<div class="col-sm-8">
<select class="form-control entityTypeSelector" data-id="entityTypeSelector" multiple="multiple">
</select>
</div>
</div>
</div>
\ No newline at end of file
<!--
* 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>
<div id="r_nameSpaceDetailContainer" class="sidebar-fixed-filter"></div>
<div id="r_nameSpaceAttrContainer" class="col-sm-12"></div>
</div>
\ No newline at end of file
<!--
* 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="page-title clearfix">
<div class="fontLoader">
<i class="fa fa-refresh fa-spin-custom"></i>
</div>
<div class="back-button" title="Back to search page" style="top:15px">
<i class="fa fa-angle-left" data-id="backButton"></i>
</div>
<div class="tagDetail clearfix form-horizontal col-sm-12">
<h1 class="title"><span data-id="title"></span></h1>
<p class="form-group col-sm-12" data-id="description"></p>
</div>
</div>
</div>
\ No newline at end of file
<!--
* 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="namespace-attr-page" data-id="namespaceAttrPage">
<div class="namespace-attr-tableOverlay"></div>
<div class=" modal-header" data-id="namespaceAttrPageHeader">
<h4 class="modal-title" data-id="namespaceAttrPageTitle"></h4>
</div>
<div id="r_modal">
</div>
<div class="namespace-attr-fontLoader">
<i class="fa fa-refresh fa-spin-custom"></i>
</div>
<!-- <div class="modal-footer " data-id="modalFooter">
<button type="button" class="btn btn-action cancel" data-id="namespaceAttrPageCancle">Cancel</button>
<button type="button" class="btn btn-atlas ok" data-id="namespaceAttrPageOk">Ok</button>
</div> -->
</div>
<div class="namespace-details" data-id="namespaceDetailPage">
<div class="position-relative">
<div class="pull-right inline-content-fr no-padding-left">
<div class="inline" data-id="colManager"></div>
<div class="inline">
<button type="button" data-id="createNameSpace" title="Create Namespace" class="btn btn-action btn-sm pull-right btn-loader" style="margin-bottom: 10px;" data-action="createNamespace">
<i class='fa fa-plus'></i> Create Namespace
</button></div>
</div>
<div class="tableOverlay"></div>
<div class='attr-filter-overlay hide'></div>
<div class="auditTable name-space-details">
<div id="r_nameSpaceTableLayoutView"></div>
</div>
</div>
</div>
\ No newline at end of file
......@@ -39,19 +39,13 @@
<div data-id="r_classificationTreeRender"></div>
</div>
<div class="col-sm-12">
<div data-id="r_nameSpaceTreeRender"></div>
</div>
<div class="col-sm-12">
<div data-id="r_glossaryTreeRender"></div>
</div>
<div class="col-sm-12">
<div data-id="r_customFilterTreeRender"></div>
<!-- <div class="panel panel-default expand_collapse_panel-icon right-icons">
<div class="panel-heading dash-button-icon" data-toggle="collapse" aria-expanded="false" href="#c_saveSearch">
<i class="ec-icon fa"></i>
<h4 class="panel-title">Custom Filters</h4>
</div>
<div id="c_saveSearch" class="panel-collapse collapse">
<div class="basicSaveSearch" data-id="r_saveSearchBasic"></div>
</div>
</div> -->
</div>
</div>
</div>
......
......@@ -20,29 +20,21 @@
<h4 class="panel-title">Glossaries</h4>
<div class="btn-group pull-right">
<button type="button" class="typeRefresh" data-id="refreshTree" data-type="term" title="Refresh"><i class="fa fa-refresh"></i></button>
<!-- <ul class="dropdown-menu right-align tree-menu">
<li data-id="createGlossary"><i class="fa fa-plus"></i> <a>Create Glossary</a></li>
</ul> -->
<button type="button" class="typeRefresh" data-id="showGlossaryType" title="Show Category">
<i class="fa fa-toggle-on switch-button"></i>
</button>
<!-- <button title="Create Glossary" type="button" data-id="createGlossary">
<button title="Create Glossary" type="button" data-id="createGlossary">
<i class="fa fa-plus"></i>
</button> -->
<!-- <button data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" type="button" data-id="termMenu"><i class="fa fa-ellipsis-v"></i></button> -->
<button type="button" class="typeRefresh dropdown">
</button>
<!-- <button type="button" class="typeRefresh dropdown">
<div class=" btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-ellipsis-v"></i>
</div>
<ul class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<!-- <li data-id="showGlossaryType" data-type="term"> <i class="fa fa-toggle-on switch-button"></i><span>Show Category</span>
</li> -->
<!-- <li data-id="refreshTree" data-type="term"><i class="fa fa-refresh"></i><span>Refresh</span>
</li> -->
<li data-id="createGlossary" data-type="term"> <i class="fa fa-plus"></i><span>Create Glossary</span>
</li>
</ul>
</button>
</button> -->
</div>
</div>
<div id="c_term" class="panel-collapse collapse jstree-with-action in">
......
<!--
* 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="panel panel-default expand_collapse_panel-icon right-icons">
<div class="panel-heading dash-button-icon clearfix" data-toggle="collapse" aria-expanded="true" href="#c_namespace">
<i class="ec-icon fa"></i>
<h4 class="panel-title">Namespaces</h4>
<div class="btn-group pull-right">
<button type="button" class="typeRefresh drop-down-menu-view" data-id="refreshTree" data-type="classification" title="Refresh">
<i class="fa fa-refresh"></i>
</button>
<button type="button" class="typeRefresh drop-down-menu-view" data-id="createNameSpace" data-type="classification" title="Open Namespaces">
<i class="fa fa-external-link"></i>
</button>
<!-- <button type="button" class="typeRefresh dropdown">
<div class=" btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-ellipsis-v"></i>
</div>
<ul class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<li data-id="groupOrFlatTreeView" data-type="classification"> <i class="fa fa-list-ul"></i><span>Show flat tree</span>
</li>
<li data-id="createNameSpace" data-type="classification"> <i class="fa fa-plus"></i><span>Create Namespace</span>
</li>
</button> -->
</ul>
</button>
</div>
</div>
<div id="c_namespace" class="panel-collapse collapse jstree-with-action in">
<div data-id="nameSpaceSearchTree"></div>
</div>
</div>
\ No newline at end of file
......@@ -29,8 +29,6 @@
<div class="btn-group pull-right header-menu">
<table class="header-menu">
<tr>
<!-- <td><a class="show-classification" href="javascript:void(0);" title="Clasification"><i class="fa fa-tag"></i></a></td>
<td><a class="show-glossary" href="javascript:void(0);" title="Glossary"><i class="fa fa-folder"></i></a></td> -->
<td><a class="show-stat" href="javascript:void(0);" title="Statistics"><i class="fa fa-bar-chart"></i></a></td>
<td class="user-dropdown">
<table data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
......@@ -43,13 +41,17 @@
</td>
</tr>
</table>
<ul class="dropdown-menu right-align">
<li class="aboutAtlas"><a href="javascript:void(0)">About</a></li>
<li class="aboutAtlas"><a target="_blank" href="http://atlas.apache.org/">Help</a></li>
<li role="separator" class="divider"></li>
<li>
<a data-id="signOut" href="javascript:void(0)"><i class="fa fa-sign-out"></i>Logout</a>
<ul class="dropdown-menu pull-right multi-level" role="menu" aria-labelledby="dropdownMenu">
<li><a href="#!/administrator" data-id="purgeSearch">Administration</a></li>
<li class="dropdown-submenu">
<a tabindex="-1" href="javascript:void(0)"> Help </span></a>
<ul class="dropdown-menu">
<li><a target="_blank" href="http://atlas.apache.org/">Documentation</a></li>
<li class="aboutAtlas"><a href="javascript:void(0)">About</a></li>
</ul>
</li>
<li class="divider"></li>
<li><a data-id="signOut" href="javascript:void(0)"><i class="fa fa-sign-out"></i>Logout</a></li>
</ul>
</td>
</tr>
......
......@@ -112,10 +112,90 @@ define(['require',
$("body").on('click', '.dropdown-menu.dropdown-changetitle li a', function() {
$(this).parents('li').find(".btn:first-child").html($(this).text() + ' <span class="caret"></span>');
});
$("body").on('click', '.dropdown-menu.multi-level .dropdown-submenu>a', function(e) {
e.stopPropagation();
e.preventDefault();
});
$("body").on('click', '.btn', function() {
$(this).blur();
});
$.fn.select2.amd.define("TagHideDeleteButtonAdapter", [
"select2/utils",
"select2/selection/multiple",
"select2/selection/placeholder",
"select2/selection/eventRelay",
"select2/selection/search",
],
function(Utils, MultipleSelection, Placeholder, EventRelay, SelectionSearch) {
// Decorates MultipleSelection with Placeholder
var adapter = Utils.Decorate(MultipleSelection, Placeholder);
adapter = Utils.Decorate(adapter, SelectionSearch);
adapter = Utils.Decorate(adapter, EventRelay);
adapter.prototype.render = function() {
// Use selection-box from SingleSelection adapter
// This implementation overrides the default implementation
var $search = $(
'<li class="select2-search select2-search--inline">' +
'<input class="select2-search__field" type="search" tabindex="-1"' +
' autocomplete="off" autocorrect="off" autocapitalize="none"' +
' spellcheck="false" role="textbox" aria-autocomplete="list" />' +
'</li>'
);
this.$searchContainer = $search;
this.$search = $search.find('input');
let $selection = MultipleSelection.prototype.render.call(this);
this._transferTabIndex();
return $selection;
};
adapter.prototype.update = function(data) {
// copy and modify SingleSelection adapter
var that = this;
this.clear();
if (data.length === 0) {
this.$selection.find('.select2-selection__rendered')
.append(this.$searchContainer);
this.$search.attr('placeholder', this.options.get("placeholder"));
return;
}
this.$search.attr('placeholder', '');
var $rendered = this.$selection.find('.select2-selection__rendered'),
$selectionContainer = [];
if (data.length > 0) {
_.each(data, function(obj) {
var $container = $('<li class="select2-selection__choice"></li>'),
formatted = that.display(obj, $rendered),
$remove = $('<span class="select2-selection__choice__remove" role="presentation">&times;</span>'),
allowRemoveAttr = $(obj.element).data("allowremove"),
allowRemove = obj.allowRemove === undefined ? allowRemoveAttr : obj.allowRemove;
if (allowRemove === undefined || allowRemove !== false) {
$container.append($remove);
}
$container.data("data", obj);
$container.append(formatted);
$selectionContainer.push($container);
});
Utils.appendMany($rendered, $selectionContainer);
}
var searchHadFocus = this.$search[0] == document.activeElement;
this.$search.attr('placeholder', '');
this.$selection.find('.select2-selection__rendered')
.append(this.$searchContainer);
this.resizeSearch();
if (searchHadFocus) {
this.$search.focus();
}
};
return adapter;
});
$.fn.select2.amd.define("ServiceTypeFilterDropdownAdapter", [
"select2/utils",
"select2/dropdown",
......
......@@ -95,6 +95,7 @@ define(['require', 'utils/Utils', 'marionette', 'backgrid', 'asBreadcrumbs', 'jq
});
}
if (modelValue.get('width')) that.$el.find('.' + modelValue.get('name')).css('min-width', modelValue.get('width') + 'px');
if (modelValue.get('fixWidth')) that.$el.find('.' + modelValue.get('name')).css('width', modelValue.get('fixWidth') + 'px');
if (modelValue.get('toolTip')) that.$el.find('.' + modelValue.get('name')).attr('title', modelValue.get('toolTip'));
});
return this;
......@@ -161,6 +162,95 @@ define(['require', 'utils/Utils', 'marionette', 'backgrid', 'asBreadcrumbs', 'jq
return this;
};
/*
backgrid-expandable-cell
https://github.com/cime/backgrid-expandable-cell
Copyright (c) 2014 Andrej Cimperšek
Licensed under the MIT @license.
*/
Backgrid.ExpandableCell = Backgrid.Cell.extend({
accordion: true,
toggle: '<i style="cursor: pointer;" class="glyphicon toggle pull-left"></i>',
toggleClass: 'toggle',
toggleExpandedClass: 'fa fa-angle-down',
toggleCollapsedClass: 'fa fa-angle-right',
trClass: 'expandable',
tdClass: 'expandable-content',
events: {
'click': 'setToggle'
},
initialize: function(options) {
if (options.accordion) {
this.accordion = options.accordion;
}
this.column = options.column;
if (!(this.column instanceof Backgrid.Column)) {
this.column = new Backgrid.Column(this.column);
}
var column = this.column,
model = this.model,
$el = this.$el;
if (Backgrid.callByNeed(column.renderable(), column, model)) $el.addClass("renderable");
},
render: function() {
/* follow along with the original render really... */
this.$el.empty();
this.$toggleEl = $(this.toggle).addClass(this.toggleClass).addClass(this.toggleCollapsedClass);
this.$el.append(this.$toggleEl);
this.delegateEvents();
return this;
},
setToggle: function() {
var detailsRow = this.$el.data('details');
var toggle = this.$toggleEl;
/* if there's details data already stored, then we'll remove it */
if (detailsRow) {
$(detailsRow).remove();
this.$el.data('details', null);
toggle.removeClass(this.toggleExpandedClass).addClass(this.toggleCollapsedClass);
} else {
if (this.accordion) {
var table = this.$el.closest('table');
$('.' + this.toggleClass, table).filter('.' + this.toggleExpandedClass).click();
}
var renderableColumns = this.$el.closest('table').find('th.renderable').length;
var isRenderable = false;
var cellClass = this.tdClass;
if (Backgrid.callByNeed(this.column.renderable(), this.column, this.model)) {
isRenderable = true;
cellClass += ' renderable';
}
/* build a jquery object for the new row... */
detailsRow = $('<tr class="' + this.trClass + '"></td><td class="' + cellClass + '" colspan="' + (renderableColumns - 1) + '"></td></tr>');
/* Inject new row */
this.$el.closest('tr').after(detailsRow);
/* Call expand function */
this.column.get('expand')(detailsRow.find('td.' + this.tdClass), this.model);
this.$el.data('details', detailsRow);
toggle.removeClass(this.toggleCollapsedClass).addClass(this.toggleExpandedClass);
}
return this;
}
});
// Backgrid patch
Backgrid.Header.prototype.initialize = BackgridHeaderInitializeMethod;
......
......@@ -226,8 +226,28 @@ define(['require', 'utils/Enums', 'utils/Utils', 'underscore'], function(require
},
sessionApiUrl: function() {
return this.baseUrl + '/admin/session';
},
purgeApiUrl: function() {
return this.baseUrl + '/admin/audit';
},
nameSpaceApiUrl: function() {
return this.typedefsUrl().defs + '?type=namespace';
},
nameSpaceGuidApiUrl: function(guid) {
var lineageUrl = this.baseUrlV2 + '/types/namespacedef/guid';
if (guid) {
return lineageUrl + '/' + guid;
} else {
return lineageUrl
}
},
nameSpaceUpdateUrl: function(name) {
if (name) {
return this.typedefsUrl().def + '/name/' + name;
} else {
return this.typedefsUrl().defs + '?type=namespace';
}
}
});
return UrlLinks;
......
......@@ -382,6 +382,12 @@ define(['require', 'utils/Globals', 'pnotify', 'utils/Messages', 'utils/Enums',
matchString: "search"
});
},
isAdministratorTab: function(url) {
return this.checkTabUrl({
url: url,
matchString: "administrator"
});
},
isCustomFilterTab: function(url) {
return this.checkTabUrl({
url: url,
......
/**
* 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/administrator/AdministratorLayoutView_tmpl',
'collection/VEntityList',
'models/VSearch',
'utils/Utils',
'utils/Enums',
'utils/UrlLinks',
'utils/CommonViewFunction'
], function(require, Backbone, AdministratorLayoutView_tmpl, VEntityList, VSearch, Utils, Enums, UrlLinks, CommonViewFunction) {
'use strict';
var AdministratorLayoutView = Backbone.Marionette.LayoutView.extend(
/** @lends AuditTableLayoutView */
{
_viewName: 'AdministratorLayoutView',
template: AdministratorLayoutView_tmpl,
/** Layout sub regions */
regions: {
RNamespaceTableLayoutView: "#r_namespaceTableLayoutView",
REnumTableLayoutView: '#r_enumTableLayoutView'
},
/** ui selector cache */
ui: {
tablist: '[data-id="tab-list"] li'
},
/** ui events hash */
events: function() {
var events = {};
events["click " + this.ui.tablist] = function(e) {
var tabValue = $(e.currentTarget).attr('role');
Utils.setUrl({
url: Utils.getUrlState.getQueryUrl().queyParams[0],
urlParams: { tabActive: tabValue || 'properties' },
mergeBrowserUrl: false,
trigger: false,
updateTabState: true
});
};
return events;
},
/**
* intialize a new AuditTableLayoutView Layout
* @constructs
*/
initialize: function(options) {
_.extend(this, _.pick(options, 'value', 'guid', 'entity', 'entityName', 'attributeDefs', 'nameSpaceCollection', 'enumDefCollection'));
},
onShow: function() {
if (this.value && this.value.tabActive) {
this.$('.nav.nav-tabs').find('[role="' + this.value.tabActive + '"]').addClass('active').siblings().removeClass('active');
this.$('.tab-content').find('[role="' + this.value.tabActive + '"]').addClass('active').siblings().removeClass('active');
$("html, body").animate({ scrollTop: (this.$('.tab-content').offset().top + 1200) }, 1000);
}
},
bindEvents: function() {
this.renderEnumLayoutView();
},
onRender: function() {
this.renderNameSpaceLayoutView();
this.bindEvents();
},
renderNameSpaceLayoutView: function(obj) {
var that = this;
require(['views/name_space/NameSpaceTableLayoutView'], function(NameSpaceTableLayoutView) {
that.RNamespaceTableLayoutView.show(new NameSpaceTableLayoutView({ nameSpaceCollection: that.nameSpaceCollection }));
});
},
renderEnumLayoutView: function(obj) {
var that = this;
require(["views/name_space/EnumCreateUpdateItemView"], function(EnumCreateUpdateItemView) {
var view = new EnumCreateUpdateItemView({
enumDefCollection: that.enumDefCollection,
nameSpaceCollection: that.nameSpaceCollection
});
that.REnumTableLayoutView.show(view);
});
}
});
return AdministratorLayoutView;
});
\ No newline at end of file
/**
* 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/audit/PurgeAuditTableLayoutView_tmpl',
'collection/VEntityList',
'models/VSearch',
'utils/Utils',
'utils/Enums',
'utils/UrlLinks',
'utils/CommonViewFunction'
], function(require, Backbone, PurgeAuditTableLayoutView_tmpl, VEntityList, VSearch, Utils, Enums, UrlLinks, CommonViewFunction) {
'use strict';
var PurgeAuditTableLayoutView = Backbone.Marionette.LayoutView.extend(
/** @lends AuditTableLayoutView */
{
_viewName: 'PurgeAuditTableLayoutView',
template: PurgeAuditTableLayoutView_tmpl,
/** Layout sub regions */
regions: {
RAuditTableLayoutView: "#r_purgeAuditTableLayoutView",
RQueryBuilderPurge: "#r_attributeQueryBuilderPurge",
RNamespaceTableLayoutView: "#r_namespaceTableLayoutView"
},
/** ui selector cache */
ui: {
auditCreate: "[data-id='auditCreate']",
previousAuditData: "[data-id='previousAuditData']",
nextAuditData: "[data-id='nextAuditData']",
pageRecordText: "[data-id='pageRecordText']",
activePage: "[data-id='activePage']",
purgeEntityClick: "[data-id='purgeEntity']",
purgeType: "[data-id='purgeType']",
attrFilter: "[data-id='purgeAttrFilter']",
purgeRegion: "[data-id='purgeRegion']",
attrApply: "[data-id='attrApply']",
showDefault: "[data-id='showDefault']",
attrClose: "[data-id='attrClose']",
tablist: '[data-id="tab-list"] li'
},
/** ui events hash */
events: function() {
var events = {},
that = this;
events["click " + this.ui.purgeEntityClick] = "onClickPurgeEntity";
events["change " + this.ui.purgeType] = "onClickPurgeType";
events["click " + this.ui.nextAuditData] = "onClickNextAuditData";
events["click " + this.ui.previousAuditData] = "onClickPreviousAuditData";
events["click " + this.ui.attrFilter] = function(e) {
// this.$('.fa-chevron-right').toggleClass('fa-chevron-down');
this.$('.fa-angle-right').toggleClass('fa-angle-down');
this.$('.attributeResultContainer').addClass("overlay");
this.$('.attribute-filter-container, .attr-filter-overlay').toggleClass('hide');
// this.$('.attribute-filter-container').toggleClass('attribute-filter-container')
this.onClickAttrFilter();
};
events["click " + this.ui.attrClose] = function(e) {
that.closeAttributeModel();
};
events["click " + this.ui.attrApply] = function(e) {
that.okAttrFilterButton(e);
};
events["click " + this.ui.tablist] = function(e) {
var tabValue = $(e.currentTarget).attr('role');
Utils.setUrl({
url: Utils.getUrlState.getQueryUrl().queyParams[0],
urlParams: { tabActive: tabValue || 'properties' },
mergeBrowserUrl: false,
trigger: false,
updateTabState: true
});
};
return events;
},
/**
* intialize a new AuditTableLayoutView Layout
* @constructs
*/
initialize: function(options) {
_.extend(this, _.pick(options, 'value', 'guid', 'entity', 'entityName', 'attributeDefs', 'nameSpaceCollection'));
this.entityCollection = new VEntityList();
this.limit = 26;
this.entityCollection.url = UrlLinks.purgeApiUrl();
this.entityCollection.modelAttrName = "events";
this.entityModel = new this.entityCollection.model();
this.pervOld = [];
this.onlyPurge = true;
this.commonTableOptions = {
collection: this.entityCollection,
includeFilter: false,
includePagination: false,
includePageSize: false,
includeAtlasTableSorting: true,
includeFooterRecords: false,
gridOpts: {
className: "table table-hover backgrid table-quickMenu",
emptyText: 'No records found!'
},
filterOpts: {},
paginatorOpts: {}
};
this.currPage = 1;
this.isFilters = null;
this.purgeAttrFilters = [{
"id": "startTime",
"label": "startTime (date)",
"operators": [
"=",
"!=",
">",
"<",
">=",
"<="
],
"optgroup": "Select Purge Attribute",
"plugin": "daterangepicker",
"plugin_config": {
"locale": {
"format": "MM/DD/YYYY h:mm A"
},
"showDropdowns": true,
"singleDatePicker": true,
"timePicker": true
},
"type": "date"
}, {
"id": "endTime",
"label": "endTime (date)",
"operators": [
"=",
"!=",
">",
"<",
">=",
"<="
],
"optgroup": "Select Purge Attribute",
"plugin": "daterangepicker",
"plugin_config": {
"locale": {
"format": "MM/DD/YYYY h:mm A"
},
"showDropdowns": true,
"singleDatePicker": true,
"timePicker": true
},
"type": "date"
}]
},
onRender: function() {
var str = '<option>All</option><option>Purge</option>';
this.ui.purgeType.html(str);
this.ui.purgeType.select2({});
this.bindEvents();
this.ui.purgeRegion.hide();
this.getPurgeParam();
this.entityCollection.comparator = function(model) {
return -model.get('timestamp');
}
},
onShow: function() {
if (this.value && this.value.tabActive) {
this.$('.nav.nav-tabs').find('[role="' + this.value.tabActive + '"]').addClass('active').siblings().removeClass('active');
this.$('.tab-content').find('[role="' + this.value.tabActive + '"]').addClass('active').siblings().removeClass('active');
$("html, body").animate({ scrollTop: (this.$('.tab-content').offset().top + 1200) }, 1000);
}
},
bindEvents: function() {
this.renderNameSpaceLayoutView();
},
renderNameSpaceLayoutView: function(obj) {
var that = this;
require(['views/name_space/AllNameSpaceTableLayoutView'], function(AllNameSpaceTableLayoutView) {
that.RNamespaceTableLayoutView.show(new AllNameSpaceTableLayoutView({ nameSpaceCollection: that.nameSpaceCollection }));
});
},
getToOffset: function() {
return ((this.limit - 1) * this.currPage);
},
getFromOffset: function(toOffset) {
// +2 because of toOffset is alrady in minus and limit is +1;
return ((toOffset - this.limit) + 2);
},
renderOffset: function(options) {
var entityLength;
if (options.nextClick) {
options.previous.removeAttr("disabled");
if (this.entityCollection.length != 0) {
this.currPage++;
}
} else if (options.previousClick) {
options.next.removeAttr("disabled");
if (this.currPage > 1 && this.entityCollection.models.length) {
this.currPage--;
}
}
if (this.entityCollection.models.length === this.limit) {
// Because we have 1 extra record.
entityLength = this.entityCollection.models.length - 1;
} else {
entityLength = this.entityCollection.models.length
}
this.ui.activePage.attr('title', "Page " + this.currPage);
this.ui.activePage.text(this.currPage);
var toOffset = this.getToOffset();
this.ui.pageRecordText.html("Showing <u>" + entityLength + " records</u> From " + this.getFromOffset(toOffset) + " - " + toOffset);
},
getPurgeParam: function() {
var that = this;
that.fetchCollection({
next: that.ui.nextAuditData,
nextClick: false,
previous: that.ui.previousAuditData,
isPurge: that.onlyPurge
});
},
closeAttributeModel: function() {
var that = this;
that.$('.attributeResultContainer').removeClass("overlay");
that.$('.fa-angle-right').toggleClass('fa-angle-down');
that.$('.attribute-filter-container, .attr-filter-overlay').toggleClass('hide');
},
getAttributes: function() {
var purgeAttributes = [{
"attributeName": "operation",
"operator": "like",
"attributeValue": "PURGE"
}];
if (!this.onlyPurge) {
purgeAttributes.push({
"attributeName": "userName",
"operator": "like",
"attributeValue": "admin"
})
}
if (this.isFilters) {
_.each(this.isFilters, function(purgeFilter) {
purgeAttributes.push({
"attributeName": purgeFilter.id,
"operator": purgeFilter.operator,
"attributeValue": Date.parse(purgeFilter.value).toString(),
})
})
this.isFilters = null;
}
return purgeAttributes;
},
renderQueryBuilder: function(obj, rQueryBuilder) {
var that = this;
require(['views/search/QueryBuilderView'], function(QueryBuilderView) {
rQueryBuilder.show(new QueryBuilderView(obj));
});
},
onClickAttrFilter: function() {
var that = this;
this.ui.purgeRegion.show();
require(['views/search/QueryBuilderView'], function(QueryBuilderView) {
that.RQueryBuilderPurge.show(new QueryBuilderView({ purgeAttrFilters: that.purgeAttrFilters }));
});
},
okAttrFilterButton: function(options) {
var that = this,
isFilterValidate = true,
queryBuilderRef = that.RQueryBuilderPurge.currentView.ui.builder;
if (queryBuilderRef.data("queryBuilder")) {
var queryBuilder = queryBuilderRef.queryBuilder("getRules");
queryBuilder ? that.isFilters = queryBuilder.rules : isFilterValidate = false;
}
if (isFilterValidate) {
that.closeAttributeModel();
that.getPurgeParam();
}
},
fetchCollection: function(options) {
var that = this,
purgeParam = {
condition: "AND",
criterion: that.getAttributes()
};
this.$('.fontLoader').show();
this.$('.tableOverlay').show();
if (that.entityCollection.models.length > 1) {
if (options.nextClick) {
this.pervOld.push(that.entityCollection.first().get('eventKey'));
}
}
var apiObj = {
skipDefaultError: true,
sort: false,
success: function(dataOrCollection, response) {
if (!(that.ui.pageRecordText instanceof jQuery)) {
return;
}
that.entityCollection.fullCollection.reset(dataOrCollection);
if (that.entityCollection.models.length < that.limit) {
options.previous.attr('disabled', true);
options.next.attr('disabled', true);
}
that.renderOffset(options);
that.entityCollection.sort();
if (that.entityCollection.models.length) {
if (that.entityCollection && (that.entityCollection.models.length < that.limit && that.currPage == 1) && that.next == that.entityCollection.last().get('eventKey')) {
options.next.attr('disabled', true);
options.previous.removeAttr("disabled");
} else {
that.next = that.entityCollection.last().get('eventKey');
if (that.pervOld.length === 0) {
options.previous.attr('disabled', true);
}
}
}
that.renderTableLayoutView();
that.$('.fontLoader').hide();
that.$('.tableOverlay').hide();
that.$('.auditTable').show(); // Only for first time table show because we never hide after first render.
},
silent: true,
reset: true
}
$.extend(that.entityCollection.queryParams, { limit: 25, offset: 0, auditFilters: purgeParam });
$.extend(apiObj, { contentType: 'application/json', dataType: 'json', data: JSON.stringify(that.entityCollection.queryParams) })
this.entityCollection.constructor.nonCrudOperation.call(this, UrlLinks.purgeApiUrl(), "POST", apiObj);
},
renderTableLayoutView: function() {
var that = this;
this.ui.showDefault.hide();
require(['utils/TableLayout'], function(TableLayout) {
var cols = new Backgrid.Columns(that.getAuditTableColumns());
that.RAuditTableLayoutView.show(new TableLayout(_.extend({}, that.commonTableOptions, {
columns: cols
})));
if (!(that.entityCollection.models.length < that.limit)) {
that.RAuditTableLayoutView.$el.find('table tr').last().hide();
}
});
},
getAuditTableColumns: function() {
var that = this;
return this.entityCollection.constructor.getTableCols({
result: {
label: "",
cell: "html",
editable: false,
sortable: false,
cell: Backgrid.ExpandableCell,
fixWidth: "20",
accordion: false,
expand: function(el, model) {
var purgeValues = '';
if (model.attributes.params) {
var guids = model.attributes.result.replace('[', '').replace(']', '').split(',');
_.each(guids, function(purgeGuid) {
// purgeGuid.trim();
purgeValues += '<a class="blue-link" data-id="purgeEntity" >' + purgeGuid.trim() + '</a></br>';
})
} else {
purgeValues = '';
}
var purgeText = '<div class="row"><div class="col-sm-2">Purge Entities: </div><div class="col-sm-10">' + purgeValues + '</div></div>';
/* set expanded row's content */
$(el).append($('<div>').html(purgeText));
}
},
userName: {
label: "Users",
cell: "html",
editable: false,
sortable: function(e, attr, order) {
return function(left, right) {
// no-op
if (order == null) return 0;
var l = left.get(attr),
r = right.get(attr),
t;
// if descending order, swap left and right
if (order === 1) t = l, l = r, r = t;
// compare as usual
if (l === r) return 0;
else if (l < r) return -1;
return 1;
}
}
},
operation: {
label: "Operation",
cell: "String",
editable: false,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
if (rawValue === "PURGE" && model.attributes.params) {
var purgeLength = model.attributes.result.replace('[', '').replace(']', '').split(',').length;
return purgeLength === 1 ? purgeLength + " entity purged." : purgeLength + " entities purged.";
} else {
return "No entity purged.";
}
}
})
},
clientId: {
label: "Client ID",
cell: "String",
editable: false
},
startTime: {
label: "Start Time",
cell: "html",
editable: false,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
return new Date(rawValue);
}
})
},
endTime: {
label: "End Time",
cell: "html",
editable: false,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
return new Date(rawValue);
}
})
}
}, this.entityCollection);
},
onClickPurgeType: function(e, value) {
this.onlyPurge = e.currentTarget.value === "Purge" ? true : false;
this.getPurgeParam();
},
onClickPurgeEntity: function(e) {
var that = this;
require([
'modules/Modal', 'views/audit/AuditTableLayoutView', 'views/audit/CreateAuditTableLayoutView',
], function(Modal, AuditTableLayoutView, CreateAuditTableLayoutView) {
var obj = {
guid: $(e.target).text(),
},
modal = new Modal({
title: "Purged Entity Details : " + obj.guid,
content: new AuditTableLayoutView(obj),
mainClass: "modal-full-screen",
okCloses: true,
showFooter: false,
}).open();
modal.on('closeModal', function() {
$('.modal').css({ 'padding-right': '0px !important' });
modal.trigger('cancel');
});
modal.$el.on('click', 'td a', function() {
modal.trigger('cancel');
});
});
},
onClickNextAuditData: function() {
var that = this;
this.ui.previousAuditData.removeAttr("disabled");
$.extend(this.entityCollection.queryParams, {
startKey: function() {
return that.next;
}
});
this.fetchCollection({
next: this.ui.nextAuditData,
nextClick: true,
previous: this.ui.previousAuditData
});
},
onClickPreviousAuditData: function() {
var that = this;
this.ui.nextAuditData.removeAttr("disabled");
$.extend(this.entityCollection.queryParams, {
startKey: function() {
return that.pervOld.pop();
}
});
this.fetchCollection({
next: this.ui.nextAuditData,
previousClick: true,
previous: this.ui.previousAuditData
});
},
});
return PurgeAuditTableLayoutView;
});
\ No newline at end of file
......@@ -179,6 +179,31 @@ define(['require',
getAuditTableColumns: function() {
var that = this;
return this.entityCollection.constructor.getTableCols({
tool: {
label: "",
cell: "html",
editable: false,
sortable: false,
cell: Backgrid.ExpandableCell,
accordion: false,
expand: function(el, model) {
el.attr('colspan', '4');
require([
'views/audit/CreateAuditTableLayoutView',
], function(CreateAuditTableLayoutView) {
that.action = model.get('action');
// $(el.target).attr('disabled', true);
var eventModel = that.entityCollection.fullCollection.findWhere({ 'eventKey': model.get('eventKey') }).toJSON(),
collectionModel = new that.entityCollection.model(eventModel),
view = new CreateAuditTableLayoutView({ guid: that.guid, entityModel: collectionModel, action: that.action, entity: that.entity, entityName: that.entityName, attributeDefs: that.attributeDefs });
view.render();
$(el).append($('<div>').html(view.$el));
});
}
},
user: {
label: "Users",
cell: "html",
......@@ -207,20 +232,7 @@ define(['require',
}
}
})
},
tool: {
label: "Tools",
cell: "html",
editable: false,
sortable: false,
width: 100,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
return '<div class="btn btn-action btn-sm" data-id="auditCreate" data-action="' + Enums.auditAction[model.get('action')] + '" data-modalId="' + model.get('eventKey') + '">Detail</div>';
}
})
},
}
}, this.entityCollection);
},
......
......@@ -157,7 +157,7 @@ define(['require',
}
} else if (detailObj == "Deleted entity") {
that.updateName(this.entityName);
that.updateName(this.entityName ? this.entityName : "Entity");
}
}
});
......
/**
* 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/name_space/CreateNameSpaceLayoutView_tmpl',
'utils/Utils',
'utils/Messages',
'views/name_space/NameSpaceAttributeItemView',
'collection/VTagList',
'utils/UrlLinks',
'platform'
], function(require, Backbone, CreateNameSpaceLayoutViewTmpl, Utils, Messages, NameSpaceAttributeItemView, VTagList, UrlLinks, platform) {
var CreateNameSpaceLayoutView = Backbone.Marionette.CompositeView.extend(
/** @lends CreateNameSpaceLayoutView */
{
_viewName: 'CreateNameSpaceLayoutView',
template: CreateNameSpaceLayoutViewTmpl,
templateHelpers: function() {
return {
create: this.create,
description: this.description,
fromTable: this.fromTable,
isEditAttr: this.isEditAttr
};
},
/** Layout sub regions */
regions: {},
childView: NameSpaceAttributeItemView,
childViewContainer: "[data-id='addAttributeDiv']",
childViewOptions: function() {
return {
// saveButton: this.ui.saveButton,
parentView: this
};
},
/** ui selector cache */
ui: {
tagName: "[data-id='tagName']",
description: "[data-id='description']",
title: "[data-id='title']",
attributeData: "[data-id='attributeData']",
addAttributeDiv: "[data-id='addAttributeDiv']",
createTagForm: '[data-id="createTagForm"]',
namespaceAttrPageCancle: '[data-id="namespaceAttrPageCancle"]',
namespaceAttrPageOk: '[data-id="namespaceAttrPageOk"]'
},
/** ui events hash */
events: function() {
var events = {};
events["click " + this.ui.attributeData] = "onClickAddAttriBtn";
events["click " + this.ui.namespaceAttrPageOk] = function(e) {
var that = this,
modal = that.$el;
if (e.target.dataset.action == "attributeEdit" || e.target.dataset.action == "addAttribute") {
// var selectedNamespace = that.nameSpaceCollection.fullCollection.findWhere({ guid: that.guid });
that.onUpdateAttr();
} else {
if (that.$el.find('.form-control.namespace-name')[0].value === "") {
$(that.$el.find('.form-control.namespace-name')[0]).css("borderColor", "red");
Utils.notifyInfo({
content: "Namespace name is empty."
});
} else {
that.onCreateNameSpace();
}
}
};
events["click " + this.ui.namespaceAttrPageCancle] = function(e) {
this.options.onUpdateNamespace();
};
return events;
},
/**
* intialize a new CreateNameSpaceLayoutView Layout
* @constructs
*/
initialize: function(options) {
_.extend(this, _.pick(options, 'tagCollection', 'enumDefCollection', 'model', 'tag', 'descriptionData', 'selectedTag', 'isNewNameSpace', 'isAttrEdit', 'entityDefCollection', 'typeHeaders', 'attrDetails'));
this.fromTable = this.isNewNameSpace ? true : false;
this.isEditAttr = this.isAttrEdit ? false : true;
if (this.model) {
this.description = this.model.get('description');
} else {
this.create = true;
}
if (!this.isNewNameSpace) {
this.collection = this.isAttrEdit ? new Backbone.Collection([{
"name": this.attrDetails.name,
"typeName": this.attrDetails.attrTypeName,
"isOptional": true,
"cardinality": "SINGLE",
"valuesMinCount": 0,
"valuesMaxCount": 1,
"isUnique": false,
"isIndexable": false
}]) : new Backbone.Collection([{
"name": "",
"typeName": "string",
"isOptional": true,
"cardinality": "SINGLE",
"valuesMinCount": 0,
"valuesMaxCount": 1,
"isUnique": false,
"isIndexable": false
}]);
} else {
this.collection = new Backbone.Collection();
}
},
bindEvents: function() {},
onRender: function() {
var that = this;
this.$('.fontLoader').show();
if (this.create) {
this.tagCollectionList();
} else {
this.ui.title.html('<span>' + _.escape(this.tag) + '</span>');
}
if (!('placeholder' in HTMLInputElement.prototype)) {
this.ui.createTagForm.find('input,textarea').placeholder();
}
if (this.isNewNameSpace == true) {
that.ui.namespaceAttrPageOk.text("Create");
that.ui.namespaceAttrPageOk.attr('data-action', 'newNamespace');
} else {
that.ui.namespaceAttrPageOk.text("Save");
that.ui.namespaceAttrPageOk.attr('data-action', 'attributeEdit');
}
this.hideLoader();
},
tagCollectionList: function() {
var that = this,
str = '';
this.tagCollection.fullCollection.each(function(val) {
var name = Utils.getName(val.toJSON());
str += '<option ' + (name == that.selectedTag ? 'selected' : '') + '>' + (name) + '</option>';
});
},
hideLoader: function() {
this.$('.fontLoader').hide();
this.$('.hide').removeClass('hide');
},
collectionAttribute: function() {
this.collection.add(new Backbone.Model({
"name": "",
"typeName": "string",
"isOptional": true,
"cardinality": "SINGLE",
"valuesMinCount": 0,
"valuesMaxCount": 1,
"isUnique": false,
"isIndexable": false
}));
},
onClickAddAttriBtn: function() {
this.collectionAttribute();
if (!('placeholder' in HTMLInputElement.prototype)) {
this.ui.addAttributeDiv.find('input,textarea').placeholder();
}
},
loaderStatus: function(isActive) {
var that = this;
if (isActive) {
parent.$('.namespace-attr-tableOverlay').show();
parent.$('.namespace-attr-fontLoader').show();
} else {
parent.$('.namespace-attr-tableOverlay').hide();
parent.$('.namespace-attr-fontLoader').hide();
}
},
validateValues: function() {
var attrNameValidate = true,
enumValue = true,
stringValidate = true,
enumType = true;
this.ui;
if (this.$el.find(".attributeInput").length > 0) {
this.$el.find(".attributeInput").each(function() {
if ($(this).val() === "") {
$(this).css("borderColor", "red");
attrNameValidate = false;
}
});
}
if (this.$el.find(".enumvalue-container").length > 0 && this.$el.find(".enumvalue-container")[0].style.display != 'none') {
this.$el.find(".enumvalue-container").each(function(index) {
if (this.style.display != 'none') {
if ($(this).find(".enumValueSelector").length > 0) {
$(this).find(".enumValueSelector").each(function(index) {
if ($(this).val().length === 0) {
$(this).css("borderColor", "red");
enumValue = false;
}
});
}
}
})
}
if (this.$el.find(".enumtype-container").length > 0 && this.$el.find(".enumtype-container")[0].style.display != 'none') {
this.$el.find(".enumtype-container").each(function(index) {
if (this.style.display != 'none') {
if ($(this).find(".enumTypeSelector").length > 0) {
$(this).find(".enumTypeSelector").each(function(index) {
if ($(this).val() == null || $(this).val() == '' || $(this).val().length === 0) {
$(this).css("borderColor", "red");
enumType = false;
}
});
}
}
})
}
if (this.$el.find(".stringlength-container").length > 0 && this.$el.find(".stringlength-container")[0].style.display != 'none') {
this.$el.find(".stringlength-container").each(function(index) {
if (this.style.display != 'none') {
if ($(this).find(".stringLengthVal").length > 0) {
$(this).find(".stringLengthVal").each(function(index) {
if ($(this).val().length === 0) {
$(this).css("borderColor", "red");
stringValidate = false;
}
});
}
};
})
}
this.$el.find(".attributeInput").keyup(function() {
$(this).css("borderColor", "#e8e9ee");
});
if (!attrNameValidate) {
Utils.notifyInfo({
content: "Please fill the attributes details"
});
return true;
}
if (!enumType) {
Utils.notifyInfo({
content: "Please enter the Enumeration Name or select another type"
});
return true;
}
if (!enumValue) {
Utils.notifyInfo({
content: "Please enter the Enum values or select another type"
});
return true;
}
if (!stringValidate) {
Utils.notifyInfo({
content: "Please enter the Max Length for string or select another type"
});
return true;
}
},
onCreateNameSpace: function() {
var that = this,
validate = true,
attrNameValidate = true,
enumValue = true,
stringValidate = true,
isPutCall = false,
isPostCallEnum = false,
enumDefs = [],
putEnumDef = [];
this.checkLoader = 0;
if (this.validateValues()) {
return;
};
this.loaderStatus(true);
var name = this.ui.tagName.val(),
description = _.escape(this.ui.description.val());
var attributeObj = this.collection.toJSON();
if (this.collection.length === 1 && this.collection.first().get("name") === "") {
attributeObj = [];
}
if (attributeObj.length) {
_.each(attributeObj, function(obj) {
var isMultiCheck = obj.multiValueSelect;
obj.options = {
"applicableEntityTypes": JSON.stringify(that.$el.find(".entityTypeSelector").val()),
"maxStrLength": that.$el.find(".stringLengthVal").val() ? that.$el.find(".stringLengthVal").val() : "0"
};
if (obj.typeName != "string" && obj.typeName != "boolean" && obj.typeName != "byte" && obj.typeName != "short" && obj.typeName != "int" && obj.typeName != "float" && obj.typeName != "double" && obj.typeName != "long" && obj.typeName != "date") {
obj.typeName = obj.typeName;
var enumName = enumDefCollection.fullCollection.findWhere({ name: obj.typeName });
if (enumName) {
var enumDef = enumName.get('elementDefs');
if (enumDef.length === obj.enumValues.length) {
_.each(enumDef, function(enumVal, index) {
if (obj.enumValues.indexOf(enumVal.value) === -1) {
isPutCall = true;
};
})
} else {
isPutCall = true;
}
} else {
isPostCallEnum = true;
}
var elementValues = [];
_.each(obj.enumValues, function(inputEnumVal, index) {
elementValues.push({
"ordinal": index + 1,
"value": inputEnumVal
})
});
if (isPostCallEnum) {
enumDefs.push({
"name": obj.typeName,
"elementDefs": elementValues
})
}
if (isPutCall) {
putEnumDef.push({
"name": obj.typeName,
"elementDefs": elementValues
})
}
}
if (isMultiCheck) {
obj.multiValued = true;
if (obj.typeName == "string" || obj.typeName == "int" || obj.typeName == "float") {
obj.typeName = "array<" + obj.typeName + ">";
}
}
});
var notifyObj = {
modal: true,
confirm: {
confirm: true,
buttons: [{
text: "Ok",
addClass: "btn-atlas btn-md",
click: function(notice) {
notice.remove();
}
},
null
]
}
};
}
this.json = {
"enumDefs": enumDefs,
"structDefs": [],
"classificationDefs": [],
"entityDefs": [],
"namespaceDefs": [{
"category": "NAMESPACE",
"createdBy": "admin",
"updatedBy": "admin",
"version": 1,
"typeVersion": "1.1",
"name": name.trim(),
"description": description.trim(),
"attributeDefs": attributeObj
}]
};
var apiObj = {
sort: false,
success: function(model, response) {
var nameSpaveDef = model.namespaceDefs;
if (nameSpaveDef) {
that.options.nameSpaceCollection.fullCollection.add(nameSpaveDef);
Utils.notifySuccess({
content: "Namespace " + name + Messages.getAbbreviationMsg(false, 'addSuccessMessage')
});
}
that.checkLoader--;
if (that.checkLoader == 0) {
that.options.onUpdateNamespace();
}
},
silent: true,
reset: true,
complete: function(model, status) {
that.loaderStatus(false);
}
}
that.checkLoader++;
$.extend(apiObj, { contentType: 'application/json', dataType: 'json', data: JSON.stringify(that.json) })
this.options.nameSpaceCollection.constructor.nonCrudOperation.call(this, UrlLinks.nameSpaceApiUrl(), "POST", apiObj);
if (isPutCall) {
var putData = {
"enumDefs": putEnumDef
};
that.checkLoader++;
$.extend(apiObj, { contentType: 'application/json', dataType: 'json', data: JSON.stringify(putData) })
this.options.nameSpaceCollection.constructor.nonCrudOperation.call(this, UrlLinks.typedefsUrl().defs, "PUT", apiObj);
}
},
onUpdateAttr: function() {
var that = this,
attrNameValidate = true,
enumValue = true,
stringValidate = true,
attributeDefs = that.options.selectedNamespace.get('attributeDefs'),
enumDefs = [],
postEnumDef = [],
isPutCall = false,
isPostCallEnum = false;
this.checkLoader = 0;
if (this.validateValues()) {
return;
};
if (this.$el.find(".namespace-attr").length > 0 && this.collection.length > 0) {
this.loaderStatus(true);
var attributeObj = this.collection.toJSON(),
name = this.collection.first().get("name"),
multipleName = '';
if (this.collection.length === 1 && this.collection.first().get("name") === "") {
attributeObj = [];
}
if (attributeObj.length > 0) {
_.each(attributeObj, function(obj) {
var isMultiCheck = obj.multiValueSelect;
multipleName += obj.name + ", ";
obj.options = {
"applicableEntityTypes": JSON.stringify(that.$el.find(".entityTypeSelector").val()),
"maxStrLength": that.$el.find(".stringLengthVal").val() ? that.$el.find(".stringLengthVal").val() : "0"
};
if (obj.typeName != "string" && obj.typeName != "boolean" && obj.typeName != "byte" && obj.typeName != "short" && obj.typeName != "int" && obj.typeName != "float" && obj.typeName != "double" && obj.typeName != "long" && obj.typeName != "date") {
var enumName = enumDefCollection.fullCollection.findWhere({ name: obj.typeName });
if (enumName) {
var enumDef = enumName.get('elementDefs');
if (enumDef.length === obj.enumValues.length) {
_.each(enumDef, function(enumVal, index) {
if (obj.enumValues.indexOf(enumVal.value) === -1) {
isPutCall = true;
};
})
} else {
isPutCall = true;
}
} else {
isPostCallEnum = true;
}
var elementValues = [];
_.each(obj.enumValues, function(inputEnumVal, index) {
elementValues.push({
"ordinal": index + 1,
"value": inputEnumVal
})
});
if (isPostCallEnum) {
postEnumDef.push({
"name": obj.typeName,
"elementDefs": elementValues
})
} else if (isPutCall) {
enumDefs.push({
"name": obj.typeName,
"elementDefs": elementValues
})
}
}
if (isMultiCheck) {
obj.multiValued = true;
if (obj.typeName == "string" || obj.typeName == "int" || obj.typeName == "float") {
obj.typeName = "array<" + obj.typeName + ">";
}
}
});
var notifyObj = {
modal: true,
confirm: {
confirm: true,
buttons: [{
text: "Ok",
addClass: "btn-atlas btn-md",
click: function(notice) {
notice.remove();
}
},
null
]
}
};
if (that.options.isNewAttr == true) {
_.each(attributeObj, function(obj) {
attributeDefs.push(obj);
})
} else {
var selectedNamespaceUpdateCopy = that.options.selectedNamespace;
var attrDef = selectedNamespaceUpdateCopy.toJSON().attributeDefs;
_.each(attrDef, function(attrObj) {
if (attrObj.name === that.$el.find(".attributeInput")[0].value) {
attrObj.name = attributeObj[0].name;
attrObj.typeName = attributeObj[0].typeName;
attrObj.multiValued = attributeObj[0].multiValueSelect || false;
attrObj.options.applicableEntityTypes = attributeObj[0].options.applicableEntityTypes;
attrObj.enumValues = attributeObj[0].enumValues;
attrObj.options.maxStrLength = attributeObj[0].options.maxStrLength;
}
});
}
var putNameSpace = function() {
that.checkLoader++;
$.extend(apiObj, { contentType: 'application/json', dataType: 'json', data: JSON.stringify(that.json) })
that.options.nameSpaceCollection.constructor.nonCrudOperation.call(that, UrlLinks.nameSpaceUpdateUrl(), "PUT", apiObj);
}
this.json = {
"enumDefs": enumDefs,
"structDefs": [],
"classificationDefs": [],
"entityDefs": [],
"namespaceDefs": that.options.isNewAttr ? [that.options.selectedNamespace.toJSON()] : [selectedNamespaceUpdateCopy.toJSON()]
};
var apiObj = {
sort: false,
success: function(model, response) {
if (model.namespaceDefs.length === 0 && model.enumDefs.length) {
putNameSpace();
} else {
var selectedNameSpace = that.options.nameSpaceCollection.fullCollection.findWhere({ guid: that.options.guid });
Utils.notifySuccess({
content: "One or more Namespace attribute" + Messages.getAbbreviationMsg(false, 'editSuccessMessage')
});
if (model.namespaceDefs && model.namespaceDefs.length) {
that.options.selectedNamespace.set(model.namespaceDefs[0]);
}
that.options.onEditCallback();
}
that.checkLoader--;
if (that.checkLoader == 0) {
that.options.onUpdateNamespace();
}
},
silent: true,
reset: true,
complete: function(model, status) {
that.loaderStatus(false);
}
}
if (isPostCallEnum) {
var postData = {
"enumDefs": postEnumDef
};
this.checkLoader++;
$.extend(apiObj, { contentType: 'application/json', dataType: 'json', data: JSON.stringify(postData) })
this.options.nameSpaceCollection.constructor.nonCrudOperation.call(this, UrlLinks.typedefsUrl().defs, "POST", apiObj);
} else {
putNameSpace();
}
}
} else {
Utils.notifySuccess({
content: "No attribute updated"
});
this.loaderStatus(false);
that.options.onUpdateNamespace();
}
}
});
return CreateNameSpaceLayoutView;
});
\ No newline at end of file
/*
* 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/name_space/EnumCreateUpdateItemView_tmpl", "utils/Utils", "utils/UrlLinks", "utils/Messages"], function(
require,
Backbone,
EnumCreateUpdateItemViewTmpl,
Utils,
UrlLinks,
Messages
) {
"use strict";
return Backbone.Marionette.ItemView.extend(
/** @lends GlobalExclusionListView */
{
template: EnumCreateUpdateItemViewTmpl,
/** Layout sub regions */
regions: {},
/** ui selector cache */
ui: {
enumTypeSelectorContainer: "[data-id='enumTypeSelectorContainer']",
enumSelector: "[data-id='enumSelector']",
enumValueSelectorContainer: "[data-id='enumValueSelectorContainer']",
valueSelector: "[data-id='valueSelector']",
enumCancleBtn: "[data-id='enumCancleBtn']",
enumOkBtn: "[data-id='enumOkBtn']"
},
/** ui events hash */
events: function() {
var events = {};
events["change " + this.ui.enumSelector] = function(e) {
this.model.set({ enumValues: e.target.value.trim() });
};
events["change " + this.ui.enumSelector] = function(e) {
var emumValue = this.ui.enumSelector.select2("data")[0] ?
this.ui.enumSelector.select2("data")[0].text :
this.ui.enumSelector.val();
if (emumValue == "" || emumValue == null) {
this.ui.enumValueSelectorContainer.hide();
} else {
this.ui.enumValueSelectorContainer.show();
this.showEnumValues(emumValue);
}
};
events["change " + this.ui.valueSelector] = function(e) {};
events["click " + this.ui.enumCancleBtn] = function(e) {
if (this.options.closeModal) {
this.options.closeModal();
return;
}
this.ui.enumValueSelectorContainer.hide();
this.ui.enumSelector.val("").trigger("change");
this.ui.enumCancleBtn.attr("disabled", "true");
};
events["click " + this.ui.enumOkBtn] = function(e) {
this.onUpdateEnum();
};
return events;
},
/**
* intialize a new GlobalExclusionComponentView Layout
* @constructs
*/
initialize: function(options) {
this.enumDefCollection = options.enumDefCollection;
this.nameSpaceCollection = options.nameSpaceCollection;
},
onRender: function() {
var that = this,
entitytypes = "",
enumTypes = [];
this.ui.enumValueSelectorContainer.hide();
this.emumTypeSelectDisplay();
if (!this.options.closeModal) {
this.ui.enumCancleBtn.attr("disabled", "true");
this.ui.enumCancleBtn.text("Clear");
}
},
showEnumValues: function(enumName) {
var enumValues = "",
selectedValues = [],
selectedEnum = this.enumDefCollection.fullCollection.findWhere({ name: enumName }),
selectedEnumValues = selectedEnum ? selectedEnum.get("elementDefs") : null,
savedValues = [];
_.each(selectedEnumValues, function(enumVal, index) {
selectedValues.push(_.unescape(enumVal.value));
enumValues += "<option>" + enumVal.value + "</option>";
});
this.ui.enumCancleBtn.removeAttr("disabled");
this.ui.valueSelector.empty();
this.ui.valueSelector.append(enumValues);
this.ui.valueSelector.val(selectedValues);
this.ui.valueSelector.select2({
placeholder: "Select Enum value",
allowClear: false,
tags: true,
multiple: true
});
},
emumTypeSelectDisplay: function() {
var enumTypes = "";
this.enumDefCollection.fullCollection.each(function(model, index) {
enumTypes += "<option>" + _.escape(model.get("name")) + "</option>";
});
this.ui.enumSelector.empty();
this.ui.enumSelector.append(enumTypes);
this.ui.enumSelector.val("");
this.ui.enumSelector.select2({
placeholder: "Select Enum name",
tags: true,
allowClear: true,
multiple: false,
templateResult: this.formatSearchResult
});
},
formatSearchResult: function(state) {
if (!state.id) {
return state.text;
}
if (!state.element) {
return $("<span>Create new enum : <strong> " + _.escape(state.text) + "</strong></span>");
} else {
return $("<span>" + _.escape(state.text) + "</span>");
}
},
validationEnum: function() {
var selectedEnumName = this.ui.enumSelector.val(),
selectedEnumValues = this.ui.valueSelector.val();
if (selectedEnumName == "" || selectedEnumName == null) {
this.ui.enumOkBtn.removeAttr("disabled");
Utils.notifyInfo({
content: "Please enter the Enumeration Name"
});
return true;
}
if (selectedEnumValues == "" || selectedEnumValues == null) {
this.ui.enumOkBtn.removeAttr("disabled");
Utils.notifyInfo({
content: "Please enter the Enum values"
});
return true;
}
},
onUpdateEnum: function(view, modal) {
var that = this,
selectedEnumName = this.ui.enumSelector.val(),
selectedEnumValues = this.ui.valueSelector.val(),
enumName = this.enumDefCollection.fullCollection.findWhere({ name: selectedEnumName }),
isPutCall = false,
isPostCallEnum = false,
enumDefs = [];
if (this.validationEnum()) {
return;
}
this.ui.enumOkBtn.attr("disabled", "true");
if (enumName) {
var enumDef = enumName.get("elementDefs");
if (enumDef.length === selectedEnumValues.length) {
_.each(enumDef, function(enumVal, index) {
if (selectedEnumValues.indexOf(enumVal.value) === -1) {
isPutCall = true;
}
});
} else {
isPutCall = true;
}
} else {
isPostCallEnum = true;
}
var elementValues = [];
_.each(selectedEnumValues, function(inputEnumVal, index) {
elementValues.push({
ordinal: index + 1,
value: _.escape(inputEnumVal)
});
});
enumDefs.push({
name: selectedEnumName,
elementDefs: elementValues
});
this.json = {
enumDefs: enumDefs
};
var apiObj = {
sort: false,
success: function(model, response) {
that.ui.enumValueSelectorContainer.hide();
if (isPostCallEnum) {
that.enumDefCollection.add(model.enumDefs[0]);
Utils.notifySuccess({
content: "Enumeration " + selectedEnumName + " added successfully"
});
} else {
var foundEnum = that.enumDefCollection.fullCollection.find({ guid: model.enumDefs[0].guid })
if (foundEnum) {
foundEnum.set(model.enumDefs[0]);
}
Utils.notifySuccess({
content: "Enumeration " + selectedEnumName + " updated successfully"
});
}
if (that.options.onUpdateEnum) {
that.options.onUpdateEnum();
}
that.ui.enumCancleBtn.attr("disabled", "true");
},
silent: true,
reset: true,
complete: function(model, status) {
that.emumTypeSelectDisplay();
that.ui.enumOkBtn.removeAttr("disabled");
if (that.options.closeModal) {
that.options.closeModal();
}
}
};
$.extend(apiObj, { contentType: "application/json", dataType: "json", data: JSON.stringify(this.json) });
if (isPostCallEnum) {
this.nameSpaceCollection.constructor.nonCrudOperation.call(this, UrlLinks.typedefsUrl().defs, "POST", apiObj);
} else if (isPutCall) {
this.nameSpaceCollection.constructor.nonCrudOperation.call(this, UrlLinks.typedefsUrl().defs, "PUT", apiObj);
} else {
Utils.notifySuccess({
content: "No updated values"
});
that.ui.enumOkBtn.removeAttr("disabled");
if (that.options.closeModal) {
that.options.closeModal();
}
}
}
}
);
});
\ No newline at end of file
/**
* 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/name_space/NameSpaceAttrTableLayoutView_tmpl',
'collection/VEntityList',
'collection/VTagList',
'models/VSearch',
'utils/Utils',
'utils/Messages',
'utils/Enums',
'utils/UrlLinks',
'utils/CommonViewFunction'
], function(require, Backbone, NameSpaceAttrTableLayoutView_tmpl, VEntityList, VTagList, VSearch, Utils, Messages, Enums, UrlLinks, CommonViewFunction) {
'use strict';
var NameSpaceAttrTableLayoutView = Backbone.Marionette.LayoutView.extend(
/** @lends NameSpaceAttrTableLayoutView */
{
_viewName: 'NameSpaceAttrTableLayoutView',
template: NameSpaceAttrTableLayoutView_tmpl,
/** Layout sub regions */
regions: {
RNameSpaceAttrTableLayoutView: "#r_nameSpaceAttrTableLayoutView",
RModal: "#r_modal"
},
/** ui selector cache */
ui: {
attributeEdit: "[data-id='attributeEdit']",
addAttribute: '[data-id="addAttribute"]',
namespaceAttrPage: "[data-id='namespaceAttrPage']",
namespaceAttrPageTitle: "[data-id='namespaceAttrPageTitle']",
namespaceDetailPage: "[data-id='namespaceDetailPage']",
},
/** ui events hash */
events: function() {
var events = {};
events["click " + this.ui.attributeEdit] = "onEditAttr";
events["click " + this.ui.addAttribute] = "onEditAttr";
return events;
},
/**
* intialize a new NameSpaceAttrTableLayoutView Layout
* @constructs
*/
initialize: function(options) {
_.extend(this, _.pick(options, 'guid', 'entity', 'entityName', 'attributeDefs', 'typeHeaders', 'nameSpaceCollection', 'nameSpaceAttr'));
this.commonTableOptions = {
collection: this.nameSpaceAttr,
includeFilter: false,
includePagination: false,
includePageSize: false,
includeAtlasTableSorting: true,
includeFooterRecords: false,
gridOpts: {
className: "table table-hover backgrid table-quickMenu",
emptyText: 'No records found!'
},
filterOpts: {},
paginatorOpts: {}
};
this.isFilters = null;
this.showDetails = true;
},
onRender: function() {
this.toggleNamespaceDetailsAttrView();
if (this.nameSpaceCollection.models.length && !this.model) {
this.model = this.nameSpaceCollection.fullCollection.findWhere({ guid: this.guid });
Utils.showTitleLoader(this.$('.page-title .fontLoader'), this.$('.tagDetail'));
this.renderTableLayoutView();
}
},
bindEvents: function() {},
toggleNamespaceDetailsAttrView: function() {
var that = this;
if (that.showDetails) {
that.ui.namespaceAttrPage.hide();
that.ui.namespaceDetailPage.show();
} else {
that.ui.namespaceAttrPage.show();
that.ui.namespaceDetailPage.hide();
}
},
onEditAttr: function(e) {
var that = this,
isAttrEdit = false,
selectedNamespace = that.nameSpaceCollection.fullCollection.findWhere({ guid: that.guid }),
attrributes = selectedNamespace ? selectedNamespace.get('attributeDefs') : null,
attrName = e.target.dataset.name ? e.target.dataset.name : null,
attrDetails = { name: attrName };
if (e.target.dataset.action == 'attributeEdit') {
isAttrEdit = true
}
if (selectedNamespace) {
that.newAttr = isAttrEdit ? false : true;
_.each(attrributes, function(attrObj) {
if (attrObj.name === attrName) {
attrDetails.attrTypeName = attrObj.typeName;
if (attrObj.typeName.includes('array')) {
attrDetails.attrTypeName = attrObj.typeName.replace("array<", "").replace(">", "");
attrDetails.multiValued = true;
}
attrDetails.attrEntityType = attrObj.options && attrObj.options.applicableEntityTypes ? JSON.parse(attrObj.options.applicableEntityTypes) : null;
attrDetails.maxStrLength = attrObj.options && attrObj.options.maxStrLength ? attrObj.options.maxStrLength : null;
attrDetails.enumValues = attrObj.enumValues ? attrObj.enumValues : null;
}
});
this.showDetails = false;
that.toggleNamespaceDetailsAttrView();
require(["views/name_space/CreateNameSpaceLayoutView"], function(CreateNameSpaceLayoutView) {
that.view = new CreateNameSpaceLayoutView({
onEditCallback: function() {
enumDefCollection.fetch({ reset: true });
that.nameSpaceAttr.fullCollection.reset();
that.options.selectedNameSpace.fetch({
skipDefaultError: true,
complete: function(model, status) {
that.nameSpaceAttr.fullCollection.add(model.responseJSON.attributeDefs);
}
});
},
onUpdateNamespace: function() {
that.renderTableLayoutView();
that.showDetails = true;
that.toggleNamespaceDetailsAttrView();
},
parent: that.$el,
tagCollection: that.nameSpaceCollection,
enumDefCollection: enumDefCollection,
isAttrEdit: isAttrEdit,
attrDetails: attrDetails,
typeHeaders: typeHeaders,
selectedNamespace: selectedNamespace,
nameSpaceCollection: nameSpaceCollection,
guid: that.guid,
isNewAttr: that.newAttr
});
if (isAttrEdit) {
that.ui.namespaceAttrPageTitle.text("Update Attribute of: " + selectedNamespace.get('name'));
} else {
that.ui.namespaceAttrPageTitle.text("Add Namespace Attribute for: " + selectedNamespace.get('name'));
}
that.RModal.show(that.view);
});
}
},
renderTableLayoutView: function() {
var that = this;
require(['utils/TableLayout'], function(TableLayout) {
var cols = new Backgrid.Columns(that.getNamespaceTableColumns());
that.RNameSpaceAttrTableLayoutView.show(new TableLayout(_.extend({}, that.commonTableOptions, {
columns: cols
})));
if (!(that.nameSpaceAttr.models.length < that.limit)) {
// that.RNameSpaceAttrTableLayoutView.$el.find('table tr').last().hide();
}
});
},
getNamespaceTableColumns: function() {
var that = this;
return this.nameSpaceAttr.constructor.getTableCols({
name: {
label: "Attribute Name",
cell: "html",
editable: false,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
return model.get('name');
}
})
},
typeName: {
label: "typeName",
cell: "html",
editable: false,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
return model.get('typeName');
}
})
},
options: {
label: "Entity Type(s)",
cell: "html",
editable: false,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
var applicableEntityTypes = '',
attrEntityTypes = JSON.parse(model.get('options').applicableEntityTypes);
_.each(attrEntityTypes, function(values) {
applicableEntityTypes += '<label class="btn btn-action btn-xs btn-blue no-pointer">' + values + '</label>';
});
return applicableEntityTypes;
}
})
},
tool: {
label: "Action",
cell: "html",
editable: false,
sortable: false,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
return '<div class="btn btn-action btn-sm" data-id="attributeEdit" data-action="attributeEdit" data-name="' + model.get('name') + '">Edit</div>';
}
})
}
}, this.nameSpaceAttr);
}
});
return NameSpaceAttrTableLayoutView;
});
\ No newline at end of file
/*
* 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/name_space/NameSpaceAttributeItemView_tmpl',
'utils/Utils',
'utils/UrlLinks',
'utils/Messages'
], function(require, Backbone, NameSpaceAttributeItemViewTmpl, Utils, UrlLinks, Messages) {
'use strict';
return Backbone.Marionette.ItemView.extend(
/** @lends GlobalExclusionListView */
{
template: NameSpaceAttributeItemViewTmpl,
/** Layout sub regions */
regions: {},
/** ui selector cache */
ui: {
attributeInput: "[data-id='attributeInput']",
close: "[data-id='close']",
dataTypeSelector: "[data-id='dataTypeSelector']",
entityTypeSelector: "[data-id='entityTypeSelector']",
enumTypeSelectorContainer: "[data-id='enumTypeSelectorContainer']",
enumTypeSelector: "[data-id='enumTypeSelector']",
enumValueSelectorContainer: "[data-id='enumValueSelectorContainer']",
enumValueSelector: "[data-id='enumValueSelector']",
multiValueSelect: "[data-id='multiValueSelect']",
multiValueSelectStatus: "[data-id='multiValueSelectStatus']",
stringLengthContainer: "[data-id='stringLengthContainer']",
stringLengthValue: "[data-id='stringLength']",
createNewEnum: "[data-id='createNewEnum']"
},
/** ui events hash */
events: function() {
var events = {};
events["keyup " + this.ui.attributeInput] = function(e) {
this.model.set({ "name": e.target.value.trim() });
};
events["change " + this.ui.dataTypeSelector] = function(e) {
//this.ui.multiValueSelect.hide();
if (e.target.value.trim() === 'enumeration' || e.target.value.trim() === 'Enumeration') {
// this.model.set({ "typeName": "enum" });
this.ui.enumTypeSelectorContainer.show();
this.emumTypeSelectDisplay();
this.ui.stringLengthContainer.hide();
} else if (e.target.value.trim() === 'string' || e.target.value.trim() === 'String') {
this.model.set({ "typeName": e.target.value.trim() });
this.model.set({ "enumValues": null });
this.ui.stringLengthContainer.show();
//this.ui.multiValueSelect.show();
this.ui.enumTypeSelectorContainer.hide();
this.ui.enumValueSelectorContainer.hide();
} else {
// if (e.target.value.trim() === 'int' || e.target.value.trim() === 'float') {
// this.ui.multiValueSelect.show();
// }
this.model.set({ "typeName": e.target.value.trim() });
this.model.set({ "enumValues": null });
this.ui.enumTypeSelectorContainer.hide();
this.ui.enumValueSelectorContainer.hide();
this.ui.stringLengthContainer.hide();
}
};
events["change " + this.ui.enumTypeSelector] = function(e) {
this.model.set({ "enumValues": e.target.value.trim() });
};
events["change " + this.ui.stringLengthContainer] = function(e) {
this.model.set({ "maxStrLength": e.target.value.trim() });
};
events["change " + this.ui.enumTypeSelector] = function(e) {
var emumValue = this.ui.enumTypeSelector.select2('data')[0] ? this.ui.enumTypeSelector.select2('data')[0].text : this.ui.enumTypeSelector.val();
this.model.set({ "typeName": emumValue });
if (emumValue == '' || emumValue == null) {
this.ui.enumValueSelectorContainer.hide();
} else {
this.ui.enumValueSelectorContainer.show();
this.showEnumValues(_.escape(emumValue));
}
};
events["change " + this.ui.enumValueSelector] = function(e) {
this.model.set({ "enumValues": this.ui.enumValueSelector.val() });
};
// events["change " + this.ui.multiValueSelectStatus] = function(e) {
// this.model.set({ "multiValueSelect": e.target.checked });
// };
events["click " + this.ui.close] = 'onCloseButton';
events["click " + this.ui.createNewEnum] = 'onCreateUpdateEnum';
return events;
},
/**
* intialize a new GlobalExclusionComponentView Layout
* @constructs
*/
initialize: function(options) {
this.parentView = options.parentView;
},
onRender: function() {
var that = this,
entitytypes = '',
enumTypes = [];
this.parentView.typeHeaders.fullCollection.each(function(model) {
if (model.toJSON().category == "ENTITY") {
that.ui.entityTypeSelector.append("<option>" + model.get('name') + "</option>");
entitytypes += '<option value="' + (model.get('name')) + '" data-name="' + (model.get('name')) + '">' + model.get('name') + '</option>';
}
});
this.ui.entityTypeSelector.select2({
placeholder: "Select Entity type",
allowClear: true,
multiple: true,
selectionAdapter: $.fn.select2.amd.require("TagHideDeleteButtonAdapter")
});
this.ui.entityTypeSelector.html(entitytypes);
this.ui.entityTypeSelector.on('select2:open', function(e) { // to make selected option disable in dropdown added remove-from-list class
$('.select2-dropdown--below').addClass('remove-from-list');
});
this.ui.stringLengthValue.val('50'); //default length for string is 50
this.ui.enumValueSelector.attr("disabled", "false"); // cannot edit the values
this.emumTypeSelectDisplay();
this.ui.enumTypeSelectorContainer.hide();
this.ui.enumValueSelectorContainer.hide();
if (this.parentView.isAttrEdit) {
this.ui.close.hide();
this.ui.createNewEnum.hide(); // cannot add new namespace on edit view
this.ui.attributeInput.val(this.parentView.attrDetails.name);
this.ui.attributeInput.attr("disabled", "false");
this.ui.dataTypeSelector.attr("disabled", "false");
this.ui.dataTypeSelector.attr("disabled", "false");
//this.ui.multiValueSelect.hide();
this.ui.dataTypeSelector.val(this.parentView.attrDetails.attrTypeName);
if (this.parentView.attrDetails.attrTypeName == "string") {
this.ui.stringLengthContainer.show();
this.ui.stringLengthValue.val(this.parentView.attrDetails.maxStrLength);
} else {
this.ui.stringLengthContainer.hide();
}
_.each(this.parentView.attrDetails.attrEntityType, function(valName) {
that.ui.entityTypeSelector.find('option').each(function(o) {
var $el = $(this)
if ($el.data("name") === valName) {
$el.attr("data-allowremove", "false");
}
})
});
this.ui.entityTypeSelector.val(this.parentView.attrDetails.attrEntityType).trigger('change');
if (this.parentView.attrDetails && this.parentView.attrDetails.attrTypeName) {
var typeName = this.parentView.attrDetails.attrTypeName;
if (typeName != "string" && typeName != "boolean" && typeName != "byte" && typeName != "short" && typeName != "int" && typeName != "float" && typeName != "double" && typeName != "long" && typeName != "date") {
this.ui.enumTypeSelector.attr("disabled", "false");
this.ui.dataTypeSelector.val("enumeration").trigger('change');
this.ui.enumTypeSelector.val(typeName).trigger('change');
}
}
// if (this.parentView.attrDetails.multiValued) {
// this.ui.multiValueSelect.show();
// $(this.ui.multiValueSelectStatus).prop('checked', true).trigger('change');
// this.ui.multiValueSelectStatus.attr("disabled", "false");
// }
}
},
showEnumValues: function(enumName) {
var enumValues = '',
selectedValues = [],
selectedEnum = this.parentView.enumDefCollection.fullCollection.findWhere({ name: enumName }),
selectedEnumValues = selectedEnum ? selectedEnum.get('elementDefs') : null,
savedValues = [];
_.each(selectedEnumValues, function(enumVal, index) {
selectedValues.push(_.unescape(enumVal.value));
enumValues += "<option>" + enumVal.value + "</option>";
});
this.ui.enumValueSelector.empty();
this.ui.enumValueSelector.append(enumValues);
this.ui.enumValueSelector.val(selectedValues);
this.ui.enumValueSelector.select2({
placeholder: "Select Enum value",
allowClear: false,
tags: false,
multiple: true
});
this.model.set({ "enumValues": this.ui.enumValueSelector.val() });
},
emumTypeSelectDisplay: function() {
var enumTypes = '';
this.parentView.enumDefCollection.fullCollection.each(function(model, index) {
enumTypes += "<option>" + _.escape(model.get('name')) + "</option>";
});
this.ui.enumTypeSelector.empty();
this.ui.enumTypeSelector.append(enumTypes);
this.ui.enumTypeSelector.val('');
this.ui.enumTypeSelector.select2({
placeholder: "Select Enum name",
tags: false,
allowClear: true,
multiple: false
});
},
onCreateUpdateEnum: function(e) {
var that = this;
require(["views/name_space/EnumCreateUpdateItemView", "modules/Modal"], function(EnumCreateUpdateItemView, Modal) {
var view = new EnumCreateUpdateItemView({
onUpdateEnum: function() {
that.ui.enumValueSelectorContainer.hide();
that.emumTypeSelectDisplay();
that.ui.enumValueSelector.empty();
},
closeModal: function() {
modal.trigger("cancel");
that.parentView.enumDefCollection.fetch({
success: function() {
that.ui.enumTypeSelector.val(that.model.get('typeName')).trigger('change');
}
});
},
enumDefCollection: that.parentView.enumDefCollection,
nameSpaceCollection: that.parentView.options.nameSpaceCollection
}),
modal = new Modal({
title: "Create/ Update Enum",
content: view,
cancelText: "Cancel",
okCloses: false,
okText: "Update",
allowCancel: true,
showFooter: false
}).open();
modal.on('closeModal', function() {
modal.trigger('cancel');
});
});
},
onCloseButton: function() {
var tagName = this.parentView.$el.find('[data-id="tagName"]').val();
if (this.parentView.collection.models.length > 0) {
this.model.destroy();
}
if (this.parentView.collection.models.length == 0 && tagName != "") {
this.parentView.$el.parent().next().find('button.ok').removeAttr("disabled");
}
}
});
});
\ No newline at end of file
/**
* 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/name_space/NameSpaceContainerLayoutView_tmpl",
'collection/VEntityList',
"utils/Utils",
"utils/Messages",
"utils/Globals",
"utils/UrlLinks",
"models/VTag"
], function(require, Backbone, NameSpaceContainerLayoutViewTmpl, VEntityList, Utils, Messages, Globals, UrlLinks, VTag) {
"use strict";
var NameSpaceContainerLayoutView = Backbone.Marionette.LayoutView.extend(
/** @lends NameSpaceContainerLayoutView */
{
_viewName: "NameSpaceContainerLayoutView",
template: NameSpaceContainerLayoutViewTmpl,
/** Layout sub regions */
regions: {
RNameSpaceDetailContainer: "#r_nameSpaceDetailContainer",
RNameSpaceAttrContainer: "#r_nameSpaceAttrContainer"
},
/** ui selector cache */
ui: {},
/** ui events hash */
events: function() {},
/**
* intialize a new TagLayoutView Layout
* @constructs
*/
initialize: function(options) {
_.extend(this.options, options);
this.selectedNameSpace = new VEntityList();
this.selectedNameSpace.url = UrlLinks.nameSpaceGuidApiUrl(this.options.namespaceID);
this.nameSpaceAttr = new VEntityList();
},
bindEvents: function() {},
onRender: function() {
this.fetchNameSpaceGuid();
this.options.nameSpaceCollection.fullCollection.sort({ silent: true });
this.options.nameSpaceCollection.comparator = function(model) {
return -model.get('timestamp');
}
this.renderNameSpaceDetailLayoutView(this.options);
this.renderNameSpaceAttrLayoutView(this.options);
},
fetchNameSpaceGuid: function() {
var that = this;
this.selectedNameSpace.fetch({
skipDefaultError: true,
complete: function(model, status) {
that.nameSpaceAttr.fullCollection.add(model.responseJSON.attributeDefs);
}
});
},
renderNameSpaceDetailLayoutView: function(options) {
var that = this;
require(["views/name_space/NameSpaceDetailLayoutView"], function(NameSpaceDetailLayoutView) {
if (that.isDestroyed) {
return;
}
that.RNameSpaceDetailContainer.show(
new NameSpaceDetailLayoutView({
nameSpaceVent: that.options.nameSpaceVent,
nameSpaceCollection: that.options.nameSpaceCollection,
nameSpaceAttr: that.nameSpaceAttr,
guid: that.options.namespaceID,
enumDefCollection: that.enumDefCollection,
typeHeaders: that.typeHeaders
})
);
});
},
renderNameSpaceAttrLayoutView: function(options) {
var that = this;
require(['views/name_space/NameSpaceAttrTableLayoutView'], function(NameSpaceAttrTableLayoutView) {
if (that.isDestroyed) {
return;
}
that.RNameSpaceAttrContainer.show(
new NameSpaceAttrTableLayoutView({
nameSpaceVent: that.options.nameSpaceVent,
nameSpaceCollection: that.options.nameSpaceCollection,
nameSpaceAttr: that.nameSpaceAttr,
guid: that.options.namespaceID,
typeHeaders: that.typeHeaders,
enumDefCollection: that.enumDefCollection,
selectedNameSpace:that.selectedNameSpace
}));
});
}
}
);
return NameSpaceContainerLayoutView;
});
\ No newline at end of file
/**
* 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/name_space/NameSpaceDetailLayoutView_tmpl',
'utils/Utils',
'views/tag/AddTagAttributeView',
'collection/VTagList',
'models/VTag',
'utils/Messages',
'utils/UrlLinks',
"utils/Globals",
], function(require, Backbone, NameSpaceDetailLayoutViewTmpl, Utils, AddTagAttributeView, VTagList, VTag, Messages, UrlLinks, Globals) {
'use strict';
var NameSpaceDetailLayoutView = Backbone.Marionette.LayoutView.extend(
/** @lends NameSpaceDetailLayoutView */
{
template: NameSpaceDetailLayoutViewTmpl,
/** Layout sub regions */
regions: {},
/** ui selector cache */
ui: {
title: '[data-id="title"]',
editBox: '[data-id="editBox"]',
saveButton: "[data-id='saveButton']",
description: '[data-id="description"]',
publishButton: '[data-id="publishButton"]',
backButton: '[data-id="backButton"]'
},
/** ui events hash */
events: function() {
var events = {};
events["click " + this.ui.backButton] = function() {
Utils.backButtonClick();
};
return events;
},
/**
* intialize a new NameSpaceDetailLayoutView Layout
* @constructs
*/
initialize: function(options) {
_.extend(this, _.pick(options, 'guid', 'entity', 'entityName', 'attributeDefs', 'enumDefCollection', 'typeHeaders', 'nameSpaceCollection', 'selectedNameSpace', 'nameSpaceAttr'));
},
bindEvents: function() {
this.listenTo(this.nameSpaceCollection, 'reset', function() {
if (!this.model) {
this.model = this.nameSpaceCollection.fullCollection.findWhere({ guid: this.guid });
if (this.model) {
this.renderTagDetail();
} else {
this.$('.fontLoader').hide();
Utils.notifyError({
content: 'Tag Not Found'
});
}
}
}, this);
this.listenTo(this.collection, 'error', function(error, response) {
if (response.responseJSON && response.responseJSON.error) {
Utils.notifyError({
content: response.responseJSON.error
});
} else {
Utils.notifyError({
content: 'Something went wrong'
});
}
this.$('.fontLoader').hide();
}, this);
},
onRender: function() {
if (this.nameSpaceCollection.models.length && !this.model) {
this.model = this.nameSpaceCollection.fullCollection.findWhere({ guid: this.guid });
Utils.showTitleLoader(this.$('.page-title .fontLoader'), this.$('.tagDetail'));
this.renderTagDetail();
}
this.bindEvents();
},
renderTagDetail: function() {
var that = this,
attributeData = "";
this.attributeDefs = this.model.get('attributeDefs');
this.ui.title.html('<span>' + that.model.get('name') + '</span>');
if (that.model.get('description')) {
this.ui.description.text((that.model.get('description')));
}
Utils.hideTitleLoader(this.$('.fontLoader'), this.$('.tagDetail'));
}
});
return NameSpaceDetailLayoutView;
});
\ No newline at end of file
/**
* 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/name_space/NameSpaceTableLayoutView_tmpl',
'collection/VEntityList',
'collection/VTagList',
'models/VSearch',
'utils/Utils',
'utils/Messages',
'utils/Enums',
'utils/UrlLinks',
'utils/CommonViewFunction'
], function(require, Backbone, NameSpaceTableLayoutView_tmpl, VEntityList, VTagList, VSearch, Utils, Messages, Enums, UrlLinks, CommonViewFunction) {
'use strict';
var NameSpaceTableLayoutView = Backbone.Marionette.LayoutView.extend(
/** @lends NameSpaceTableLayoutView */
{
_viewName: 'NameSpaceTableLayoutView',
template: NameSpaceTableLayoutView_tmpl,
/** Layout sub regions */
regions: {
RNameSpaceTableLayoutView: "#r_nameSpaceTableLayoutView",
RModal: "#r_modal"
},
/** ui selector cache */
ui: {
namespaceAttrPage: "[data-id='namespaceAttrPage']",
namespaceAttrPageTitle: "[data-id='namespaceAttrPageTitle']",
namespaceDetailPage: "[data-id='namespaceDetailPage']",
auditCreate: "[data-id='auditCreate']",
pageRecordText: "[data-id='pageRecordText']",
activePage: "[data-id='activePage']",
createNameSpace: "[data-id='createNameSpace']",
attributeEdit: "[data-id='attributeEdit']",
addAttribute: '[data-id="addAttribute"]',
namespaceAttrPageOk: '[data-id="namespaceAttrPageOk"]',
colManager: "[data-id='colManager']",
deleteNamespace: '[data-id="deleteNamespace"]',
namespaceAttrFontLoader: '.namespace-attr-fontLoader',
namespaceAttrTableOverlay: '.namespace-attr-tableOverlay'
},
/** ui events hash */
events: function() {
var events = {},
that = this;
events["click " + this.ui.createNameSpace] = "onClickCreateNamespace";
events["click " + this.ui.addAttribute] = "onEditAttr";
events["click " + this.ui.attributeEdit] = "onEditAttr";
events["click " + this.ui.deleteNamespace] = function(e) {
that.guid = e.target.dataset.guid;
that.deleteNamespaceElement();
};
return events;
},
/**
* intialize a new NameSpaceTableLayoutView Layout
* @constructs
*/
initialize: function(options) {
_.extend(this, _.pick(options, 'guid', 'entity', 'entityName', 'attributeDefs', 'typeHeaders', 'nameSpaceCollection', 'nameSpaceAttr', 'selectedNameSpace'));
this.limit = 10;
this.offset = 0;
this.pervOld = [];
this.onlyPurge = true;
this.newAttr = false;
this.commonTableOptions = {
collection: this.nameSpaceCollection,
includeFilter: false,
includePagination: true,
includeFooterRecords: true,
includePageSize: true,
includeGotoPage: true,
includeAtlasTableSorting: true,
includeTableLoader: true,
includeColumnManager: true,
gridOpts: {
className: "table table-hover backgrid table-quickMenu",
emptyText: 'No records found!'
},
columnOpts: {
opts: {
initialColumnsVisible: null,
saveState: false
},
visibilityControlOpts: {
buttonTemplate: _.template("<button class='btn btn-action btn-sm pull-right'>Columns&nbsp<i class='fa fa-caret-down'></i></button>")
},
el: this.ui.colManager
},
filterOpts: {},
paginatorOpts: {}
};
this.currPage = 1;
this.isFilters = null;
this.guid = null;
this.showDetails = true; // toggle between sttribute page and detail page
},
onRender: function() {
this.toggleNamespaceDetailsAttrView();
$.extend(this.nameSpaceCollection.queryParams, { count: this.limit });
this.nameSpaceCollection.fullCollection.sort({ silent: true });
this.renderTableLayoutView();
this.$('.tableOverlay').hide();
this.$('.auditTable').show(); // Only for first time table show because we never hide after first render.
this.nameSpaceCollection.comparator = function(model) {
return -model.get('timestamp');
}
},
toggleNamespaceDetailsAttrView: function() {
var that = this;
if (that.showDetails) {
that.ui.namespaceAttrPage.hide();
that.ui.namespaceDetailPage.show();
} else {
that.ui.namespaceAttrPage.show();
that.ui.namespaceDetailPage.hide();
}
},
bindEvents: function() {},
loaderStatus: function(isActive) {
var that = this;
if (isActive) {
that.$('.namespace-attr-tableOverlay').show();
that.$('.namespace-attr-fontLoader').show();
} else {
that.$('.namespace-attr-tableOverlay').hide();
that.$('.namespace-attr-fontLoader').hide();
}
},
onEditAttr: function(e) {
var that = this,
isAttrEdit = e.target.dataset && e.target.dataset.id === 'attributeEdit' ? true : false,
guid = e.target.dataset && e.target.dataset.guid ? e.target.dataset.guid : null,
selectedNamespace = that.nameSpaceCollection.fullCollection.findWhere({ guid: guid }),
attrributes = selectedNamespace ? selectedNamespace.get('attributeDefs') : null,
attrName = e.target.dataset.name ? e.target.dataset.name : null,
attrDetails = { name: attrName };
if (selectedNamespace) {
that.ui.namespaceAttrPageOk.text("Save");
that.newAttr = e.target && e.target.dataset.action === "createAttr" ? true : false;
that.guid = guid;
_.each(attrributes, function(attrObj) {
if (attrObj.name === attrName) {
attrDetails.attrTypeName = attrObj.typeName;
if (attrObj.typeName.includes('array')) {
attrDetails.attrTypeName = attrObj.typeName.replace("array<", "").replace(">", "");
attrDetails.multiValued = true;
}
attrDetails.attrEntityType = attrObj.options && attrObj.options.applicableEntityTypes ? JSON.parse(attrObj.options.applicableEntityTypes) : null;
attrDetails.maxStrLength = attrObj.options && attrObj.options.maxStrLength ? attrObj.options.maxStrLength : null;
attrDetails.enumValues = attrObj.enumValues ? attrObj.enumValues : null;
}
});
that.showDetails = false;
that.toggleNamespaceDetailsAttrView();
that.ui.namespaceAttrPageOk.attr('data-action', e.target.dataset.id);
require(["views/name_space/CreateNameSpaceLayoutView"], function(CreateNameSpaceLayoutView) {
that.view = new CreateNameSpaceLayoutView({
onEditCallback: function() {
that.nameSpaceCollection.fullCollection.sort({ silent: true });
that.renderTableLayoutView();
},
onUpdateNamespace: function() {
enumDefCollection.fetch({ reset: true });
that.showDetails = true;
that.toggleNamespaceDetailsAttrView();
},
parent: that.$el,
tagCollection: that.nameSpaceCollection,
enumDefCollection: enumDefCollection,
isAttrEdit: isAttrEdit,
typeHeaders: typeHeaders,
attrDetails: attrDetails,
selectedNamespace: selectedNamespace,
nameSpaceCollection: nameSpaceCollection,
guid: that.guid,
isNewAttr: that.newAttr
});
if (isAttrEdit) {
that.ui.namespaceAttrPageTitle.text("Update Attribute of: " + selectedNamespace.get('name'));
} else {
that.ui.namespaceAttrPageTitle.text("Add Namespace Attribute for: " + selectedNamespace.get('name'));
}
that.RModal.show(that.view);
});
}
},
onClickCreateNamespace: function(e) {
var that = this,
isNewNameSpace = true;
that.showDetails = false;
that.ui.namespaceAttrPageOk.text("Create");
that.ui.namespaceAttrPageOk.attr('data-action', 'createNamespace');
that.ui.namespaceAttrPageTitle.text("Create Namespace");
that.toggleNamespaceDetailsAttrView();
require(["views/name_space/CreateNameSpaceLayoutView"], function(CreateNameSpaceLayoutView) {
that.view = new CreateNameSpaceLayoutView({
onUpdateNamespace: function() {
enumDefCollection.fetch({ reset: true });
that.showDetails = true;
that.toggleNamespaceDetailsAttrView();
},
tagCollection: that.nameSpaceCollection,
enumDefCollection: enumDefCollection,
typeHeaders: typeHeaders,
isNewNameSpace: isNewNameSpace,
nameSpaceCollection: nameSpaceCollection
});
that.RModal.show(that.view);
});
},
renderTableLayoutView: function() {
var that = this;
require(['utils/TableLayout'], function(TableLayout) {
var cols = new Backgrid.Columns(that.getNamespaceTableColumns());
that.RNameSpaceTableLayoutView.show(new TableLayout(_.extend({}, that.commonTableOptions, {
columns: cols
})));
if (!(that.nameSpaceCollection.models.length < that.limit)) {
that.RNameSpaceTableLayoutView.$el.find('table tr').last().hide();
}
});
},
getNamespaceTableColumns: function() {
var that = this;
return this.nameSpaceCollection.constructor.getTableCols({
attributeDefs: {
label: "",
cell: "html",
editable: false,
sortable: false,
cell: Backgrid.ExpandableCell,
fixWidth: "50",
accordion: false,
alwaysVisible: true,
expand: function(el, model) {
el.attr('colspan', '8');
var attrValues = '',
attrTable = $('table'),
attrTableBody = $('tbody'),
attrTableHeading = "<thead><td style='display:table-cell'><b>Attribute</b></td><td style='display:table-cell'><b>Type</b></td><td style='display:table-cell'><b>Applicable Type(s)</b></td><td style='display:table-cell'><b>Action</b></td></thead>",
attrRow = '',
attrTableDetails = '';
if (model.attributes && model.attributes.attributeDefs.length) {
_.each(model.attributes.attributeDefs, function(attrObj) {
var applicableEntityTypes = '',
typeName = attrObj.typeName;
if (attrObj.options) {
// attrEntityTypes = JSON.parse(attrObj.options.applicableEntityTypes).join(', ');
var entityTypes = JSON.parse(attrObj.options.applicableEntityTypes);
_.each(entityTypes, function(values) {
applicableEntityTypes += '<label class="btn btn-action btn-xs btn-blue no-pointer">' + values + '</label>';
})
}
if (typeName.includes('array')) {
typeName = _.escape(typeName);
}
attrRow += "<tr> <td style='display:table-cell'>" + _.escape(attrObj.name) + "</td><td style='display:table-cell'>" + typeName + "</td><td style='display:table-cell'>" + applicableEntityTypes + "</td><td style='display:table-cell'> <div class='btn btn-action btn-sm' style='margin-left:0px;' data-id='attributeEdit' data-guid='" + model.get('guid') + "' data-name ='" + _.escape(attrObj.name) + "' data-action='attributeEdit' >Edit</div> </td></tr> ";
});
var purgeText = '<div class="row"><div class="col-sm-12 attr-details"><table style="padding: 50px;">' + attrTableHeading + attrRow + '</table></div></div>';
$(el).append($('<div>').html(purgeText));
} else {
var purgeText = '<div class="row"><div class="col-sm-12 attr-details"><h5 class="text-center"> No attributes to show.</h5></div></div>';
$(el).append($('<div>').html(purgeText));
}
}
},
name: {
label: "Name",
cell: "html",
editable: false,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
return '<a title= "' + model.get('name') + '" href ="#!/administrator/namespace/' + model.get('guid') + '">' + model.get('name') + '</a>';
}
})
},
description: {
label: "Description",
cell: "html",
editable: false,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
return model.get('description');
}
})
},
createdBy: {
label: "Created by",
cell: "html",
renderable: false,
editable: false,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
return model.get('updatedBy');
}
})
},
createTime: {
label: "Created on",
cell: "html",
renderable: false,
editable: false,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
return new Date(model.get('createTime'));
}
})
},
updatedBy: {
label: "Updated by",
cell: "html",
renderable: false,
editable: false,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
return model.get('updatedBy');
}
})
},
updateTime: {
label: "Updated on",
cell: "html",
renderable: false,
editable: false,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
return new Date(model.get('updateTime'));
}
})
},
tools: {
label: "Action",
cell: "html",
sortable: false,
editable: false,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
return "<button type='button' data-id='addAttribute' data-guid='" + model.get('guid') + "'' title='' class='btn btn-action btn-xs ' style='margin-bottom: 10px;' data-action='createAttr' data-original-title='Add Namespace attribute'><i class='fa fa-plus'></i> Attributes</button>";
// "<button type='button' data-id='deleteNamespace' data-guid='" + model.get('guid') + "'' title='' class='btn btn-action btn-xs ' style='margin-bottom: 10px;' data-action='createAttr' data-original-title='Delete Namespace'><i class='fa fa-trash-o'></i> Delete</button>";
}
})
}
}, this.nameSpaceCollection);
},
deleteNamespaceElement: function(nameSpaceName) {
var that = this,
notifyObj = {
modal: true,
ok: function(argument) {
that.onNotifyDeleteOk();
},
cancel: function(argument) {}
};
var text = "Are you sure you want to delete the namespace";
notifyObj["text"] = text;
Utils.notifyConfirm(notifyObj);
},
onNotifyDeleteOk: function(data) {
var that = this,
deleteNamespaceData = that.nameSpaceCollection.fullCollection.findWhere({ guid: that.guid });
// that.$('.position-relative .fontLoader').addClass('show');
that.$('.tableOverlay').show();
if (deleteNamespaceData) {
var nameSpaceName = deleteNamespaceData.get("name");
deleteNamespaceData.deleteNameSpace({
typeName: nameSpaceName,
success: function() {
Utils.notifySuccess({
content: "Namespace " + nameSpaceName + Messages.getAbbreviationMsg(false, 'deleteSuccessMessage')
});
that.nameSpaceCollection.fullCollection.remove(deleteNamespaceData);
that.nameSpaceCollection.fullCollection.sort({ silent: true });
that.renderTableLayoutView();
that.showDetails = true;
that.toggleNamespaceDetailsAttrView();
that.loaderStatus(false);
},
complete: function() {
that.$('.tableOverlay').hide();
that.$('.position-relative .fontLoader').removeClass('show');
}
});
} else {
Utils.notifyError({
content: Messages.defaultErrorMessage
});
}
}
});
return NameSpaceTableLayoutView;
});
\ No newline at end of file
......@@ -36,7 +36,8 @@ define([
RGlossaryTreeRender: '[data-id="r_glossaryTreeRender"]',
RClassificationTreeRender: '[data-id="r_classificationTreeRender"]',
REntityTreeRender: '[data-id="r_entityTreeRender"]',
RCustomFilterTreeRender: '[data-id="r_customFilterTreeRender"]'
RCustomFilterTreeRender: '[data-id="r_customFilterTreeRender"]',
RNameSpaceTreeRender: '[data-id="r_nameSpaceTreeRender"]'
},
ui: {
//search
......@@ -81,6 +82,7 @@ define([
this.classificationSearchTree = this.$('[data-id="classificationSearchTree"]');
this.termSearchTree = this.$('[data-id="termSearchTree"]');
this.customFilterSearchTree = this.$('[data-id="customFilterSearchTree"]');
this.nameSpaceSearchTree = this.$('[data-id="nameSpaceSearchTree"]');
this.entitySearchTree.jstree(true).show_all();
this.entitySearchTree.jstree("search", searchString);
this.classificationSearchTree.jstree(true).show_all();
......@@ -89,6 +91,9 @@ define([
this.termSearchTree.jstree("search", searchString);
this.customFilterSearchTree.jstree(true).show_all();
this.customFilterSearchTree.jstree("search", searchString);
this.nameSpaceSearchTree.jstree(true).show_all();
this.nameSpaceSearchTree.jstree("search", searchString);
};
events["click " + this.ui.menuItems] = function(e) {
......@@ -118,11 +123,12 @@ define([
this.bindEvents();
},
onRender: function() {
var opt = opt = Utils.getUrlState.getQueryParams();
var opt = Utils.getUrlState.getQueryParams();
this.renderEntityTree(opt);
this.renderClassificationTree(opt);
this.renderGlossaryTree(opt);
this.renderCustomFilterTree();
this.renderNameSpaceTree();
this.showHideGlobalFilter();
this.showDefaultPage();
},
......@@ -195,6 +201,9 @@ define([
if (options) {
_.extend(this.options, options);
this.showHideGlobalFilter();
if (this.RNameSpaceTreeRender.currentView) {
this.RNameSpaceTreeRender.currentView.manualRender(this.options);
}
if (this.RCustomFilterTreeRender.currentView) {
this.RCustomFilterTreeRender.currentView.manualRender(this.options);
}
......@@ -232,6 +241,12 @@ define([
require(["views/search/tree/CustomFilterTreeLayoutView"], function(CustomFilterTreeLayoutView) {
that.RCustomFilterTreeRender.show(new CustomFilterTreeLayoutView(_.extend({ query: that.query }, that.options)));
});
},
renderNameSpaceTree: function() {
var that = this;
require(["views/search/tree/NameSpaceTreeLayoutView"], function(NameSpaceTreeLayoutView) {
that.RNameSpaceTreeRender.show(new NameSpaceTreeLayoutView(_.extend({ query: that.query }, that.options)));
});
}
});
return SearchFilterBrowseLayoutViewNew;
......
......@@ -245,12 +245,14 @@ define([
var aFilter = that.$("#" + str.node.a_attr.id),
filterOffset = aFilter.find(">.jstree-icon").offset();
that.$(".tree-tooltip").removeClass("show");
if (filterOffset.top && filterOffset.left) {
aFilter.find(">span.tree-tooltip").css({
top: "calc(" + filterOffset.top + "px - 45px)",
left: "24px"
}).addClass("show");
}
setTimeout(function() {
if (aFilter.hasClass("jstree-hovered") && filterOffset.top && filterOffset.left) {
aFilter.find(">span.tree-tooltip").css({
top: "calc(" + filterOffset.top + "px - 45px)",
left: "24px"
}).addClass("show");
}
}, 1200);
}).on("dehover_node.jstree", function(nodes, str, res) {
that.$(".tree-tooltip").removeClass("show");
});
......
......@@ -309,7 +309,7 @@ define([
parent: "#",
icon: "fa fa-file-o",
state: {
disabled: entityCount == 0 ? true : false,
disabled: false,
selected: isSelected
},
};
......@@ -489,12 +489,14 @@ define([
var aType = that.$("#" + str.node.a_attr.id),
typeOffset = aType.find(">.jstree-icon").offset();
that.$(".tree-tooltip").removeClass("show");
if (typeOffset.top && typeOffset.left) {
aType.find(">span.tree-tooltip").css({
top: "calc(" + typeOffset.top + "px - 45px)",
left: "24px"
}).addClass("show");
}
setTimeout(function() {
if (aType.hasClass("jstree-hovered") && typeOffset.top && typeOffset.left) {
aType.find(">span.tree-tooltip").css({
top: "calc(" + typeOffset.top + "px - 45px)",
left: "24px"
}).addClass("show");
}
}, 1200);
}).on("dehover_node.jstree", function(nodes, str, res) {
that.$(".tree-tooltip").removeClass("show");
});
......
......@@ -56,6 +56,7 @@ define([
events["click " + this.ui.createGlossary] = function(e) {
var that = this;
e.stopPropagation();
CommonViewFunction.createEditGlossaryCategoryTerm({
isGlossaryView: true,
collection: that.glossaryCollection,
......@@ -664,12 +665,14 @@ define([
var aTerm = that.$("#" + str.node.a_attr.id),
termOffset = aTerm.find(">.jstree-icon").offset();
that.$(".tree-tooltip").removeClass("show");
if (termOffset.top && termOffset.left) {
aTerm.find(">span.tree-tooltip").css({
top: "calc(" + termOffset.top + "px - 45px)",
left: "24px"
}).addClass("show");
}
setTimeout(function() {
if (aTerm.hasClass("jstree-hovered") && termOffset.top && termOffset.left) {
aTerm.find(">span.tree-tooltip").css({
top: "calc(" + termOffset.top + "px - 45px)",
left: "24px"
}).addClass("show");
}
}, 1200);
}).on("dehover_node.jstree", function(nodes, str, res) {
that.$(".tree-tooltip").removeClass("show");
});
......
/**
* 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",
"hbs!tmpl/search/tree/NameSpaceTreeLayoutView_tmpl",
"utils/Utils",
"utils/Messages",
"utils/Globals",
"utils/UrlLinks",
"utils/CommonViewFunction",
"collection/VSearchList",
"collection/VGlossaryList",
"utils/Enums",
"jstree"
], function(require, NameSpaceTreeLayoutViewTmpl, Utils, Messages, Globals, UrlLinks, CommonViewFunction, VSearchList, VGlossaryList, Enums) {
"use strict";
var NameSpaceTreeLayoutView = Marionette.LayoutView.extend({
template: NameSpaceTreeLayoutViewTmpl,
regions: {},
ui: {
//refresh
refreshTree: '[data-id="refreshTree"]',
// tree el
nameSpaceSearchTree: '[data-id="nameSpaceSearchTree"]',
// Create
createNameSpace: '[data-id="createNameSpace"]'
},
templateHelpers: function() {
return {
apiBaseUrl: UrlLinks.apiBaseUrl
};
},
events: function() {
var events = {},
that = this;
// refresh individual tree
events["click " + this.ui.refreshTree] = function(e) {
var type = $(e.currentTarget).data("type");
e.stopPropagation();
that.refresh({ type: type });
};
events["click " + this.ui.createNameSpace] = function(e) {
e.stopPropagation();
that.triggerUrl("#!/administrator?tabActive=namespace");
};
return events;
},
initialize: function(options) {
this.options = options;
_.extend(
this,
_.pick(
options,
"typeHeaders",
"namespaceID",
"searchVent",
"entityDefCollection",
"enumDefCollection",
"nameSpaceCollection",
"searchTableColumns",
"searchTableFilters",
"metricCollection",
"nameSpaceCollection"
)
);
this.bindEvents();
},
onRender: function() {
this.renderNameSpaceTree();
//this.createNameSpaceAction();
},
bindEvents: function() {
var that = this;
this.listenTo(
this.nameSpaceCollection.fullCollection,
"reset add remove",
function() {
if (this.ui.nameSpaceSearchTree.jstree(true)) {
that.ui.nameSpaceSearchTree.jstree(true).refresh();
} else {
this.renderNameSpaceTree();
}
},
this
);
// this.options.nameSpaceVent.on("Save:NamespaceAttribute", function(data) {
// that.ui.nameSpaceSearchTree.jstree(true).refresh();
// });
$("body").on("click", ".namespacePopoverOptions li", function(e) {
that.$(".nameSpacePopover").popover("hide");
that[$(this).find("a").data("fn") + "NameSpace"](e);
});
},
createNameSpaceAction: function() {
var that = this;
Utils.generatePopover({
el: this.$el,
contentClass: "namespacePopoverOptions",
popoverOptions: {
selector: ".nameSpacePopover",
content: function() {
var type = $(this).data("detail"),
liString =
"<li><i class='fa fa-list-alt'></i><a href='javascript:void(0)' data-fn='onViewEdit'>View/Edit</a></li><li><i class='fa fa-search'></i><a href='javascript:void(0)' data-fn='onSelectedSearch'>Search</a></li>";
return "<ul>" + liString + "</ul>";
}
}
});
},
renderNameSpaceTree: function() {
this.generateSearchTree({
$el: this.ui.nameSpaceSearchTree
});
},
manualRender: function(options) {
var that = this;
_.extend(this, options);
if (Utils.getUrlState.isAdministratorTab() && this.namespaceID) {
this.ui.nameSpaceSearchTree.jstree(true).select_node(this.namespaceID);
} else {
this.ui.nameSpaceSearchTree.jstree(true).deselect_all();
this.namespaceID = null;
}
// if (this.options.value === undefined) {
// this.options.value = {};
// }
// if (!this.options.value.tag) {
// this.ui.nameSpaceSearchTree.jstree(true).deselect_all();
// this.nameSpaceId = null;
// } else {
// if (that.options.value.tag.indexOf("*") != -1) {
// that.ui.nameSpaceSearchTree.jstree(true).deselect_all();
// }
// var dataFound = this.nameSpaceCollection.fullCollection.find(function(obj) {
// return obj.get("name") === that.options.value.tag;
// });
// if (dataFound) {
// if ((this.nameSpaceId && this.nameSpaceId !== dataFound.get("guid")) || this.nameSpaceId === null) {
// if (this.nameSpaceId) {
// this.ui.nameSpaceSearchTree.jstree(true).deselect_node(this.nameSpaceId);
// }
// this.fromManualRender = true;
// this.nameSpaceId = dataFound.get("guid");
// this.ui.nameSpaceSearchTree.jstree(true).select_node(dataFound.get("guid"));
// }
// }
// if (!dataFound && Globals[that.options.value.tag]) {
// this.fromManualRender = true;
// this.typeId = Globals[that.options.value.tag].guid;
// this.ui.nameSpaceSearchTree.jstree(true).select_node(this.typeId);
// }
// }
},
onNodeSelect: function(nodeData) {
var that = this,
options = nodeData.node.original,
url = "#!/administrator/namespace";
if (options.parent === undefined) {
url += "/" + options.id;
this.triggerUrl(url);
} else {
//this.triggerSearch();
}
},
onViewEditNameSpace: function() {
var selectedNode = this.ui.nameSpaceSearchTree.jstree("get_selected", true);
if (selectedNode && selectedNode[0]) {
selectedNode = selectedNode[0];
var url = "#!/administrator?tabActive=namespace";
if (selectedNode.parent && selectedNode.original && selectedNode.original.name) {
url += "&ns=" + selectedNode.parent + "&nsa=" + selectedNode.original.name;
this.triggerUrl(url);
}
}
},
// triggerSearch: function(params, url) {
// var serachUrl = url ? url : "#!/search/searchResult";
// Utils.setUrl({
// url: serachUrl,
// urlParams: params,
// mergeBrowserUrl: false,
// trigger: true,
// updateTabState: true
// });
// },
triggerUrl: function(url) {
Utils.setUrl({
url: url,
mergeBrowserUrl: false,
trigger: true,
updateTabState: true
});
},
refresh: function(options) {
var that = this;
this.nameSpaceCollection.fetch({
skipDefaultError: true,
silent: true,
complete: function() {
that.nameSpaceCollection.fullCollection.comparator = function(model) {
return model.get("name").toLowerCase();
};
that.nameSpaceCollection.fullCollection.sort({ silent: true });
that.ui.nameSpaceSearchTree.jstree(true).refresh();
}
});
},
getNameSpaceTree: function(options) {
var that = this,
nameSpaceList = [],
allCustomFilter = [],
namsSpaceTreeData = that.nameSpaceCollection.fullCollection.models,
openClassificationNodesState = function(treeDate) {
if (treeDate.length == 1) {
_.each(treeDate, function(model) {
model.state["opeaned"] = true;
});
}
},
generateNode = function(nodeOptions, attrNode) {
var attributesNode = attrNode ? null : nodeOptions.get("attributeDefs"),
nodeStructure = {
text: attrNode ? _.escape(nodeOptions.name) : _.escape(nodeOptions.get("name")),
name: attrNode ? _.escape(nodeOptions.name) : _.escape(nodeOptions.get("name")),
type: "nameSpace",
id: attrNode ? _.escape(nodeOptions.name) : nodeOptions.get("guid"),
icon: attrNode ? "fa fa-file-o" : "fa fa-folder-o",
children: [],
state: { selected: nodeOptions.get("guid") === that.namespaceID },
gType: "NameSpace",
model: nodeOptions
};
return nodeStructure;
};
// getChildren = function(options) {
// var children = options.children,
// data = [],
// dataWithoutEmptyTag = [],
// isAttrNode = true;
// if (children && children.length) {
// _.each(children, function(attrDetail) {
// var nodeDetails = {
// name: _.escape(attrDetail.name),
// model: attrDetail
// },
// nodeProperties = {
// parent: options.parent,
// text: _.escape(attrDetail.name),
// model: attrDetail,
// id: options.parent + "_" + _.escape(attrDetail.name)
// },
// getNodeDetails = generateNode(nodeDetails, isAttrNode),
// classificationNode = _.extend(getNodeDetails, nodeProperties);
// data.push(classificationNode);
// });
// } else {
// return null;
// }
// return data;
// };
_.each(namsSpaceTreeData, function(filterNode) {
nameSpaceList.push(generateNode(filterNode));
});
var treeView = [{
icon: "fa fa-folder-o",
gType: "nameSpace",
type: "nameSpaceFolder",
children: nameSpaceList,
text: "Namespace",
name: "Namespace",
state: { opened: true }
}];
var customFilterList = treeView;
return nameSpaceList;
},
generateSearchTree: function(options) {
var $el = options && options.$el,
type = options && options.type,
that = this,
getEntityTreeConfig = function(opt) {
return {
plugins: ["search", "core", "sort", "conditionalselect", "changed", "wholerow", "node_customize"],
conditionalselect: function(node) {
var type = node.original.type;
if (type == "nameSpaceFolder") {
if (node.children.length) {
return false;
} else {
return true;
}
} else {
return true;
}
},
state: { opened: true },
search: {
show_only_matches: true,
case_sensitive: false
},
node_customize: {
default: function(el, node) {
var aTag = $(el).find(">a.jstree-anchor");
aTag.append("<span class='tree-tooltip'>" + aTag.text() + "</span>");
if (node.parent === "#") {
$(el).append('<div class="tools"><i class="fa"></i></div>');
} else {
$(el).append('<div class="tools"><i class="fa fa-ellipsis-h nameSpacePopover" rel="popover"></i></div>');
}
}
},
core: {
multiple: false,
data: function(node, cb) {
if (node.id === "#") {
cb(that.getNameSpaceTree());
}
}
}
};
};
$el.jstree(
getEntityTreeConfig({
type: ""
})
)
.on("open_node.jstree", function(e, data) {
that.isTreeOpen = true;
})
.on("select_node.jstree", function(e, data) {
that.onNodeSelect(data);
})
.on("search.jstree", function(nodes, str, res) {
if (str.nodes.length === 0) {
$el.jstree(true).hide_all();
$el.parents(".panel").addClass("hide");
} else {
$el.parents(".panel").removeClass("hide");
}
})
.on("hover_node.jstree", function(nodes, str, res) {
var aFilter = that.$("#" + str.node.a_attr.id),
filterOffset = aFilter.find(">.jstree-icon").offset();
that.$(".tree-tooltip").removeClass("show");
setTimeout(function() {
if (aFilter.hasClass("jstree-hovered") && ($(":hover").last().hasClass("jstree-hovered") || $(":hover").last().parent().hasClass("jstree-hovered")) && filterOffset.top && filterOffset.left) {
aFilter
.find(">span.tree-tooltip")
.css({
top: "calc(" + filterOffset.top + "px - 45px)",
left: "24px"
})
.addClass("show");
}
}, 1200);
})
.on("dehover_node.jstree", function(nodes, str, res) {
that.$(".tree-tooltip").removeClass("show");
});
}
});
return NameSpaceTreeLayoutView;
});
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment