Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
atlas
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
dataplatform
atlas
Commits
596b74b0
Commit
596b74b0
authored
Oct 14, 2019
by
Sarath Subramanian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ATLAS-3462: Redundant patch file in github repo
parent
289c87a6
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
0 additions
and
1401 deletions
+0
-1401
ATLAS-3439-1.patch
ATLAS-3439-1.patch
+0
-1401
No files found.
ATLAS-3439-1.patch
deleted
100644 → 0
View file @
289c87a6
From 8e806aae327b3179a26e6627fd42c80f6ec615f4 Mon Sep 17 00:00:00 2001
From: sameer79 <findsameershaikh@yahoo.co.in>
Date: Wed, 9 Oct 2019 17:35:12 +0530
Subject: [PATCH] ATLAS-3439: Add User-defined properties in entity details
page.
---
dashboardv2/public/css/scss/common.scss | 47 +++++-
dashboardv2/public/css/scss/override.scss | 3 +-
dashboardv2/public/css/scss/panel.scss | 35 +++-
.../detail_page/DetailPageLayoutView_tmpl.html | 15 +-
.../entity/EntityDetailTableLayoutView_tmpl.html | 44 +++--
.../entity/EntityUserDefineItemView_tmpl.html | 45 +++++
.../entity/EntityUserDefineView_tmpl.html | 65 ++++++++
.../templates/search/AdvancedSearchInfo_tmpl.html | 2 +-
.../js/views/detail_page/DetailPageLayoutView.js | 12 +-
.../js/views/entity/EntityDetailTableLayoutView.js | 2 +-
.../js/views/entity/EntityUserDefineItemView.js | 98 +++++++++++
.../public/js/views/entity/EntityUserDefineView.js | 184 +++++++++++++++++++++
dashboardv3/public/css/scss/common.scss | 43 +++++
dashboardv3/public/css/scss/panel.scss | 35 +++-
dashboardv3/public/css/scss/table.scss | 1 +
.../detail_page/DetailPageLayoutView_tmpl.html | 15 +-
.../entity/EntityDetailTableLayoutView_tmpl.html | 44 +++--
.../entity/EntityUserDefineItemView_tmpl.html | 45 +++++
.../entity/EntityUserDefineView_tmpl.html | 65 ++++++++
.../js/views/detail_page/DetailPageLayoutView.js | 12 +-
.../js/views/entity/EntityDetailTableLayoutView.js | 2 +-
.../js/views/entity/EntityUserDefineItemView.js | 98 +++++++++++
.../public/js/views/entity/EntityUserDefineView.js | 184 +++++++++++++++++++++
23 files changed, 1042 insertions(+), 54 deletions(-)
create mode 100644 dashboardv2/public/js/templates/entity/EntityUserDefineItemView_tmpl.html
create mode 100644 dashboardv2/public/js/templates/entity/EntityUserDefineView_tmpl.html
create mode 100644 dashboardv2/public/js/views/entity/EntityUserDefineItemView.js
create mode 100644 dashboardv2/public/js/views/entity/EntityUserDefineView.js
create mode 100644 dashboardv3/public/js/templates/entity/EntityUserDefineItemView_tmpl.html
create mode 100644 dashboardv3/public/js/templates/entity/EntityUserDefineView_tmpl.html
create mode 100644 dashboardv3/public/js/views/entity/EntityUserDefineItemView.js
create mode 100644 dashboardv3/public/js/views/entity/EntityUserDefineView.js
diff --git a/dashboardv2/public/css/scss/common.scss b/dashboardv2/public/css/scss/common.scss
index d42e5a9..b24c3c3 100644
--- a/dashboardv2/public/css/scss/common.scss
+++ b/dashboardv2/public/css/scss/common.scss
@@ -15,7 +15,7 @@
// limitations under the License.
-/* common.scss */
+/* common.scss */
.readOnly {
@@ -201,4 +201,47 @@ pre {
.panel-default>.panel-heading {
cursor: pointer;
}
-}
\ No newline at end of file
+}
+
+.custom-table {
+ width: 100%;
+
+ .custom-tr {
+ margin-left: 15px;
+ margin-right: 15px;
+
+ .custom-col-0,
+ .custom-col-1,
+ .custom-col-2 {
+ vertical-align: top;
+ display: inline-block;
+
+ textarea {
+ resize: vertical;
+ height: 34px;
+ min-height: 34px;
+ max-height: 70px;
+ }
+ }
+
+
+ .custom-col-0{
+ text-align: center;
+ vertical-align: middle;
+ width: 2%;
+ }
+
+ .custom-col-1{
+ width: 43%;
+ }
+
+ .custom-col-2{
+ text-align: center;
+ width: 10%;
+ }
+ }
+}
+
+.errorMsg {
+ color: $red;
+}
diff --git a/dashboardv2/public/css/scss/override.scss b/dashboardv2/public/css/scss/override.scss
index c8a1d89..c95ee58 100644
--- a/dashboardv2/public/css/scss/override.scss
+++ b/dashboardv2/public/css/scss/override.scss
@@ -128,6 +128,7 @@ td {
pre.scroll-y {
max-height: 200px;
overflow-y: auto;
+ word-break: break-word;
}
}
@@ -469,4 +470,4 @@ div.columnmanager-dropdown-container {
.w30 {
width: 30% !important;
-}
\ No newline at end of file
+}
diff --git a/dashboardv2/public/css/scss/panel.scss b/dashboardv2/public/css/scss/panel.scss
index c1ac042..52b3dbe 100644
--- a/dashboardv2/public/css/scss/panel.scss
+++ b/dashboardv2/public/css/scss/panel.scss
@@ -118,4 +118,37 @@
}
}
}
-}
\ No newline at end of file
+}
+
+.panel-default.custom-panel>.panel-heading {
+ color: $black;
+ cursor: pointer;
+ border-bottom: none;
+ display: inline-block;
+
+ .panel-title {
+ font-weight: normal;
+ a:hover {
+ color: $black;
+ opacity: 0.7;
+ }
+ }
+ .btn-group {
+ margin-top: 3px;
+ }
+}
+
+.panel-default.custom-panel>.panel-actions {
+ float: right;
+ margin-top: 15px;
+ button {
+ margin-right: 10px;
+ }
+}
+
+.panel-default.custom-panel>.panel-collapse>.panel-body {
+ border-top: none;
+}
+.panel-default.custom-panel>.panel-heading > .btn-group > button {
+ color: $black;
+}
diff --git a/dashboardv2/public/js/templates/detail_page/DetailPageLayoutView_tmpl.html b/dashboardv2/public/js/templates/detail_page/DetailPageLayoutView_tmpl.html
index c395799..d35debc 100644
--- a/dashboardv2/public/js/templates/detail_page/DetailPageLayoutView_tmpl.html
+++ b/dashboardv2/public/js/templates/detail_page/DetailPageLayoutView_tmpl.html
@@ -65,9 +65,16 @@
<div>
<div class="tab-content">
<div id="tab-details" role="properties" class="tab-pane active animated fadeIn">
- <div id="r_entityDetailTableLayoutView">
- <div class="fontLoader-relative">
- <i class="fa fa-refresh fa-spin-custom"></i>
+ <div class="row">
+ <div class="col-md-6">
+ <div id="r_entityDetailTableLayoutView">
+ <div class="fontLoader-relative">
+ <i class="fa fa-refresh fa-spin-custom"></i>
+ </div>
+ </div>
+ </div>
+ <div class="col-md-6">
+ <div id="r_entityUserDefineView"></div>
</div>
</div>
</div>
@@ -122,4 +129,4 @@
</div>
</div>
</div>
-</div>
\ No newline at end of file
+</div>
diff --git a/dashboardv2/public/js/templates/entity/EntityDetailTableLayoutView_tmpl.html b/dashboardv2/public/js/templates/entity/EntityDetailTableLayoutView_tmpl.html
index 1c01077..18a9435 100644
--- a/dashboardv2/public/js/templates/entity/EntityDetailTableLayoutView_tmpl.html
+++ b/dashboardv2/public/js/templates/entity/EntityDetailTableLayoutView_tmpl.html
@@ -14,23 +14,33 @@
* See the License for the specific language governing permissions and
* limitations under the License.
-->
-<div class="entity-detail-table">
- <div class="entity-detail-table-toggle">
- <div class="pretty p-switch p-fill">
- <input type="checkbox" data-id="noValueToggle" />
- <div class="state p-primary">
- <label>Show Empty Values</label>
+<div class="panel-group" id="accordion">
+ <div class="panel panel-default custom-panel expand_collapse_panel-icon" data-id="entity">
+ <div class="panel-heading" data-toggle="collapse" href="#collapse1" aria-expanded="true" style="width: 58%">
+ <h4 class="panel-title">
+ <a>Technical properties </a>
+ </h4>
+ <div class="btn-group pull-left">
+ <button type="button" title="Collapse"><i class="ec-icon fa"></i></button>
+ </div>
+ </div>
+ <div class="panel-actions">
+ <div class="pretty p-switch p-fill">
+ <input type="checkbox" data-id="noValueToggle" />
+ <div class="state p-primary">
+ <label>Show Empty Values</label>
+ </div>
+ </div>
+ </div>
+ <div id="collapse1" class="panel-collapse collapse in">
+ <div class="panel-body">
+ <div class="entity-detail-table">
+ <table class="table">
+ <tbody data-id="detailValue" class="hide-empty-value">
+ </tbody>
+ </table>
+ </div>
</div>
</div>
</div>
- <table class="table table-quickMenu">
- <thead>
- <tr>
- <th>Key</th>
- <th>Value</th>
- </tr>
- </thead>
- <tbody data-id="detailValue" class="hide-empty-value">
- </tbody>
- </table>
-</div>
\ No newline at end of file
+</div>
diff --git a/dashboardv2/public/js/templates/entity/EntityUserDefineItemView_tmpl.html b/dashboardv2/public/js/templates/entity/EntityUserDefineItemView_tmpl.html
new file mode 100644
index 0000000..a06039f
--- /dev/null
+++ b/dashboardv2/public/js/templates/entity/EntityUserDefineItemView_tmpl.html
@@ -0,0 +1,45 @@
+<!--
+ * 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 data-id="userDefineItems">
+ <table class="custom-table">
+ {{#each items}}
+ <tr class="custom-tr">
+ <td class="custom-col-1">
+ <input placeholder="key" type="text" data-type="key" data-index={{@index}} class="form-control" value={{key}}></input>
+ <p class="errorMsg"></p>
+ </td >
+ <td class="custom-col-0"> : </td >
+ <td class="custom-col-1">
+ <textarea placeholder="value" data-type="value" data-index={{@index}} class="form-control" class="form-control">{{value}}</textarea>
+ <p class="errorMsg"></p>
+ </td >
+ <td class="custom-col-2">
+ <button class="btn btn-default btn-sm" title="" data-index={{@index}} data-id="deleteItem">
+ <i class="fa fa-minus"> </i>
+ </button>
+ <button class="btn btn-default btn-sm" title="" data-index={{@index}} data-id="addItem">
+ <i class="fa fa-plus"> </i>
+ </button>
+ </td >
+ </tr>
+ {{/each}}
+ {{#ifCond items.length "===" 0}}
+ No properties have been created yet. To add a property, click <a href="javascript:void(0)" data-id="addItem">here</a>
+ {{/ifCond}}
+ </table>
+</div>
diff --git a/dashboardv2/public/js/templates/entity/EntityUserDefineView_tmpl.html b/dashboardv2/public/js/templates/entity/EntityUserDefineView_tmpl.html
new file mode 100644
index 0000000..e3f4791
--- /dev/null
+++ b/dashboardv2/public/js/templates/entity/EntityUserDefineView_tmpl.html
@@ -0,0 +1,65 @@
+<!--
+ * 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-group" id="accordion">
+ <div class="panel panel-default custom-panel expand_collapse_panel-icon" data-id="userDefine">
+ <div class="panel-heading" data-toggle="collapse" href="#collapse2" aria-expanded="true" {{#ifCond customAttibutes.length ">" 0}} style="width: 60%" {{else}} style="width: 100%" {{/ifCond}}>
+ <h4 class="panel-title">
+ <a>User-defined properties </a>
+ </h4>
+ <div class="btn-group pull-left">
+ <button type="button" title="Collapse"><i class="ec-icon fa"></i></button>
+ </div>
+ </div>
+ {{#ifCond customAttibutes.length ">" 0}}
+ <div class="panel-actions">
+ {{#ifCond readOnlyEntity "===" false}}
+ <button class="btn btn-action btn-sm" data-id="editAttr" data-original-title="Edit User-Defined Attributes">Edit</button>
+ {{/ifCond}}
+ </div>
+ {{/ifCond}}
+ <div id="collapse2" class="panel-collapse collapse in">
+ <div class="panel-body">
+ <div class="row">
+ <div class="col-md-12">
+ <div class="entity-detail-table">
+ <table class="table">
+ {{#ifCond customAttibutes.length "===" 0}}
+ <span>No properties have been created yet.
+ {{#ifCond readOnlyEntity "==" false}}
+ <span>To add a property, click <a href="javascript:void(0)" data-id="editAttr">here</a></span>
+ {{/ifCond}}
+ </span>
+ {{/ifCond}}
+ <tbody>
+ {{#each customAttibutes}}
+ <tr>
+ <td>
+ <div class="scroll-y">{{key}}</div> </div></td>
+ <td>
+ <div class="scroll-y">{{value}}</div>
+ </td>
+ </tr>
+ {{/each}}
+ </tbody>
+ </table>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/dashboardv2/public/js/templates/search/AdvancedSearchInfo_tmpl.html b/dashboardv2/public/js/templates/search/AdvancedSearchInfo_tmpl.html
index 64f1a31..7746974 100644
--- a/dashboardv2/public/js/templates/search/AdvancedSearchInfo_tmpl.html
+++ b/dashboardv2/public/js/templates/search/AdvancedSearchInfo_tmpl.html
@@ -31,6 +31,6 @@
</li>
</ul>
<h5 style="padding-left: 22.5px;">
- <a href="http://atlas.apache.org/#/SearchAdvance" target="_blank"><i class="fa fa-info-circle" aria-hidden="true"></i> More sample queries and use-cases</a>
+ <a href="http://atlas.apache.org/Search-Advanced.html" target="_blank"><i class="fa fa-info-circle" aria-hidden="true"></i> More sample queries and use-cases</a>
</h5>
</div>
\ No newline at end of file
diff --git a/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js b/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
index 5fe5a9e..4f48693 100644
--- a/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
+++ b/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
@@ -45,7 +45,8 @@ define(['require',
RAuditTableLayoutView: "#r_auditTableLayoutView",
RReplicationAuditTableLayoutView: "#r_replicationAuditTableLayoutView",
RProfileLayoutView: "#r_profileLayoutView",
- RRelationshipLayoutView: "#r_relationshipLayoutView"
+ RRelationshipLayoutView: "#r_relationshipLayoutView",
+ REntityUserDefineView: "#r_entityUserDefineView",
},
/** ui selector cache */
ui: {
@@ -243,6 +244,7 @@ define(['require',
})()
}
this.renderEntityDetailTableLayoutView(obj);
+ this.renderEntityUserDefineView(obj);
this.renderRelationshipLayoutView(obj);
this.renderAuditTableLayoutView(obj);
this.renderTagTableLayoutView(obj);
@@ -484,6 +486,12 @@ define(['require',
that.REntityDetailTableLayoutView.show(new EntityDetailTableLayoutView(obj));
});
},
+ renderEntityUserDefineView: function(obj) {
+ var that = this;
+ require(['views/entity/EntityUserDefineView'], function(EntityUserDefineView) {
+ that.REntityUserDefineView.show(new EntityUserDefineView(obj));
+ });
+ },
renderTagTableLayoutView: function(obj) {
var that = this;
require(['views/tag/TagDetailTableLayoutView'], function(TagDetailTableLayoutView) {
@@ -545,4 +553,4 @@ define(['require',
}
});
return DetailPageLayoutView;
-});
\ No newline at end of file
+});
diff --git a/dashboardv2/public/js/views/entity/EntityDetailTableLayoutView.js b/dashboardv2/public/js/views/entity/EntityDetailTableLayoutView.js
index 381d99e..6572292 100644
--- a/dashboardv2/public/js/views/entity/EntityDetailTableLayoutView.js
+++ b/dashboardv2/public/js/views/entity/EntityDetailTableLayoutView.js
@@ -83,4 +83,4 @@ define(['require',
}
});
return EntityDetailTableLayoutView;
-});
\ No newline at end of file
+});
diff --git a/dashboardv2/public/js/views/entity/EntityUserDefineItemView.js b/dashboardv2/public/js/views/entity/EntityUserDefineItemView.js
new file mode 100644
index 0000000..a649ca8
--- /dev/null
+++ b/dashboardv2/public/js/views/entity/EntityUserDefineItemView.js
@@ -0,0 +1,98 @@
+/*
+ * 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/entity/EntityUserDefineItemView_tmpl'
+
+], function(require, Backbone, EntityUserDefineItemView_tmpl) {
+ 'use strict';
+
+ return Backbone.Marionette.ItemView.extend({
+ _viewName: 'EntityUserDefineItemView',
+
+ template: EntityUserDefineItemView_tmpl,
+
+ templateHelpers: function() {
+ return {
+ items: this.items
+ };
+ },
+
+ /** Layout sub regions */
+ regions: {},
+
+ /** ui selector cache */
+ ui: {
+ itemKey: "[data-type='key']",
+ itemValue: "[data-type='value']",
+ addItem: "[data-id='addItem']",
+ deleteItem: "[data-id='deleteItem']"
+ },
+ /** ui events hash */
+ events: function() {
+ var events = {};
+ events['input ' + this.ui.itemKey] = 'onItemKeyChange';
+ events['input ' + this.ui.itemValue] = 'onItemValueChange';
+ events['click ' + this.ui.addItem] = 'onAddItemClick';
+ events['click ' + this.ui.deleteItem] = 'onDeleteItemClick';
+ return events;
+ },
+
+ /**
+ * intialize a new GlobalExclusionComponentView Layout
+ * @constructs
+ */
+ initialize: function(options) {
+ var that = this;
+ this.editMode = options.mode;
+ if (options.items.length === 0) {
+ this.items = [{ key: "", value: "", mode: this.editMode}];
+
+ } else {
+ this.items = options.items.map(function(m) {
+ m.mode = that.editMode;
+ return m;
+ });
+ }
+ },
+ onRender: function() {
+
+ },
+ onAddItemClick: function(e) {
+ var el = e.currentTarget;
+ this.items.splice(parseInt(el.dataset.index) + 1, 0, { key: "", value: "", mode: this.editMode});
+ this.render();
+ },
+ onDeleteItemClick: function(e) {
+ var el = e.currentTarget;
+ this.items.splice(el.dataset.index, 1);
+ this.render();
+ },
+ onItemKeyChange: function (e) {
+ var el = e.currentTarget;
+ var val = el.value;
+ this.items[ el.dataset.index].key = val;
+ },
+ onItemValueChange: function (e) {
+ var el = e.currentTarget;
+ var val = el.value;
+ this.items[ el.dataset.index].value = el.value;
+ }
+ });
+
+});
diff --git a/dashboardv2/public/js/views/entity/EntityUserDefineView.js b/dashboardv2/public/js/views/entity/EntityUserDefineView.js
new file mode 100644
index 0000000..4fc2f02
--- /dev/null
+++ b/dashboardv2/public/js/views/entity/EntityUserDefineView.js
@@ -0,0 +1,184 @@
+/**
+ * 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/entity/EntityUserDefineView_tmpl',
+'views/entity/EntityUserDefineItemView',
+'utils/CommonViewFunction',
+'modules/Modal',
+'models/VEntity',
+'utils/Utils',
+'utils/Enums'
+], function(require, Backbone, EntityUserDefineView_tmpl, EntityUserDefineItemView, CommonViewFunction, Modal, VEntity, Utils, Enums) {
+'use strict';
+
+ return Backbone.Marionette.LayoutView.extend({
+ _viewName: 'EntityUserDefineView',
+ template: EntityUserDefineView_tmpl,
+ templateHelpers: function() {
+ return {
+ customAttibutes: this.customAttibutes,
+ readOnlyEntity : this.readOnlyEntity
+ };
+ },
+ ui: {
+ addAttr: "[data-id='addAttr']",
+ editAttr: "[data-id='editAttr']",
+ deleteAttr: "[data-id='deleteAttr']"
+ },
+ events: function() {
+ var events = {};
+ events["click " + this.ui.editAttr] = 'onEditAttrClick';
+ return events;
+ },
+ initialize: function(options) {
+ _.extend(this, _.pick(options, 'entity'));
+ this.userDefineAttr = this.entity.customAttributes || [];
+ this.editMode = false;
+ this.readOnlyEntity = Enums.entityStateReadOnly[this.entity.status];
+ this.entityModel = new VEntity(this.entity);
+ this.generateTableFields();
+ },
+ onRender: function() {
+ },
+ bindEvents: {},
+ customAtributesFunc: function() {
+
+ },
+ generateTableFields: function() {
+ var that = this;
+ this.customAttibutes = [];
+ _.each(Object.keys(that.userDefineAttr), function(key, i) {
+ that.customAttibutes.push({
+ key: key,
+ value: that.userDefineAttr[key]
+ });
+ });
+ },
+ onEditAttrClick: function (e) {
+ this.editMode = true;
+ var options = {items: this.customAttibutes, mode: true};
+ var view = new EntityUserDefineItemView(options);
+ var modalObj = {
+ title: 'User-Defined Attributes',
+ content: view,
+ okText: 'Save',
+ okCloses: false,
+ cancelText: "Cancel",
+ mainClass: 'modal-lg',
+ allowCancel: true,
+ };
+ this.setAttributeModal(modalObj);
+ },
+ structureAttributes: function (list) {
+ var obj={}
+ list.map(function (o) {
+ obj[o.key] = o.value;
+ });
+ return obj;
+ },
+ saveAttributes: function (list) {
+ var that = this;
+ var entityJson = that.entityModel.toJSON();
+ var properties = that.structureAttributes(list);
+ entityJson.customAttributes = properties;
+ var payload = {entity: entityJson};
+ that.entityModel.createOreditEntity({
+ data: JSON.stringify(payload),
+ type: 'POST',
+ success: function() {
+ var msg = "User-defined attribute(s) updated successfully";
+ that.customAttibutes = list;
+ Utils.notifySuccess({
+ content: msg
+ });
+ that.modal && that.modal.trigger('cancel');
+ that.render();
+ },
+ error: function (e) {
+ that.editMode = false;
+ Utils.notifySuccess({
+ content: e.message
+ });
+ that.modal && that.modal.$el.find('button.ok').attr("disabled", false);
+ },
+ complete: function () {
+ that.modal && that.modal.$el.find('button.ok').attr("disabled", false);
+ that.editMode = false;
+ }
+ });
+ },
+ setAttributeModal: function(modalObj) {
+ var self = this;
+ this.modal = new Modal(modalObj);
+ this.modal.open();
+ this. modal.on('ok', function() {
+ self.modal.$el.find('button.ok').attr("disabled", true);
+ var list = self.modal.$el.find("[data-type]"),
+ keyMap = new Map(),
+ validation = true,
+ hasDup = [],
+ dataList = [];
+ Array.prototype.push.apply(dataList, self.modal.options.content.items);
+ for(var i = 0; i < list.length ; i++) {
+ var input = list[i],
+ type = input.dataset.type,
+ pEl = self.modal.$el.find(input.parentElement).find('p'),
+ classes = 'form-control',
+ val = input.value.trim();
+ pEl[0].innerText = "";
+
+ if (val === '') {
+ classes = 'form-control errorClass';
+ validation = false;
+ pEl[0].innerText = 'Required!';
+ } else {
+ if (input.tagName === 'INPUT') {
+ var duplicates = dataList.filter(function(c) {
+ return c.key === val;
+ });
+ if (keyMap.has(val) || duplicates.length > 1 ) {
+ classes = 'form-control errorClass';
+ hasDup.push('duplicate');
+ pEl[0].innerText = 'Duplicate key';
+ } else {
+ keyMap.set(val, val);
+ }
+ }
+ }
+ input.setAttribute('class', classes);
+ }
+
+ if (validation && hasDup.length === 0) {
+ self.saveAttributes(self.modal.options.content.items);
+ } else {
+ self.modal.$el.find('button.ok').attr("disabled", false);
+ }
+ });
+ this.modal.on('closeModal', function() {
+ self.editMode = false;
+ self.modal.trigger('cancel');
+ });
+ },
+ enableModalButton: function () {
+ var self = this;
+ self.modal.$el.find('button.ok').attr("disabled", false);
+ }
+ });
+});
diff --git a/dashboardv3/public/css/scss/common.scss b/dashboardv3/public/css/scss/common.scss
index 26bf82a..dfe0e4f 100644
--- a/dashboardv3/public/css/scss/common.scss
+++ b/dashboardv3/public/css/scss/common.scss
@@ -201,3 +201,46 @@ pre {
bottom: 0;
background: white;
}
+
+.custom-table {
+ width: 100%;
+
+ .custom-tr {
+ margin-left: 15px;
+ margin-right: 15px;
+
+ .custom-col-0,
+ .custom-col-1,
+ .custom-col-2 {
+ vertical-align: top;
+ display: inline-block;
+
+ textarea {
+ resize: vertical;
+ height: 34px;
+ min-height: 34px;
+ max-height: 70px;
+ }
+ }
+
+
+ .custom-col-0{
+ text-align: center;
+ vertical-align: middle;
+ width: 2%;
+ }
+
+ .custom-col-1{
+ width: 43%;
+ }
+
+ .custom-col-2{
+ text-align: center;
+ width: 10%;
+ }
+ }
+}
+
+.errorMsg {
+ color: $red;
+}
diff --git a/dashboardv3/public/css/scss/panel.scss b/dashboardv3/public/css/scss/panel.scss
index dfa0872..b06e63c 100644
--- a/dashboardv3/public/css/scss/panel.scss
+++ b/dashboardv3/public/css/scss/panel.scss
@@ -134,4 +134,37 @@
}
}
}
-}
\ No newline at end of file
+}
+
+.panel-default.custom-panel>.panel-heading {
+ color: $black;
+ cursor: pointer;
+ border-bottom: none;
+ display: inline-block;
+
+ .panel-title {
+ font-weight: normal;
+ a:hover {
+ color: $black;
+ opacity: 0.7;
+ }
+ }
+ .btn-group {
+ margin-top: 3px;
+ }
+}
+
+.panel-default.custom-panel>.panel-actions {
+ float: right;
+ margin-top: 15px;
+ button {
+ margin-right: 10px;
+ }
+}
+
+.panel-default.custom-panel>.panel-collapse>.panel-body {
+ border-top: none;
+}
+.panel-default.custom-panel>.panel-heading > .btn-group > button {
+ color: $black;
+}
diff --git a/dashboardv3/public/css/scss/table.scss b/dashboardv3/public/css/scss/table.scss
index 0f8ca75..06fb29b 100644
--- a/dashboardv3/public/css/scss/table.scss
+++ b/dashboardv3/public/css/scss/table.scss
@@ -212,6 +212,7 @@ td {
pre.scroll-y {
max-height: 200px;
overflow-y: auto;
+ word-break: break-word;
}
&.searchTableName {
diff --git a/dashboardv3/public/js/templates/detail_page/DetailPageLayoutView_tmpl.html b/dashboardv3/public/js/templates/detail_page/DetailPageLayoutView_tmpl.html
index 6519863..9c7cb81 100644
--- a/dashboardv3/public/js/templates/detail_page/DetailPageLayoutView_tmpl.html
+++ b/dashboardv3/public/js/templates/detail_page/DetailPageLayoutView_tmpl.html
@@ -68,9 +68,16 @@
<div>
<div class="tab-content">
<div id="tab-details" role="properties" class="tab-pane active animated fadeIn">
- <div id="r_entityDetailTableLayoutView">
- <div class="fontLoader-relative">
- <i class="fa fa-refresh fa-spin-custom"></i>
+ <div class="row">
+ <div class="col-md-6">
+ <div id="r_entityDetailTableLayoutView">
+ <div class="fontLoader-relative">
+ <i class="fa fa-refresh fa-spin-custom"></i>
+ </div>
+ </div>
+ </div>
+ <div class="col-md-6">
+ <div id="r_entityUserDefineView"></div>
</div>
</div>
</div>
@@ -125,4 +132,4 @@
</div>
</div>
</div>
-</div>
\ No newline at end of file
+</div>
diff --git a/dashboardv3/public/js/templates/entity/EntityDetailTableLayoutView_tmpl.html b/dashboardv3/public/js/templates/entity/EntityDetailTableLayoutView_tmpl.html
index 1c01077..18a9435 100644
--- a/dashboardv3/public/js/templates/entity/EntityDetailTableLayoutView_tmpl.html
+++ b/dashboardv3/public/js/templates/entity/EntityDetailTableLayoutView_tmpl.html
@@ -14,23 +14,33 @@
* See the License for the specific language governing permissions and
* limitations under the License.
-->
-<div class="entity-detail-table">
- <div class="entity-detail-table-toggle">
- <div class="pretty p-switch p-fill">
- <input type="checkbox" data-id="noValueToggle" />
- <div class="state p-primary">
- <label>Show Empty Values</label>
+<div class="panel-group" id="accordion">
+ <div class="panel panel-default custom-panel expand_collapse_panel-icon" data-id="entity">
+ <div class="panel-heading" data-toggle="collapse" href="#collapse1" aria-expanded="true" style="width: 58%">
+ <h4 class="panel-title">
+ <a>Technical properties </a>
+ </h4>
+ <div class="btn-group pull-left">
+ <button type="button" title="Collapse"><i class="ec-icon fa"></i></button>
+ </div>
+ </div>
+ <div class="panel-actions">
+ <div class="pretty p-switch p-fill">
+ <input type="checkbox" data-id="noValueToggle" />
+ <div class="state p-primary">
+ <label>Show Empty Values</label>
+ </div>
+ </div>
+ </div>
+ <div id="collapse1" class="panel-collapse collapse in">
+ <div class="panel-body">
+ <div class="entity-detail-table">
+ <table class="table">
+ <tbody data-id="detailValue" class="hide-empty-value">
+ </tbody>
+ </table>
+ </div>
</div>
</div>
</div>
- <table class="table table-quickMenu">
- <thead>
- <tr>
- <th>Key</th>
- <th>Value</th>
- </tr>
- </thead>
- <tbody data-id="detailValue" class="hide-empty-value">
- </tbody>
- </table>
-</div>
\ No newline at end of file
+</div>
diff --git a/dashboardv3/public/js/templates/entity/EntityUserDefineItemView_tmpl.html b/dashboardv3/public/js/templates/entity/EntityUserDefineItemView_tmpl.html
new file mode 100644
index 0000000..a06039f
--- /dev/null
+++ b/dashboardv3/public/js/templates/entity/EntityUserDefineItemView_tmpl.html
@@ -0,0 +1,45 @@
+<!--
+ * 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 data-id="userDefineItems">
+ <table class="custom-table">
+ {{#each items}}
+ <tr class="custom-tr">
+ <td class="custom-col-1">
+ <input placeholder="key" type="text" data-type="key" data-index={{@index}} class="form-control" value={{key}}></input>
+ <p class="errorMsg"></p>
+ </td >
+ <td class="custom-col-0"> : </td >
+ <td class="custom-col-1">
+ <textarea placeholder="value" data-type="value" data-index={{@index}} class="form-control" class="form-control">{{value}}</textarea>
+ <p class="errorMsg"></p>
+ </td >
+ <td class="custom-col-2">
+ <button class="btn btn-default btn-sm" title="" data-index={{@index}} data-id="deleteItem">
+ <i class="fa fa-minus"> </i>
+ </button>
+ <button class="btn btn-default btn-sm" title="" data-index={{@index}} data-id="addItem">
+ <i class="fa fa-plus"> </i>
+ </button>
+ </td >
+ </tr>
+ {{/each}}
+ {{#ifCond items.length "===" 0}}
+ No properties have been created yet. To add a property, click <a href="javascript:void(0)" data-id="addItem">here</a>
+ {{/ifCond}}
+ </table>
+</div>
diff --git a/dashboardv3/public/js/templates/entity/EntityUserDefineView_tmpl.html b/dashboardv3/public/js/templates/entity/EntityUserDefineView_tmpl.html
new file mode 100644
index 0000000..e3f4791
--- /dev/null
+++ b/dashboardv3/public/js/templates/entity/EntityUserDefineView_tmpl.html
@@ -0,0 +1,65 @@
+<!--
+ * 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-group" id="accordion">
+ <div class="panel panel-default custom-panel expand_collapse_panel-icon" data-id="userDefine">
+ <div class="panel-heading" data-toggle="collapse" href="#collapse2" aria-expanded="true" {{#ifCond customAttibutes.length ">" 0}} style="width: 60%" {{else}} style="width: 100%" {{/ifCond}}>
+ <h4 class="panel-title">
+ <a>User-defined properties </a>
+ </h4>
+ <div class="btn-group pull-left">
+ <button type="button" title="Collapse"><i class="ec-icon fa"></i></button>
+ </div>
+ </div>
+ {{#ifCond customAttibutes.length ">" 0}}
+ <div class="panel-actions">
+ {{#ifCond readOnlyEntity "===" false}}
+ <button class="btn btn-action btn-sm" data-id="editAttr" data-original-title="Edit User-Defined Attributes">Edit</button>
+ {{/ifCond}}
+ </div>
+ {{/ifCond}}
+ <div id="collapse2" class="panel-collapse collapse in">
+ <div class="panel-body">
+ <div class="row">
+ <div class="col-md-12">
+ <div class="entity-detail-table">
+ <table class="table">
+ {{#ifCond customAttibutes.length "===" 0}}
+ <span>No properties have been created yet.
+ {{#ifCond readOnlyEntity "==" false}}
+ <span>To add a property, click <a href="javascript:void(0)" data-id="editAttr">here</a></span>
+ {{/ifCond}}
+ </span>
+ {{/ifCond}}
+ <tbody>
+ {{#each customAttibutes}}
+ <tr>
+ <td>
+ <div class="scroll-y">{{key}}</div> </div></td>
+ <td>
+ <div class="scroll-y">{{value}}</div>
+ </td>
+ </tr>
+ {{/each}}
+ </tbody>
+ </table>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/dashboardv3/public/js/views/detail_page/DetailPageLayoutView.js b/dashboardv3/public/js/views/detail_page/DetailPageLayoutView.js
index 682feb3..e1ab970 100644
--- a/dashboardv3/public/js/views/detail_page/DetailPageLayoutView.js
+++ b/dashboardv3/public/js/views/detail_page/DetailPageLayoutView.js
@@ -45,7 +45,8 @@ define(['require',
RAuditTableLayoutView: "#r_auditTableLayoutView",
RReplicationAuditTableLayoutView: "#r_replicationAuditTableLayoutView",
RProfileLayoutView: "#r_profileLayoutView",
- RRelationshipLayoutView: "#r_relationshipLayoutView"
+ RRelationshipLayoutView: "#r_relationshipLayoutView",
+ REntityUserDefineView: "#r_entityUserDefineView",
},
/** ui selector cache */
ui: {
@@ -249,6 +250,7 @@ define(['require',
})()
}
this.renderEntityDetailTableLayoutView(obj);
+ this.renderEntityUserDefineView(obj);
this.renderRelationshipLayoutView(obj);
this.renderAuditTableLayoutView(obj);
this.renderTagTableLayoutView(obj);
@@ -496,6 +498,12 @@ define(['require',
that.REntityDetailTableLayoutView.show(new EntityDetailTableLayoutView(obj));
});
},
+ renderEntityUserDefineView: function(obj) {
+ var that = this;
+ require(['views/entity/EntityUserDefineView'], function(EntityUserDefineView) {
+ that.REntityUserDefineView.show(new EntityUserDefineView(obj));
+ });
+ },
renderTagTableLayoutView: function(obj) {
var that = this;
require(['views/tag/TagDetailTableLayoutView'], function(TagDetailTableLayoutView) {
@@ -558,4 +566,4 @@ define(['require',
}
});
return DetailPageLayoutView;
-});
\ No newline at end of file
+});
diff --git a/dashboardv3/public/js/views/entity/EntityDetailTableLayoutView.js b/dashboardv3/public/js/views/entity/EntityDetailTableLayoutView.js
index 381d99e..6572292 100644
--- a/dashboardv3/public/js/views/entity/EntityDetailTableLayoutView.js
+++ b/dashboardv3/public/js/views/entity/EntityDetailTableLayoutView.js
@@ -83,4 +83,4 @@ define(['require',
}
});
return EntityDetailTableLayoutView;
-});
\ No newline at end of file
+});
diff --git a/dashboardv3/public/js/views/entity/EntityUserDefineItemView.js b/dashboardv3/public/js/views/entity/EntityUserDefineItemView.js
new file mode 100644
index 0000000..a649ca8
--- /dev/null
+++ b/dashboardv3/public/js/views/entity/EntityUserDefineItemView.js
@@ -0,0 +1,98 @@
+/*
+ * 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/entity/EntityUserDefineItemView_tmpl'
+
+], function(require, Backbone, EntityUserDefineItemView_tmpl) {
+ 'use strict';
+
+ return Backbone.Marionette.ItemView.extend({
+ _viewName: 'EntityUserDefineItemView',
+
+ template: EntityUserDefineItemView_tmpl,
+
+ templateHelpers: function() {
+ return {
+ items: this.items
+ };
+ },
+
+ /** Layout sub regions */
+ regions: {},
+
+ /** ui selector cache */
+ ui: {
+ itemKey: "[data-type='key']",
+ itemValue: "[data-type='value']",
+ addItem: "[data-id='addItem']",
+ deleteItem: "[data-id='deleteItem']"
+ },
+ /** ui events hash */
+ events: function() {
+ var events = {};
+ events['input ' + this.ui.itemKey] = 'onItemKeyChange';
+ events['input ' + this.ui.itemValue] = 'onItemValueChange';
+ events['click ' + this.ui.addItem] = 'onAddItemClick';
+ events['click ' + this.ui.deleteItem] = 'onDeleteItemClick';
+ return events;
+ },
+
+ /**
+ * intialize a new GlobalExclusionComponentView Layout
+ * @constructs
+ */
+ initialize: function(options) {
+ var that = this;
+ this.editMode = options.mode;
+ if (options.items.length === 0) {
+ this.items = [{ key: "", value: "", mode: this.editMode}];
+
+ } else {
+ this.items = options.items.map(function(m) {
+ m.mode = that.editMode;
+ return m;
+ });
+ }
+ },
+ onRender: function() {
+
+ },
+ onAddItemClick: function(e) {
+ var el = e.currentTarget;
+ this.items.splice(parseInt(el.dataset.index) + 1, 0, { key: "", value: "", mode: this.editMode});
+ this.render();
+ },
+ onDeleteItemClick: function(e) {
+ var el = e.currentTarget;
+ this.items.splice(el.dataset.index, 1);
+ this.render();
+ },
+ onItemKeyChange: function (e) {
+ var el = e.currentTarget;
+ var val = el.value;
+ this.items[ el.dataset.index].key = val;
+ },
+ onItemValueChange: function (e) {
+ var el = e.currentTarget;
+ var val = el.value;
+ this.items[ el.dataset.index].value = el.value;
+ }
+ });
+
+});
diff --git a/dashboardv3/public/js/views/entity/EntityUserDefineView.js b/dashboardv3/public/js/views/entity/EntityUserDefineView.js
new file mode 100644
index 0000000..4fc2f02
--- /dev/null
+++ b/dashboardv3/public/js/views/entity/EntityUserDefineView.js
@@ -0,0 +1,184 @@
+/**
+ * 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/entity/EntityUserDefineView_tmpl',
+'views/entity/EntityUserDefineItemView',
+'utils/CommonViewFunction',
+'modules/Modal',
+'models/VEntity',
+'utils/Utils',
+'utils/Enums'
+], function(require, Backbone, EntityUserDefineView_tmpl, EntityUserDefineItemView, CommonViewFunction, Modal, VEntity, Utils, Enums) {
+'use strict';
+
+ return Backbone.Marionette.LayoutView.extend({
+ _viewName: 'EntityUserDefineView',
+ template: EntityUserDefineView_tmpl,
+ templateHelpers: function() {
+ return {
+ customAttibutes: this.customAttibutes,
+ readOnlyEntity : this.readOnlyEntity
+ };
+ },
+ ui: {
+ addAttr: "[data-id='addAttr']",
+ editAttr: "[data-id='editAttr']",
+ deleteAttr: "[data-id='deleteAttr']"
+ },
+ events: function() {
+ var events = {};
+ events["click " + this.ui.editAttr] = 'onEditAttrClick';
+ return events;
+ },
+ initialize: function(options) {
+ _.extend(this, _.pick(options, 'entity'));
+ this.userDefineAttr = this.entity.customAttributes || [];
+ this.editMode = false;
+ this.readOnlyEntity = Enums.entityStateReadOnly[this.entity.status];
+ this.entityModel = new VEntity(this.entity);
+ this.generateTableFields();
+ },
+ onRender: function() {
+ },
+ bindEvents: {},
+ customAtributesFunc: function() {
+
+ },
+ generateTableFields: function() {
+ var that = this;
+ this.customAttibutes = [];
+ _.each(Object.keys(that.userDefineAttr), function(key, i) {
+ that.customAttibutes.push({
+ key: key,
+ value: that.userDefineAttr[key]
+ });
+ });
+ },
+ onEditAttrClick: function (e) {
+ this.editMode = true;
+ var options = {items: this.customAttibutes, mode: true};
+ var view = new EntityUserDefineItemView(options);
+ var modalObj = {
+ title: 'User-Defined Attributes',
+ content: view,
+ okText: 'Save',
+ okCloses: false,
+ cancelText: "Cancel",
+ mainClass: 'modal-lg',
+ allowCancel: true,
+ };
+ this.setAttributeModal(modalObj);
+ },
+ structureAttributes: function (list) {
+ var obj={}
+ list.map(function (o) {
+ obj[o.key] = o.value;
+ });
+ return obj;
+ },
+ saveAttributes: function (list) {
+ var that = this;
+ var entityJson = that.entityModel.toJSON();
+ var properties = that.structureAttributes(list);
+ entityJson.customAttributes = properties;
+ var payload = {entity: entityJson};
+ that.entityModel.createOreditEntity({
+ data: JSON.stringify(payload),
+ type: 'POST',
+ success: function() {
+ var msg = "User-defined attribute(s) updated successfully";
+ that.customAttibutes = list;
+ Utils.notifySuccess({
+ content: msg
+ });
+ that.modal && that.modal.trigger('cancel');
+ that.render();
+ },
+ error: function (e) {
+ that.editMode = false;
+ Utils.notifySuccess({
+ content: e.message
+ });
+ that.modal && that.modal.$el.find('button.ok').attr("disabled", false);
+ },
+ complete: function () {
+ that.modal && that.modal.$el.find('button.ok').attr("disabled", false);
+ that.editMode = false;
+ }
+ });
+ },
+ setAttributeModal: function(modalObj) {
+ var self = this;
+ this.modal = new Modal(modalObj);
+ this.modal.open();
+ this. modal.on('ok', function() {
+ self.modal.$el.find('button.ok').attr("disabled", true);
+ var list = self.modal.$el.find("[data-type]"),
+ keyMap = new Map(),
+ validation = true,
+ hasDup = [],
+ dataList = [];
+ Array.prototype.push.apply(dataList, self.modal.options.content.items);
+ for(var i = 0; i < list.length ; i++) {
+ var input = list[i],
+ type = input.dataset.type,
+ pEl = self.modal.$el.find(input.parentElement).find('p'),
+ classes = 'form-control',
+ val = input.value.trim();
+ pEl[0].innerText = "";
+
+ if (val === '') {
+ classes = 'form-control errorClass';
+ validation = false;
+ pEl[0].innerText = 'Required!';
+ } else {
+ if (input.tagName === 'INPUT') {
+ var duplicates = dataList.filter(function(c) {
+ return c.key === val;
+ });
+ if (keyMap.has(val) || duplicates.length > 1 ) {
+ classes = 'form-control errorClass';
+ hasDup.push('duplicate');
+ pEl[0].innerText = 'Duplicate key';
+ } else {
+ keyMap.set(val, val);
+ }
+ }
+ }
+ input.setAttribute('class', classes);
+ }
+
+ if (validation && hasDup.length === 0) {
+ self.saveAttributes(self.modal.options.content.items);
+ } else {
+ self.modal.$el.find('button.ok').attr("disabled", false);
+ }
+ });
+ this.modal.on('closeModal', function() {
+ self.editMode = false;
+ self.modal.trigger('cancel');
+ });
+ },
+ enableModalButton: function () {
+ var self = this;
+ self.modal.$el.find('button.ok').attr("disabled", false);
+ }
+ });
+});
--
2.7.4
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment