You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by yh...@apache.org on 2016/05/19 17:45:59 UTC
[2/5] incubator-atlas git commit: ATLAS-802 New look UI to show
Business Catalog functionalities (kevalbhatt18 via yhemanth)
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/440bd2ae/dashboardv2/public/js/views/business_catalog/SideNavLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/business_catalog/SideNavLayoutView.js b/dashboardv2/public/js/views/business_catalog/SideNavLayoutView.js
new file mode 100644
index 0000000..5837006
--- /dev/null
+++ b/dashboardv2/public/js/views/business_catalog/SideNavLayoutView.js
@@ -0,0 +1,117 @@
+/**
+ * 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/business_catalog/SideNavLayoutView_tmpl',
+ 'utils/Utils',
+ 'utils/Globals',
+], function(require, tmpl, Utils, Globals) {
+ 'use strict';
+
+ var SideNavLayoutView = Marionette.LayoutView.extend({
+ template: tmpl,
+
+ regions: {
+ RBusinessCatalogLayoutView: "#r_businessCatalogLayoutView",
+ RTagLayoutView: "#r_tagLayoutView",
+ RSearchLayoutView: "#r_searchLayoutView",
+ },
+ ui: {
+ tabs: '.tabs li a',
+ },
+ events: function() {
+ var events = {},
+ that = this;
+ events["click " + this.ui.tabs] = function(e) {
+ var urlString = "",
+ elementName = $(e.currentTarget).data();
+ var tabStateUrls = Globals.saveApplicationState.tabState;
+ if (elementName.name == "tab-tag") {
+ urlString = tabStateUrls.tagUrl; //'#!/tag';
+ } else if (elementName.name == "tab-taxonomy") {
+ urlString = tabStateUrls.taxonomyUrl; // '#!/taxonomy';
+ } else if (elementName.name == "tab-search") {
+ urlString = tabStateUrls.searchUrl; // '#!/search';
+ }
+ Utils.setUrl({
+ url: urlString,
+ mergeBrowserUrl: false,
+ trigger: true,
+ updateTabState: function() {
+ return { stateChanged: true };
+ },
+ });
+ };
+ return events;
+ },
+ initialize: function(options) {
+ _.extend(this, _.pick(options, 'globalVent', 'url', 'value', 'tag', 'selectFirst'));
+ },
+ onRender: function() {
+ this.bindEvent();
+ this.renderTagLayoutView();
+ this.renderSearchLayoutView();
+ this.rendeBusinessCatalogLayoutView();
+ this.selectTab();
+
+ },
+ bindEvent: function() {},
+ rendeBusinessCatalogLayoutView: function() {
+ var that = this;
+ require(['views/business_catalog/BusinessCatalogLayoutView'], function(BusinessCatalogLayoutView) {
+ that.RBusinessCatalogLayoutView.show(new BusinessCatalogLayoutView({
+ globalVent: that.globalVent,
+ url: that.url
+ }));
+ });
+ },
+ renderTagLayoutView: function() {
+ var that = this;
+ require(['views/tag/TagLayoutView'], function(TagLayoutView) {
+ that.RTagLayoutView.show(new TagLayoutView({
+ globalVent: that.globalVent,
+ searchCollection: that.searchCollection,
+ tag: that.tag
+ }));
+ });
+ },
+ renderSearchLayoutView: function() {
+ var that = this;
+ require(['views/search/SearchLayoutView'], function(SearchLayoutView) {
+ that.RSearchLayoutView.show(new SearchLayoutView({
+ globalVent: that.globalVent,
+ vent: that.vent,
+ value: that.value
+ }));
+ });
+ },
+ selectTab: function() {
+ if (Utils.getUrlState.isTagTab()) {
+ this.$('.tabs').find('li a[aria-controls="tab-tag"]').parents('li').addClass('active').siblings().removeClass('active');
+ this.$('.tab-content').find('div#tab-tag').addClass('active').siblings().removeClass('active');
+ } else if (Utils.getUrlState.isTaxonomyTab()) {
+ this.$('.tabs').find('li a[aria-controls="tab-taxonomy"]').parents('li').addClass('active').siblings().removeClass('active');
+ this.$('.tab-content').find('div#tab-taxonomy').addClass('active').siblings().removeClass('active');
+ } else if (Utils.getUrlState.isSearchTab()) {
+ this.$('.tabs').find('li a[aria-controls="tab-search"]').parents('li').addClass('active').siblings().removeClass('active');
+ this.$('.tab-content').find('div#tab-search').addClass('active').siblings().removeClass('active');
+ }
+ },
+ });
+ return SideNavLayoutView;
+});
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/440bd2ae/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js b/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
index dfa29bb..c35cfcf 100644
--- a/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
+++ b/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
@@ -18,8 +18,12 @@
define(['require',
'backbone',
- 'hbs!tmpl/detail_page/DetailPageLayoutView_tmpl'
-], function(require, Backbone, DetailPageLayoutViewTmpl) {
+ 'hbs!tmpl/detail_page/DetailPageLayoutView_tmpl',
+ 'utils/Utils',
+ 'collection/VTagList',
+ 'models/VEntity',
+ 'utils/CommonViewFunction'
+], function(require, Backbone, DetailPageLayoutViewTmpl, Utils, VTagList, VEntity, CommonViewFunction) {
'use strict';
var DetailPageLayoutView = Backbone.Marionette.LayoutView.extend(
@@ -38,11 +42,55 @@ define(['require',
},
/** ui selector cache */
ui: {
+ tagClick: '[data-id="tagClick"]',
+ title: '[data-id="title"]',
+ editButton: '[data-id="editButton"]',
+ cancelButton: '[data-id="cancelButton"]',
+ publishButton: '[data-id="publishButton"]',
+ description: '[data-id="description"]',
+ descriptionTextArea: '[data-id="descriptionTextArea"]',
+ editBox: '[data-id="editBox"]',
+ createDate: '[data-id="createDate"]',
+ updateDate: '[data-id="updateDate"]',
+ createdUser: '[data-id="createdUser"]',
+ addTagBtn: '[data-id="addTagBtn"]',
+ appendList: '[data-id="appendList"]',
+ inputTagging: '[data-id="inputTagging"]',
+ deleteTag: '[data-id="deleteTag"]',
+ addTagtext: '[data-id="addTagtext"]',
+ addTagPlus: '[data-id="addTagPlus"]',
+ searchTag: '[data-id="searchTag"] input',
+ addTagListBtn: '[data-id="addTagListBtn"]',
backButton: "[data-id='backButton']"
},
/** ui events hash */
events: function() {
var events = {};
+ events["click " + this.ui.editButton] = function() {
+ this.ui.editButton.hide();
+ this.ui.description.hide();
+ this.ui.editBox.show();
+ this.ui.descriptionTextArea.focus();
+ if (this.descriptionPresent) {
+ this.ui.descriptionTextArea.val(this.ui.description.text());
+ }
+ };
+ events["click " + this.ui.tagClick] = function(e) {
+ if (!e.target.nodeName.toLocaleLowerCase() == "i") {
+ Utils.setUrl({
+ url: '#!/tag/tagAttribute/' + e.currentTarget.textContent,
+ mergeBrowserUrl: false,
+ trigger: true
+ });
+ }
+ };
+ // events["click " + this.ui.publishButton] = 'onPublishButtonClick';
+ events["click " + this.ui.cancelButton] = 'onCancelButtonClick';
+ events["click " + this.ui.deleteTag] = 'onClickTagCross';
+ // events["keyup " + this.ui.searchTag] = function(e) {
+ // // this.offlineSearchTag(e);
+ // };
+ events["click " + this.ui.addTagListBtn] = 'onClickAddTagBtn';
events['click ' + this.ui.backButton] = function() {
Backbone.history.history.back();
};
@@ -53,7 +101,9 @@ define(['require',
* @constructs
*/
initialize: function(options) {
- _.extend(this, _.pick(options, 'globalVent', 'collection', 'vent'));
+ _.extend(this, _.pick(options, 'globalVent', 'collection', 'vent', 'id'));
+ this.key = 'branchDetail';
+ //this.updateValue();
this.bindEvents();
this.commonTableOptions = {
collection: this.collection,
@@ -70,6 +120,7 @@ define(['require',
};
},
bindEvents: function() {
+ var that = this;
this.listenTo(this.collection, 'reset', function() {
var collectionJSON = this.collection.toJSON();
if (collectionJSON[0].id && collectionJSON[0].id.id) {
@@ -80,27 +131,118 @@ define(['require',
this.name = collectionJSON[0].values.name;
this.description = collectionJSON[0].values.description;
if (this.name) {
- this.$('.breadcrumbName').text(this.name);
- this.$('.name').show();
- this.$('.name').html('<strong>Name: </strong><span>' + this.name + '</span>');
+ this.ui.title.show();
+ this.ui.title.html('<span>' + this.name + '</span>');
} else {
- this.$('.name').hide();
+ this.ui.title.hide();
}
if (this.description) {
- this.$('.description').show();
- this.$('.description').html('<strong>Description: </strong><span>' + this.description + '</span>');
+ this.ui.description.show();
+ this.ui.description.html('<span>' + this.description + '</span>');
} else {
- this.$('.description').hide();
+ this.ui.description.hide();
}
}
+ if (collectionJSON[0].traits) {
+ this.tagElement = _.keys(collectionJSON[0].traits);
+ this.ui.addTagtext.hide();
+ this.ui.addTagPlus.show();
+ this.ui.inputTagging.find('.inputTag').remove();
+ this.addTagToTerms(this.tagElement);
+ }
}
+
this.renderEntityDetailTableLayoutView();
this.renderTagTableLayoutView(tagGuid);
this.renderLineageLayoutView(tagGuid);
this.renderSchemaLayoutView(tagGuid);
}, this);
},
- onRender: function() {},
+ onRender: function() {
+ var that = this;
+ this.ui.editBox.hide();
+ this.fetchCollection();
+ this.ui.appendList.on('click', 'div', function(e) {
+ if (e.target.nodeName == "INPUT") {
+ return false;
+ }
+ that.ui.addTagtext.hide();
+ that.ui.addTagPlus.show();
+ // that.addTagToTerms([$(this).text()]);
+ that.saveTagFromList($(this));
+ });
+ },
+ fetchCollection: function() {
+ this.collection.fetch({ reset: true });
+ },
+ onCancelButtonClick: function() {
+ this.ui.description.show();
+ this.ui.editButton.show();
+ this.ui.editBox.hide();
+ },
+ onClickTagCross: function(e) {
+ var tagName = $(e.currentTarget).parent().text(),
+ that = this,
+ modal = CommonViewFunction.deleteTagModel(tagName);
+ modal.on('ok', function() {
+ that.deleteTagData(e);
+ });
+ modal.on('closeModal', function() {
+ modal.trigger('cancel');
+ });
+ },
+ deleteTagData: function(e) {
+ var that = this,
+ tagName = $(e.currentTarget).text();
+ CommonViewFunction.deleteTag({
+ 'tagName': tagName,
+ 'guid': that.id,
+ 'collection': that.collection
+ });
+ },
+ addTagToTerms: function(tagObject) {
+ var tagData = "";
+ _.each(tagObject, function(val) {
+ tagData += '<span class="inputTag" data-id="tagClick">' + val + '<i class="fa fa-close" data-id="deleteTag"></i></span>';
+ });
+ this.$('.addTag-dropdown').before(tagData);
+ },
+ saveTagFromList: function(ref) {
+ var that = this;
+ this.entityModel = new VEntity();
+ var tagName = ref.text();
+ var json = {
+ "jsonClass": "org.apache.atlas.typesystem.json.InstanceSerialization$_Struct",
+ "typeName": tagName,
+ "values": {}
+ };
+ this.entityModel.saveEntity(this.id, {
+ data: JSON.stringify(json),
+ beforeSend: function() {},
+ success: function(data) {
+ that.fetchCollection();
+ },
+ error: function(error, data, status) {
+ if (error && error.responseText) {
+ var data = JSON.parse(error.responseText);
+ }
+ },
+ complete: function() {}
+ });
+ },
+ onClickAddTagBtn: function(e) {
+ var that = this;
+ require(['views/tag/addTagModalView'], function(AddTagModalView) {
+ var view = new AddTagModalView({
+ vent: that.vent,
+ guid: that.id,
+ modalCollection: that.collection
+ });
+ /*view.saveTagData = function() {
+ override saveTagData function
+ }*/
+ });
+ },
renderEntityDetailTableLayoutView: function() {
var that = this;
require(['views/entity/EntityDetailTableLayoutView'], function(EntityDetailTableLayoutView) {
@@ -125,7 +267,6 @@ define(['require',
require(['views/graph/LineageLayoutView'], function(LineageLayoutView) {
that.RLineageLayoutView.show(new LineageLayoutView({
globalVent: that.globalVent,
- assetName: tagGuid,
guid: tagGuid
}));
});
@@ -135,65 +276,9 @@ define(['require',
require(['views/schema/SchemaLayoutView'], function(SchemaLayoutView) {
that.RSchemaTableLayoutView.show(new SchemaLayoutView({
globalVent: that.globalVent,
- name: tagGuid,
- vent: that.vent
+ guid: tagGuid
}));
});
- },
- getTagTableColumns: function() {
- var that = this;
- return this.collection.constructor.getTableCols({
- tag: {
- label: "Tag",
- cell: "html",
- editable: false,
- sortable: false,
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function(rawValue, model) {
- var modelObject = model.toJSON();
- if (modelObject.$typeName$ && modelObject.instanceInfo) {
- return '<a href="#!/dashboard/detailPage/' + modelObject.instanceInfo.guid + '">' + modelObject.instanceInfo.typeName + '</a>';
- } else if (!modelObject.$typeName$) {
- return '<a href="#!/dashboard/detailPage/' + modelObject.guid + '">' + modelObject.typeName + '</a>';
- }
- }
- })
- },
- attributes: {
- label: "Attributes",
- cell: "html",
- editable: false,
- sortable: false,
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function(rawValue, model) {
- var modelObject = model.toJSON();
- if (modelObject.$typeName$ && modelObject.instanceInfo) {
- var guid = model.toJSON().instanceInfo.guid;
- model.getEntity(guid, {
- beforeSend: function() {},
- success: function(data) {
- return that.$('td a[data-id="' + guid + '"]').html(data.definition.values.name);
- },
- error: function(error, data, status) {},
- complete: function() {}
- });
- return '<a href="#!/dashboard/detailPage/' + guid + '" data-id="' + guid + '"></a>';
- } else if (!modelObject.$typeName$) {
- var guid = model.toJSON().guid;
- model.getEntity(guid, {
- beforeSend: function() {},
- success: function(data) {
- return that.$('td a[data-id="' + guid + '"]').html(data.definition.values.name);
- },
- error: function(error, data, status) {},
- complete: function() {}
- });
- return '<a href="#!/dashboard/detailPage/' + guid + '" data-id="' + guid + '"></a>';
- }
- }
- })
- }
- }, this.collection);
}
});
return DetailPageLayoutView;
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/440bd2ae/dashboardv2/public/js/views/entity/EntityDetailTableLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/entity/EntityDetailTableLayoutView.js b/dashboardv2/public/js/views/entity/EntityDetailTableLayoutView.js
index 80cd0ef..c0ae185 100644
--- a/dashboardv2/public/js/views/entity/EntityDetailTableLayoutView.js
+++ b/dashboardv2/public/js/views/entity/EntityDetailTableLayoutView.js
@@ -109,7 +109,6 @@ define(['require',
table += '<tr><td>' + key + '</td><td></td></tr>';
}
}
-
} else {
if (key == "createTime" || key == "lastAccessTime" || key == "retention") {
table += '<tr><td>' + key + '</td><td>' + new Date(valueObject[key]) + '</td></tr>';
@@ -133,7 +132,7 @@ define(['require',
value = data.GUID;
}
- that.$('td div[data-id="' + data.GUID + '"]').html('<a href="#!/dashboard/detailPage/' + data.GUID + '">' + value + '</a>');
+ that.$('td div[data-id="' + data.GUID + '"]').html('<a href="#!/detailPage/' + data.GUID + '">' + value + '</a>');
},
error: function(error, data, status) {},
complete: function() {}
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/440bd2ae/dashboardv2/public/js/views/graph/LineageLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/graph/LineageLayoutView.js b/dashboardv2/public/js/views/graph/LineageLayoutView.js
index 8751fbe..de10370 100644
--- a/dashboardv2/public/js/views/graph/LineageLayoutView.js
+++ b/dashboardv2/public/js/views/graph/LineageLayoutView.js
@@ -21,9 +21,10 @@ define(['require',
'hbs!tmpl/graph/LineageLayoutView_tmpl',
'collection/VLineageList',
'models/VEntity',
+ 'utils/Utils',
'dagreD3',
'd3-tip'
-], function(require, Backbone, LineageLayoutViewtmpl, VLineageList, VEntity, dagreD3, d3Tip) {
+], function(require, Backbone, LineageLayoutViewtmpl, VLineageList, VEntity, Utils, dagreD3, d3Tip) {
'use strict';
var LineageLayoutView = Backbone.Marionette.LayoutView.extend(
@@ -52,12 +53,12 @@ define(['require',
* @constructs
*/
initialize: function(options) {
- _.extend(this, _.pick(options, 'globalVent', 'assetName', 'guid'));
+ _.extend(this, _.pick(options, 'globalVent', 'guid'));
this.inputCollection = new VLineageList();
this.outputCollection = new VLineageList();
this.entityModel = new VEntity();
- this.inputCollection.url = "/api/atlas/lineage/" + this.assetName + "/inputs/graph";
- this.outputCollection.url = "/api/atlas/lineage/" + this.assetName + "/outputs/graph";
+ this.inputCollection.url = "/api/atlas/lineage/" + this.guid + "/inputs/graph";
+ this.outputCollection.url = "/api/atlas/lineage/" + this.guid + "/outputs/graph";
this.bindEvents();
this.fetchGraphData();
this.data = {};
@@ -280,7 +281,7 @@ define(['require',
svgGroup = svg.append("g");
var zoom = d3.behavior.zoom()
.scaleExtent([0.5, 6])
- .on("zoom", zoomed)
+ .on("zoom", zoomed);
function zoomed() {
svgGroup.attr("transform",
@@ -359,13 +360,19 @@ define(['require',
})
.on('dblclick', function(d) {
tooltip.hide(d);
- Backbone.history.navigate("#!/dashboard/detailPage/" + d, { trigger: true });
+ //var urlForTab = window.location.hash.split('/')[1];
+
+ Utils.setUrl({
+ url: '#!/detailPage/' + d,
+ mergeBrowserUrl: false,
+ trigger: true
+ });
})
.on('mouseout', function(d) {
tooltip.hide(d);
});
// Center the graph
- var initialScale = 1.5;
+ var initialScale = 1.2;
zoom.translate([(this.$('svg').width() - this.g.graph().width * initialScale) / 2, (this.$('svg').height() - this.g.graph().height * initialScale) / 2])
.scale(initialScale)
.event(svg);
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/440bd2ae/dashboardv2/public/js/views/schema/SchemaLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/schema/SchemaLayoutView.js b/dashboardv2/public/js/views/schema/SchemaLayoutView.js
index 05850ad..7574367 100644
--- a/dashboardv2/public/js/views/schema/SchemaLayoutView.js
+++ b/dashboardv2/public/js/views/schema/SchemaLayoutView.js
@@ -54,10 +54,7 @@ define(['require',
} else {
var value = e.currentTarget.text;
Utils.setUrl({
- url: '#!/dashboard/assetPage',
- urlParams: {
- query: value
- },
+ url: '#!/tag/tagAttribute/' + value,
mergeBrowserUrl: false,
trigger: true
});
@@ -70,9 +67,9 @@ define(['require',
* @constructs
*/
initialize: function(options) {
- _.extend(this, _.pick(options, 'globalVent', 'name', 'vent'));
+ _.extend(this, _.pick(options, 'globalVent', 'guid', 'vent'));
this.schemaCollection = new VSchemaList([], {});
- this.schemaCollection.url = "/api/atlas/lineage/" + this.name + "/schema";
+ this.schemaCollection.url = "/api/atlas/lineage/" + this.guid + "/schema";
this.commonTableOptions = {
collection: this.schemaCollection,
includeFilter: false,
@@ -115,6 +112,7 @@ define(['require',
});
},
getSchemaTableColumns: function() {
+ var that = this;
return this.schemaCollection.constructor.getTableCols({
name: {
label: "Name",
@@ -123,7 +121,7 @@ define(['require',
sortable: false,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function(rawValue, model) {
- return '<div><a href="#!/dashboard/detailPage/' + model.get('$id$').id + '">' + rawValue + '</a></div>';
+ return '<div><a href="#!/detailPage/' + model.get('$id$').id + '">' + rawValue + '</a></div>';
}
})
},
@@ -133,7 +131,7 @@ define(['require',
editable: false,
sortable: false
},
- dataType: {
+ type: {
label: "DataType",
cell: "html",
editable: false,
@@ -149,9 +147,9 @@ define(['require',
var traits = model.get('$traits$');
var atags = "";
_.keys(model.get('$traits$')).map(function(key) {
- atags += '<a data-id="tagClick">' + traits[key].$typeName$ + '<i class="fa fa-times" data-id="delete" data-name="' + traits[key].$typeName$ + '" data-guid="' + model.get('$id$').id + '" ></i></a>';
+ atags += '<a class="inputTag" data-id="tagClick">' + traits[key].$typeName$ + '<i class="fa fa-times" data-id="delete" data-name="' + traits[key].$typeName$ + '" data-guid="' + model.get('$id$').id + '" ></i></a>';
});
- return '<div class="tagList">' + atags + '<a data-id="addTag" data-guid="' + model.get('$id$').id + '"><i class="fa fa-plus"></i></a></div>';
+ return '<div class="tagList">' + atags + '<a href="javascript:void(0);" class="inputTag" data-id="addTag" data-guid="' + model.get('$id$').id + '"><i style="right:0" class="fa fa-plus"></i></a></div>';
}
})
}
@@ -159,18 +157,21 @@ define(['require',
},
onClickSchemaTag: function(e) {
var that = this;
- require(['views/tag/addTagModalView'], function(addTagModalView) {
- var view = new addTagModalView({
+ require(['views/tag/addTagModalView'], function(AddTagModalView) {
+ var view = new AddTagModalView({
vent: that.vent,
guid: that.$(e.currentTarget).data("guid"),
modalCollection: that.schemaCollection
});
+ // view.saveTagData = function() {
+ //override saveTagData function
+ // }
});
},
onClickTagCross: function(e) {
- var tagName = $(e.target).data("name");
- var that = this;
- var modal = CommonViewFunction.deleteTagModel(tagName);
+ var tagName = $(e.target).data("name"),
+ that = this,
+ modal = CommonViewFunction.deleteTagModel(tagName);
modal.on('ok', function() {
that.deleteTagData(e);
});
@@ -180,14 +181,12 @@ define(['require',
},
deleteTagData: function(e) {
var that = this,
- tagName = $(e.target).data("name");
- var guid = $(e.target).data("guid");
- require(['utils/CommonViewFunction'], function(CommonViewFunction) {
- CommonViewFunction.deleteTag({
- 'tagName': tagName,
- 'guid': guid,
- 'collection': that.schemaCollection
- });
+ tagName = $(e.target).data("name"),
+ guid = $(e.target).data("guid");
+ CommonViewFunction.deleteTag({
+ 'tagName': tagName,
+ 'guid': guid,
+ 'collection': that.tagCollection
});
}
});
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/440bd2ae/dashboardv2/public/js/views/search/SearchDetailLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/search/SearchDetailLayoutView.js b/dashboardv2/public/js/views/search/SearchDetailLayoutView.js
new file mode 100644
index 0000000..d32c01e
--- /dev/null
+++ b/dashboardv2/public/js/views/search/SearchDetailLayoutView.js
@@ -0,0 +1,67 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+define(['require',
+ 'backbone',
+ 'hbs!tmpl/search/SearchDetailLayoutView_tmpl',
+], function(require, Backbone, SearchDetailLayoutViewTmpl) {
+ 'use strict';
+
+ var SearchDetailLayoutView = Backbone.Marionette.LayoutView.extend(
+ /** @lends SearchDetailLayoutView */
+ {
+ _viewName: 'SearchDetailLayoutView',
+
+ template: SearchDetailLayoutViewTmpl,
+
+ /** Layout sub regions */
+ regions: {
+ RSearchResultLayoutView: "#r_searchResultLayoutView"
+ },
+
+ /** ui selector cache */
+ ui: {},
+ /** ui events hash */
+ events: function() {},
+ /**
+ * intialize a new SearchDetailLayoutView Layout
+ * @constructs
+ */
+ initialize: function(options) {
+ _.extend(this, _.pick(options, 'globalVent', 'value'));
+ },
+ bindEvents: function() {},
+ onRender: function() {
+ this.renderSearchResultLayoutView();
+ },
+ renderSearchResultLayoutView: function() {
+ var that = this;
+ require(['views/search/SearchResultLayoutView'], function(SearchResultLayoutView) {
+ var value = {
+ 'query': that.value.query,
+ 'searchType': that.value.searchType
+ };
+ that.RSearchResultLayoutView.show(new SearchResultLayoutView({
+ value: value,
+ tag: that.tag
+ }));
+ });
+ }
+ });
+ return SearchDetailLayoutView;
+});
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/440bd2ae/dashboardv2/public/js/views/search/SearchLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/search/SearchLayoutView.js b/dashboardv2/public/js/views/search/SearchLayoutView.js
index 6ada4c7..f63c863 100644
--- a/dashboardv2/public/js/views/search/SearchLayoutView.js
+++ b/dashboardv2/public/js/views/search/SearchLayoutView.js
@@ -19,8 +19,11 @@
define(['require',
'backbone',
'hbs!tmpl/search/SearchLayoutView_tmpl',
+ 'collection/VSearchList',
'utils/Utils',
-], function(require, Backbone, SearchLayoutViewTmpl, Utils) {
+ 'collection/VTagList',
+ 'tree',
+], function(require, Backbone, SearchLayoutViewTmpl, VSearchList, Utils, VTagList) {
'use strict';
var SearchLayoutView = Backbone.Marionette.LayoutView.extend(
@@ -37,44 +40,32 @@ define(['require',
ui: {
searchButton: '[data-id="searchButton"]',
searchInput: '[data-id="searchInput"]',
- searchType: 'input[name="queryType"]'
+ searchType: 'input[name="queryType"]',
+ advanceSearch: '[data-id="advanceSearch"]',
+ //advanceSearchContainer: '[data-id="advanceSearchContainer"]',
+ tagList: '[data-id="tagList"]',
+ tagListInput: '[data-id="tagListInput"]',
+ termListInput: '[data-id="termListInput"]',
+ searchBtn: '[data-id="searchBtn"]',
+ clearSearch: '[data-id="clearSearch"]'
},
/** ui events hash */
events: function() {
var events = {},
that = this;
- events["click " + this.ui.searchButton] = 'onSearchButtonClick';
events["keyup " + this.ui.searchInput] = function(e) {
+ this.ui.searchBtn.removeAttr("disabled");
var code = e.which;
if (code == 13) {
- Utils.setUrl({
- url: '#!/dashboard/assetPage',
- urlParams: {
- query: this.ui.searchInput.val(),
- searchType: this.type
- },
- mergeBrowserUrl: false,
- trigger: false
- });
- that.onSearchButtonClick(e.currentTarget.value);
+ that.findSearchResult();
}
- };
- events["change " + this.ui.searchType] = function(e) {
- this.type = e.currentTarget.value;
- if (this.ui.searchInput.val() !== "") {
- this.onSearchButtonClick();
+ if (code == 8 && this.ui.searchInput.val() == "") {
+ this.ui.searchBtn.attr("disabled", "true");
}
- this.ui.searchInput.attr("placeholder", this.type == "dsl" ? 'Search using a DSL query: e.g. DataSet where name="sales_fact "' : 'Search using a query string: e.g. sales_fact');
- Utils.setUrl({
- url: '#!/dashboard/assetPage',
- urlParams: {
- query: this.ui.searchInput.val(),
- searchType: this.type
- },
- mergeBrowserUrl: false,
- trigger: false
- });
};
+ events["change " + this.ui.searchType] = 'dslFulltextToggle';
+ events["click " + this.ui.searchBtn] = 'findSearchResult';
+ events["click " + this.ui.clearSearch] = 'clearSearchData';
return events;
},
/**
@@ -82,28 +73,174 @@ define(['require',
* @constructs
*/
initialize: function(options) {
- _.extend(this, _.pick(options, 'globalVent', 'vent'));
- this.bindEvents();
+ _.extend(this, _.pick(options, 'globalVent', 'value'));
+ this.searchCollection = new VSearchList([], {
+ state: {
+ firstPage: 0,
+ pageSize: 10
+ }
+ });
this.type = "fulltext";
+ this.tagCollection = new VTagList();
+ $.extend(this.tagCollection.queryParams, { type: 'TRAIT' });
+ this.typeCollection = new VTagList();
+ $.extend(this.typeCollection.queryParams, { type: 'CLASS' });
+ this.bindEvents();
+ },
+ bindEvents: function(param) {
+ this.listenTo(this.searchCollection, "reset", function(value) {
+ this.renderTree();
+ }, this);
+ // this.listenTo(this.tagCollection, 'reset', function() {
+ // this.tagsAndTypeGenerator('tagCollection', this.ui.tagListInput, 'listTag', param);
+ // }, this);
+ // this.listenTo(this.typeCollection, 'reset', function() {
+ // this.tagsAndTypeGenerator('typeCollection', this.ui.termListInput, 'listType', param);
+ // }, this);
+ },
+ onRender: function() {
+ // array of tags which is coming from url
+ this.ui.searchBtn.attr("disabled", "true");
+ this.setValues();
+ this.fetchCollections();
+ },
+ manualRender: function(paramObj) {
+ this.setValues(paramObj);
},
- bindEvents: function() {
- this.listenTo(this.vent, "tag:click", function(tagvalues) {
- if (tagvalues.searchType) {
- this.type = tagvalues.searchType;
- this.$('input[name="queryType"][value=' + this.type + ']').prop('checked', true);
+ setValues: function(paramObj) {
+ var arr = [];
+ if (paramObj) {
+ this.value = paramObj;
+ }
+ if (this.value) {
+ if (this.value.query.length) {
+ // get only search value and append it to input box
+ this.ui.searchInput.val(this.value.query);
+ this.ui.searchBtn.removeAttr("disabled");
+ /* if (this.value.query.split(" where ").length > 1) {
+ this.ui.searchInput.val(this.value.query.split(" where ")[0]);
+ } else if (this.value.query.split(" isa ").length > 1) {
+ this.ui.searchInput.val(this.value.query.split(" isa ")[0]);
+ } else {
+ this.ui.searchInput.val(this.value.query);
+ }
+ _.each(this.value.query.split(' isa '), function(val, key) {
+ if (key > 0) {
+ arr.push(val.split(" ")[0])
+ }
+ });*/
}
- if (tagvalues.query) {
- this.ui.searchInput.val(tagvalues.query);
- this.triggerSearch(tagvalues.query);
+ if (this.value.dslChecked == "true") {
+ this.ui.searchType.prop("checked", this.value.dslChecked).trigger("change")
}
- }, this);
+ }
+ this.bindEvents(arr);
+ },
+ fetchCollections: function() {
+ // this.tagCollection.fetch({ reset: true });
+ // this.typeCollection.fetch({ reset: true });
},
- onRender: function() {},
- onSearchButtonClick: function(e) {
+ findSearchResult: function() {
this.triggerSearch(this.ui.searchInput.val());
},
triggerSearch: function(value) {
- this.vent.trigger("search:click", { 'query': value, type: this.type });
+ // this.ui.searchType.is(':checked') == true;
+ // var advancedSearchValue = value;
+ if (!this.ui.searchType.is(':checked')) {
+ // if (this.ui.tagListInput.select2('data').length > 1) {
+ // advancedSearchValue = value + " where " + value + " isa " + this.ui.tagListInput.val().join(" and " + value + " isa ");
+ // } else {
+ // advancedSearchValue = value + " isa " + this.ui.tagListInput.val();
+ // advancedSearchValue = value;
+ // }
+ this.type = "dsl";
+ } else if (!this.ui.searchType.is(':checked')) {
+ this.type = "fulltext";
+ }
+
+ var advancedSearchValue = value;
+ this.type = "fulltext";
+ Utils.setUrl({
+ url: '#!/search/searchResult',
+ urlParams: {
+ query: advancedSearchValue,
+ searchType: this.type,
+ dslChecked: this.ui.searchType.is(':checked')
+ },
+ updateTabState: function() {
+ return { searchUrl: this.url, stateChanged: true };
+ },
+ mergeBrowserUrl: false,
+ trigger: true
+ });
+ },
+ fetchCollection: function(value) {
+ if (value) {
+ this.searchCollection.url = "/api/atlas/discovery/search/" + this.type;
+ $.extend(this.searchCollection.queryParams, { 'query': value });
+ }
+ this.searchCollection.fetch({ reset: true });
+ },
+ // tagsAndTypeGenerator: function(collection, element, searchString, params) {
+ // var str = '';
+ // _.each(this[collection].fullCollection.models, function(model) {
+ // var tagName = model.get("tags");
+ // if (searchString) {
+ // str += '<option data-id="tags">' + tagName + '</option>';
+ // }
+ // });
+ // element.html(str);
+ // if (searchString == 'listTag') {
+ // var placeholderText = "Containing tag(S)";
+ // if (params) {
+ // element.val(params);
+ // }
+ // } else {
+ // var placeholderText = "Select type";
+ // }
+ // element.select2({
+ // placeholder: placeholderText,
+ // allowClear: true
+ // });
+ // },
+ dslFulltextToggle: function(e) {
+ if (e.currentTarget.checked) {
+ this.type = "dsl";
+ //this.dslSearch = true;
+ //this.ui.advanceSearchContainer.hide();
+ } else {
+ this.type = "fulltext";
+ // this.dslSearch = false;
+ //this.ui.advanceSearchContainer.show();
+ }
+ if (this.ui.searchInput.val() !== "") {
+ Utils.setUrl({
+ url: '#!/search/searchResult',
+ urlParams: {
+ query: this.ui.searchInput.val(),
+ searchType: this.type,
+ dslChecked: this.ui.searchType.is(':checked')
+ },
+ updateTabState: function() {
+ return { searchUrl: this.url, stateChanged: true };
+ },
+ mergeBrowserUrl: false,
+ trigger: true
+ });
+ //this.findSearchResult();
+ }
+ this.ui.searchInput.attr("placeholder", this.type == "dsl" ? 'Search using a DSL query: e.g. DataSet where name="sales_fact "' : 'Search using a query string: e.g. sales_fact');
+ },
+ clearSearchData: function() {
+ this.ui.searchInput.val("");
+ //this.ui.tagListInput.select2('val', '');
+ //this.ui.termListInput.select2('val', '');
+ this.ui.searchBtn.attr("disabled", "true");
+ Utils.setUrl({
+ url: '#!/search',
+ mergeBrowserUrl: false,
+ trigger: true
+ });
}
});
return SearchLayoutView;
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/440bd2ae/dashboardv2/public/js/views/search/SearchResultLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/search/SearchResultLayoutView.js b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
new file mode 100644
index 0000000..e2981d1
--- /dev/null
+++ b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
@@ -0,0 +1,382 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+define(['require',
+ 'backbone',
+ 'hbs!tmpl/search/SearchResultLayoutView_tmpl',
+ 'modules/Modal',
+ 'models/VEntity',
+ 'utils/Utils',
+ 'utils/Globals',
+ 'collection/VSearchList',
+ 'utils/CommonViewFunction'
+], function(require, Backbone, SearchResultLayoutViewTmpl, Modal, VEntity, Utils, Globals, VSearchList, CommonViewFunction) {
+ 'use strict';
+
+ var SearchResultLayoutView = Backbone.Marionette.LayoutView.extend(
+ /** @lends SearchResultLayoutView */
+ {
+ _viewName: 'SearchResultLayoutView',
+
+ template: SearchResultLayoutViewTmpl,
+
+ /** Layout sub regions */
+ regions: {
+ RTagLayoutView: "#r_tagLayoutView",
+ RSearchLayoutView: "#r_searchLayoutView",
+ REntityTableLayoutView: "#r_entityTableLayoutView",
+ },
+
+ /** ui selector cache */
+ ui: {
+ tagClick: '[data-id="tagClick"]',
+ addTag: '[data-id="addTag"]',
+ },
+
+ /** ui events hash */
+ events: function() {
+ var events = {};
+ events["click " + this.ui.tagClick] = function(e) {
+ if (e.target.nodeName.toLocaleLowerCase() == "i") {
+ this.onClickTagCross(e);
+ } else {
+ Utils.setUrl({
+ url: '#!/tag/tagAttribute/' + e.currentTarget.text,
+ mergeBrowserUrl: false,
+ trigger: true
+ });
+ }
+ };
+ events["click " + this.ui.addTag] = function(e) {
+ this.addModalView(e);
+ };
+ events["click " + this.ui.tagCrossIcon] = function(e) {};
+ return events;
+ },
+ /**
+ * intialize a new SearchResultLayoutView Layout
+ * @constructs
+ */
+ initialize: function(options) {
+ _.extend(this, _.pick(options, 'globalVent', 'vent', 'value'));
+ this.entityModel = new VEntity();
+ this.searchCollection = new VSearchList();
+ this.fetchList = 0;
+ this.commonTableOptions = {
+ collection: this.searchCollection,
+ includeFilter: false,
+ includePagination: true,
+ includePageSize: false,
+ includeFooterRecords: true,
+ includeSizeAbleColumns: false,
+ gridOpts: {
+ emptyText: 'No Record found!',
+ className: 'table table-hover backgrid table-quickMenu'
+ },
+ filterOpts: {},
+ paginatorOpts: {}
+ };
+ this.bindEvents();
+
+ },
+ bindEvents: function() {
+ this.listenTo(this.vent, "show:searchResult", function(value) {
+ this.fetchCollection(value);
+ this.REntityTableLayoutView.reset();
+ }, this);
+ this.listenTo(this.searchCollection, "reset", function(value) {
+ if (this.searchCollection.toJSON().length == 0) {
+ this.checkTableFetch();
+ }
+ this.renderTableLayoutView();
+ }, this);
+ this.listenTo(this.searchCollection, "error", function(value, responseData) {
+ this.$('.fontLoader').hide();
+ var message = "Invalid expression";
+ if (this.value && this.value.query) {
+ message += " : " + this.value.query;
+ }
+ if (responseData.responseText) {
+ message = JSON.parse(responseData.responseText).error;
+ }
+ Utils.notifyError({
+ content: message
+ });
+ }, this);
+ },
+ onRender: function() {
+ //this.renderTableLayoutView();
+ var value = {};
+ if (this.value) {
+ value = this.value;
+ } else {
+ value = {
+ 'query': '',
+ 'searchType': 'fulltext'
+
+ };
+ }
+ this.fetchCollection(value);
+ },
+ fetchCollection: function(value) {
+ this.$('.fontLoader').show();
+ this.$('.entityTable').hide();
+ if (value) {
+ if (value.searchType) {
+ this.searchCollection.url = "/api/atlas/discovery/search/" + value.searchType;
+ }
+ _.extend(this.searchCollection.queryParams, { 'query': value.query });
+ }
+ this.searchCollection.fetch({ reset: true });
+ },
+ renderTableLayoutView: function() {
+ var that = this,
+ count = 4;
+ require(['utils/TableLayout'], function(TableLayout) {
+ var columnCollection = Backgrid.Columns.extend({
+ sortKey: "position",
+ comparator: function(item) {
+ return item.get(this.sortKey) || 999;
+ },
+ setPositions: function() {
+ _.each(this.models, function(model, index) {
+ if (model.get('name') == "name") {
+ model.set("position", 1, { silent: true });
+ model.set("label", "Name");
+ } else if (model.get('name') == "description") {
+ model.set("position", 2, { silent: true });
+ model.set("label", "Description");
+ } else if (model.get('name') == "owner") {
+ model.set("position", 3, { silent: true });
+ model.set("label", "Owner");
+ } else {
+ model.set("position", ++count, { silent: true });
+ }
+ });
+ return this;
+ }
+ });
+ var columns = new columnCollection(that.getEntityTableColumns());
+ columns.setPositions().sort();
+ that.REntityTableLayoutView.show(new TableLayout(_.extend({}, that.commonTableOptions, {
+ globalVent: that.globalVent,
+ columns: columns,
+ includeOrderAbleColumns: true
+ })));
+ });
+ },
+ checkTableFetch: function() {
+ if (this.fetchList <= 0) {
+ this.$('.fontLoader').hide();
+ this.$('.entityTable').show();
+ }
+ },
+ getEntityTableColumns: function() {
+ var that = this,
+ col = {};
+ var responseData = this.searchCollection.responseData;
+ if (this.searchCollection.responseData) {
+ if (responseData.dataType) {
+ if (responseData.dataType.attributeDefinitions.length == 2 && responseData.dataType.attributeDefinitions[1].name == "instanceInfo") {
+ return this.getFixedColumn();
+ } else {
+ var modelJSON = this.searchCollection.toJSON()[0];
+ _.keys(modelJSON).map(function(key) {
+ if (key.indexOf("$") == -1 && typeof modelJSON[key] != "object") {
+ if (typeof modelJSON[key] == "string" || typeof modelJSON[key] == "number") {
+ if (typeof modelJSON[key] == "number" && key != "createTime") {
+ return;
+ }
+ if (key == "name" || key == "owner" || key == "description") {
+ col[key] = {
+ cell: (key == "name") ? ("Html") : ("String"),
+ editable: false,
+ sortable: false,
+ orderable: true,
+ formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+ fromRaw: function(rawValue, model) {
+ if (rawValue == null) {
+ return null;
+ }
+ if (model.get('createTime') == rawValue) {
+ return new Date(rawValue);
+ }
+ if (model.get('name') == rawValue) {
+ if (model.get('$id$')) {
+ return '<a href="#!/detailPage/' + model.get('$id$').id + '">' + rawValue + '</a>';
+ } else {
+ return '<a>' + rawValue + '</a>';
+ }
+ } else {
+ return rawValue;
+ }
+ }
+ })
+ };
+ }
+ }
+ }
+ });
+ col['tag'] = {
+ label: "Tags",
+ cell: "Html",
+ editable: false,
+ sortable: false,
+ orderable: true,
+ formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+ fromRaw: function(rawValue, model) {
+ var traits = model.get('$traits$');
+ var atags = "",
+ addTag = "";
+ _.keys(model.get('$traits$')).map(function(key) {
+ atags += '<a class="inputTag" data-id="tagClick">' + traits[key].$typeName$ + '<i class="fa fa-times" data-id="delete" data-name="' + traits[key].$typeName$ + '" data-guid="' + model.get('$id$').id + '" ></i></a>';
+ });
+ if (model.get('$id$')) {
+ addTag += '<a href="javascript:void(0)" data-id="addTag" class="inputTag" data-guid="' + model.get('$id$').id + '" ><i style="right:0" class="fa fa-plus"></i></a>';
+ } else {
+ addTag += '<a href="javascript:void(0)" data-id="addTag" class="inputTag"><i style="right:0" class="fa fa-plus"></i></a>';
+
+ }
+ return '<div class="tagList">' + atags + addTag + '</div>';
+ }
+ })
+ };
+ col['taxonomy'] = {
+ label: "Taxonomy",
+ cell: "Html",
+ editable: false,
+ sortable: false,
+ orderable: true,
+ };
+ that.checkTableFetch();
+ return this.searchCollection.constructor.getTableCols(col, this.searchCollection);
+ }
+ } else {
+ return this.getFixedColumn();
+ }
+ }
+ },
+ getFixedColumn: function() {
+ var that = this;
+ return this.searchCollection.constructor.getTableCols({
+ instanceInfo: {
+ label: "Type Name",
+ cell: "html",
+ editable: false,
+ sortable: false,
+ formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+ fromRaw: function(rawValue, model) {
+ var modelObject = model.toJSON();
+ if (modelObject.$typeName$ && modelObject.instanceInfo) {
+ return '<a href="#!/detailPage/' + modelObject.instanceInfo.guid + '">' + modelObject.instanceInfo.typeName + '</a>';
+ } else if (!modelObject.$typeName$) {
+ return '<a href="#!/detailPage/' + modelObject.guid + '">' + modelObject.typeName + '</a>';
+ }
+ }
+ })
+ },
+ name: {
+ label: "Name",
+ cell: "html",
+ editable: false,
+ sortable: false,
+ formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+ fromRaw: function(rawValue, model) {
+ var modelObject = model.toJSON();
+ if (modelObject.$typeName$ && modelObject.instanceInfo) {
+ var guid = model.toJSON().instanceInfo.guid;
+ ++that.fetchList;
+ model.getEntity(guid, {
+ beforeSend: function() {},
+ success: function(data) {
+ if (data.definition && data.definition.values && data.definition.values.name) {
+ return that.$('td a[data-id="' + guid + '"]').html(data.definition.values.name);
+ } else {
+ return that.$('td a[data-id="' + guid + '"]').html(data.definition.id.id);
+ }
+ },
+ error: function(error, data, status) {},
+ complete: function() {
+ --that.fetchList;
+ that.checkTableFetch();
+ }
+ });
+ return '<a href="#!/detailPage/' + guid + '" data-id="' + guid + '"></a>';
+ } else if (!modelObject.$typeName$) {
+ var guid = model.toJSON().guid;
+ ++that.fetchList;
+ model.getEntity(guid, {
+ beforeSend: function() {},
+ success: function(data) {
+ if (data.definition && data.definition.values && data.definition.values.name) {
+ return that.$('td a[data-id="' + guid + '"]').html(data.definition.values.name);
+ } else {
+ return that.$('td a[data-id="' + guid + '"]').html(data.definition.id.id);
+ }
+ },
+ error: function(error, data, status) {},
+ complete: function() {
+ --that.fetchList;
+ that.checkTableFetch();
+ }
+ });
+ return '<a href="#!/detailPage/' + guid + '" data-id="' + guid + '"></a>';
+ }
+ }
+ })
+ }
+ }, this.searchCollection);
+ },
+ addModalView: function(e) {
+ var that = this;
+ require(['views/tag/addTagModalView'], function(AddTagModalView) {
+ var view = new AddTagModalView({
+ vent: that.vent,
+ guid: that.$(e.currentTarget).data("guid"),
+ modalCollection: that.searchCollection
+ });
+ // view.saveTagData = function() {
+ //override saveTagData function
+ // }
+ });
+ },
+ onClickTagCross: function(e) {
+ var tagName = $(e.target).data("name"),
+ guid = $(e.target).data("guid"),
+ that = this,
+ modal = CommonViewFunction.deleteTagModel(tagName);
+ modal.on('ok', function() {
+ that.deleteTagData(e);
+ });
+ modal.on('closeModal', function() {
+ modal.trigger('cancel');
+ });
+ },
+ deleteTagData: function(e) {
+ var that = this,
+ tagName = $(e.target).data("name"),
+ guid = $(e.target).data("guid");
+ CommonViewFunction.deleteTag({
+ 'tagName': tagName,
+ 'guid': guid,
+ 'collection': that.searchCollection
+ });
+ }
+ });
+ return SearchResultLayoutView;
+});
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/440bd2ae/dashboardv2/public/js/views/site/Header.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/site/Header.js b/dashboardv2/public/js/views/site/Header.js
index dffdf79..cf97a75 100644
--- a/dashboardv2/public/js/views/site/Header.js
+++ b/dashboardv2/public/js/views/site/Header.js
@@ -23,31 +23,10 @@ define(['require',
var Header = Marionette.LayoutView.extend({
template: tmpl,
- templateHelpers: function() {
- return {
- urlType: this.urlType
- };
- },
regions: {},
events: {},
- initialize: function(options) {
- var url = window.location.href.split("/");
- this.urlType = url[url.length - 1];
- var urlText = this.urlType.split("?")[0];
- /*if we us only old ui then uncomment this condition*/
- if (urlText == "" || urlText == "index.html" || urlText == "assetPage") {
- this.urlType = "assetPage";
- }
- },
- onRender: function() {},
- addTagsFileds: function() {
- var that = this;
- require(['views/tag/createTagsLayoutView'], function(createTagsLayoutView) {
- var view = new createTagsLayoutView({
- vent: that.vent
- });
- });
- }
+ initialize: function(options) {},
+ onRender: function() {}
});
return Header;
});
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/440bd2ae/dashboardv2/public/js/views/tag/AddTagAttributeView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/tag/AddTagAttributeView.js b/dashboardv2/public/js/views/tag/AddTagAttributeView.js
new file mode 100644
index 0000000..6d38162
--- /dev/null
+++ b/dashboardv2/public/js/views/tag/AddTagAttributeView.js
@@ -0,0 +1,55 @@
+
+/**
+ * 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/tag/AddTagAttributeView_tmpl',
+
+], function(require, Backbone, AddTagAttributeView_tmpl) {
+ 'use strict';
+
+ return Backbone.Marionette.LayoutView.extend(
+ /** @lends GlobalExclusionListView */
+ {
+
+ template: AddTagAttributeView_tmpl,
+
+ /** Layout sub regions */
+ regions: {},
+
+ /** ui selector cache */
+ ui: {
+ close: "[data-id='close']",
+ attributeId: "[data-id='attributeId']"
+ },
+ events: function() {
+ var events = {};
+ return events;
+ },
+ /**
+ * intialize a new GlobalExclusionComponentView Layout
+ * @constructs
+ */
+ initialize: function(options) {
+ this.parentView = options.parentView;
+ },
+ onRender: function() {},
+ bindEvents: function() {}
+ });
+});
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/440bd2ae/dashboardv2/public/js/views/tag/CreateTagLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/tag/CreateTagLayoutView.js b/dashboardv2/public/js/views/tag/CreateTagLayoutView.js
new file mode 100644
index 0000000..186f26e
--- /dev/null
+++ b/dashboardv2/public/js/views/tag/CreateTagLayoutView.js
@@ -0,0 +1,79 @@
+/**
+ * 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/tag/createTagLayoutView_tmpl',
+ 'utils/Utils'
+], function(require, Backbone, CreateTagLayoutViewTmpl, Utils) {
+
+ var CreateTagLayoutView = Backbone.Marionette.LayoutView.extend(
+ /** @lends CreateTagLayoutView */
+ {
+ _viewName: 'CreateTagLayoutView',
+
+ template: CreateTagLayoutViewTmpl,
+
+ /** Layout sub regions */
+ regions: {},
+
+ /** ui selector cache */
+ ui: {
+
+ tagName: "[data-id='tagName']",
+ parentTag: "[data-id='parentTag']"
+ },
+ /** ui events hash */
+ events: function() {
+ var events = {};
+ return events;
+ },
+ /**
+ * intialize a new CreateTagLayoutView Layout
+ * @constructs
+ */
+ initialize: function(options) {
+ _.extend(this, _.pick(options, 'tagCollection'));
+ this.bindEvents();
+ },
+ bindEvents: function() {
+ // this.listenTo(this.tagCollection, 'reset', function() {
+ // this.tagCollectionList();
+ // }, this);
+ },
+ onRender: function() {
+ //this.fetchCollection();
+ this.tagCollectionList();
+ },
+
+ tagCollectionList: function() {
+ this.ui.parentTag.empty();
+ var str = '<option selected="true" style="display:none;"></option>';
+ for (var i = 0; i < this.tagCollection.fullCollection.models.length; i++) {
+ var tags = this.tagCollection.fullCollection.models[i].get("tags");
+ str += '<option>' + tags + '</option>';
+ this.ui.parentTag.html(str);
+ }
+ },
+ fetchCollection: function() {
+ $.extend(this.tagCollection.queryParams, { type: 'TRAIT' });
+ this.tagCollection.fetch({ reset: true });
+ },
+ });
+ return CreateTagLayoutView;
+});
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/440bd2ae/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js b/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js
new file mode 100644
index 0000000..421d5ad
--- /dev/null
+++ b/dashboardv2/public/js/views/tag/TagAttributeDetailLayoutView.js
@@ -0,0 +1,144 @@
+/**
+ * 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/tag/TagAttributeDetailLayoutView_tmpl',
+ 'utils/Utils',
+ 'views/tag/AddTagAttributeView',
+ 'collection/VCommonList',
+ 'models/VTag'
+], function(require, Backbone, TagAttributeDetailLayoutViewTmpl, Utils, AddTagAttributeView, VCommonList, VTag) {
+ 'use strict';
+
+ var TagAttributeDetailLayoutView = Backbone.Marionette.LayoutView.extend(
+ /** @lends TagAttributeDetailLayoutView */
+ {
+ template: TagAttributeDetailLayoutViewTmpl,
+ /** Layout sub regions */
+ regions: {},
+ /** ui selector cache */
+ ui: {
+ title: '[data-id="title"]',
+ editButton: '[data-id="editButton"]',
+ editBox: '[data-id="editBox"]',
+ addAttrBtn: '[data-id="addAttrBtn"]',
+ saveButton: "[data-id='saveButton']",
+ showAttribute: "[data-id='showAttribute']",
+ cancelButton: "[data-id='cancelButton']",
+ addTagListBtn: '[data-id="addTagListBtn"]',
+ addTagtext: '[data-id="addTagtext"]',
+ addTagPlus: '[data-id="addTagPlus"]',
+ },
+ /** ui events hash */
+ events: function() {
+ var events = {};
+ events["click " + this.ui.addAttrBtn] = 'onClickAddAttribute';
+ events["click " + this.ui.addTagListBtn] = 'onClickAddTagBtn';
+ return events;
+ },
+ /**
+ * intialize a new TagAttributeDetailLayoutView Layout
+ * @constructs
+ */
+ initialize: function(options) {
+ _.extend(this, _.pick(options, 'globalVent', 'tag', 'vent'));
+ this.tagCollection = new VCommonList();
+ this.tagCollection.url = "/api/atlas/types/" + this.tag;
+ this.tagCollection.modelAttrName = "definition";
+ this.tagCollection.fetch({ reset: true });
+ this.bindEvents();
+ },
+ bindEvents: function() {
+ this.listenTo(this.tagCollection, 'reset', function() {
+ var that = this,
+ attributeData = "";
+ _.each(this.tagCollection.models, function(attr) {
+ var traitTypes = attr.get("traitTypes");
+ _.each(traitTypes[0].attributeDefinitions, function(value, key) {
+ attributeData += '<span class="inputAttribute">' + value.name + '</span>';
+ });
+ });
+ if (attributeData.length) {
+ that.ui.addTagtext.hide();
+ that.ui.addTagPlus.show();
+ }
+ that.ui.showAttribute.html(attributeData);
+
+ }, this);
+ },
+ onRender: function() {
+ this.ui.title.html('<span>' + this.tag + '</span>');
+ this.ui.saveButton.attr("disabled", "true");
+ },
+ onSaveButton: function(ref) {
+ var that = this,
+ tagModel = new VTag(),
+ attributeName = $(ref.el).find("input").val();
+ this.tagCollection.first().get('traitTypes')[0].attributeDefinitions.push({
+ "name": attributeName,
+ "dataTypeName": "string",
+ "multiplicity": "optional",
+ "isComposite": false,
+ "isUnique": false,
+ "isIndexable": true,
+ "reverseAttributeName": null
+ });
+ tagModel.set(this.tagCollection.first().toJSON()).save(null, {
+ type: "PUT",
+ success: function(model, response) {
+ that.tagCollection.fetch({ reset: true });
+ Utils.notifySuccess({
+ content: " Attribute has been Updated"
+ });
+ },
+ error: function(model, response) {
+ if (response.responseJSON && response.responseJSON.error) {
+ that.tagCollection.fetch({ reset: true });
+ Utils.notifyError({
+ content: response.responseJSON.error
+ });
+ }
+ }
+ });
+ },
+ onClickAddTagBtn: function(e) {
+ var that = this;
+ require(['views/tag/AddTagAttributeView',
+ 'modules/Modal'
+ ],
+ function(AddTagAttributeView, Modal) {
+ var view = new AddTagAttributeView(),
+ modal = new Modal({
+ title: 'Add Attribute',
+ content: view,
+ cancelText: "Cancel",
+ okText: 'Add',
+ allowCancel: true,
+ }).open();
+ modal.on('ok', function() {
+ that.onSaveButton(view);
+ });
+ modal.on('closeModal', function() {
+ modal.trigger('cancel');
+ });
+ });
+ }
+ });
+ return TagAttributeDetailLayoutView;
+});
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/440bd2ae/dashboardv2/public/js/views/tag/TagDetailLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/tag/TagDetailLayoutView.js b/dashboardv2/public/js/views/tag/TagDetailLayoutView.js
new file mode 100644
index 0000000..7e0f7ed
--- /dev/null
+++ b/dashboardv2/public/js/views/tag/TagDetailLayoutView.js
@@ -0,0 +1,79 @@
+/**
+ * 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/tag/TagDetailLayoutView_tmpl',
+], function(require, Backbone, TagDetailLayoutView_tmpl) {
+ 'use strict';
+
+ var TagDetailLayoutView = Backbone.Marionette.LayoutView.extend(
+ /** @lends TagDetailLayoutView */
+ {
+ _viewName: 'TagDetailLayoutView',
+
+ template: TagDetailLayoutView_tmpl,
+
+ /** Layout sub regions */
+ regions: {
+ RSearchResultLayoutView: "#r_searchResultLayoutView",
+ RTagAttributeDetailLayoutView: "#r_TagAttributeDetailLayoutView"
+ },
+
+ /** ui selector cache */
+ ui: {},
+ /** ui events hash */
+ events: function() {},
+ /**
+ * intialize a new TagDetailLayoutView Layout
+ * @constructs
+ */
+ initialize: function(options) {
+ _.extend(this, _.pick(options, 'globalVent', 'guid', 'tag'));
+ },
+ bindEvents: function() {},
+ onRender: function() {
+ this.renderSearchResultLayoutView();
+ this.renderTagAttributeCompositeView();
+ },
+ renderSearchResultLayoutView: function() {
+ var that = this;
+ require(['views/search/SearchResultLayoutView'], function(SearchResultLayoutView) {
+ var value = {
+ 'query': that.tag,
+ 'type': 'fulltext'
+ };
+ that.RSearchResultLayoutView.show(new SearchResultLayoutView({
+ value: value,
+ tag: that.tag
+ }));
+ });
+ },
+ renderTagAttributeCompositeView: function() {
+ var that = this;
+ require(['views/tag/TagAttributeDetailLayoutView'], function(TagAttributeDetailLayoutView) {
+ that.RTagAttributeDetailLayoutView.show(new TagAttributeDetailLayoutView({
+ tag: that.tag
+ }));
+ });
+ },
+
+
+ });
+ return TagDetailLayoutView;
+});
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/440bd2ae/dashboardv2/public/js/views/tag/TagDetailTableLayoutView.js
----------------------------------------------------------------------
diff --git a/dashboardv2/public/js/views/tag/TagDetailTableLayoutView.js b/dashboardv2/public/js/views/tag/TagDetailTableLayoutView.js
index 76bf842..791d70b 100644
--- a/dashboardv2/public/js/views/tag/TagDetailTableLayoutView.js
+++ b/dashboardv2/public/js/views/tag/TagDetailTableLayoutView.js
@@ -80,7 +80,8 @@ define(['require',
var stringArr = [];
tagValue = "";
_.each(keyValue.values, function(val, key) {
- var attrName = "<span>" + key + " : " + val + "</span>";
+
+ var attrName = "<span>" + key + ":" + val + "</span>";
stringArr.push(attrName);
});
tagValue += stringArr.join(", ");
@@ -93,12 +94,15 @@ define(['require',
},
addModalView: function(e) {
var that = this;
- require(['views/tag/addTagModalView'], function(addTagModalView) {
- var view = new addTagModalView({
+ require(['views/tag/addTagModalView'], function(AddTagModalView) {
+ var view = new AddTagModalView({
vent: that.vent,
guid: that.guid,
modalCollection: that.collection
});
+ // view.saveTagData = function() {
+ //override saveTagData function
+ // }
});
},
deleteTagDataModal: function(e) {