You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by sa...@apache.org on 2019/10/15 03:56:54 UTC
[atlas] branch branch-2.0 updated: ATLAS-3462: Redundant patch file
in github repo
This is an automated email from the ASF dual-hosted git repository.
sarath pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/atlas.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new f085cf8 ATLAS-3462: Redundant patch file in github repo
f085cf8 is described below
commit f085cf810f14f4613de386ee935e43e2522d36d5
Author: Sarath Subramanian <sa...@apache.org>
AuthorDate: Mon Oct 14 20:49:46 2019 -0700
ATLAS-3462: Redundant patch file in github repo
(cherry picked from commit 596b74b0a8cad4d7aad473e0e6e502c3fbce150f)
---
ATLAS-3439-1.patch | 1401 ----------------------------------------------------
repl_exp_1.zip | Bin 14211 -> 0 bytes
repl_exp_2.zip | Bin 11053 -> 0 bytes
3 files changed, 1401 deletions(-)
diff --git a/ATLAS-3439-1.patch b/ATLAS-3439-1.patch
deleted file mode 100644
index 410f5a3..0000000
--- a/ATLAS-3439-1.patch
+++ /dev/null
@@ -1,1401 +0,0 @@
-From 8e806aae327b3179a26e6627fd42c80f6ec615f4 Mon Sep 17 00:00:00 2001
-From: sameer79 <fi...@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
-
diff --git a/repl_exp_1.zip b/repl_exp_1.zip
deleted file mode 100644
index 242af8b..0000000
Binary files a/repl_exp_1.zip and /dev/null differ
diff --git a/repl_exp_2.zip b/repl_exp_2.zip
deleted file mode 100644
index d054f08..0000000
Binary files a/repl_exp_2.zip and /dev/null differ