You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by kb...@apache.org on 2019/11/07 09:51:26 UTC
[atlas] branch branch-2.0 updated: ATLAS-3509 : UI: Add basic
search hyperlink in metric popup
This is an automated email from the ASF dual-hosted git repository.
kbhatt 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 213e86b ATLAS-3509 : UI: Add basic search hyperlink in metric popup
213e86b is described below
commit 213e86bca0bf42f7ac0df98f5fda5f5e85f70341
Author: kevalbhatt <kb...@apache.org>
AuthorDate: Wed Nov 6 18:10:04 2019 +0530
ATLAS-3509 : UI: Add basic search hyperlink in metric popup
(cherry picked from commit d5c8bf40dc92ff538daf7da1ad9bac0dbb7a26fd)
---
dashboardv2/public/css/scss/override.scss | 2 +-
dashboardv2/public/css/scss/theme.scss | 4 +
dashboardv2/public/js/modules/Helpers.js | 25 +++++
.../entity/EntityLabelDefineView_tmpl.html | 114 ++++++++++-----------
.../entity/EntityUserDefineItemView_tmpl.html | 7 +-
.../entity/EntityUserDefineView_tmpl.html | 8 +-
.../public/js/templates/site/Statistics_tmpl.html | 56 +++++-----
.../public/js/templates/site/entity_tmpl.html | 14 ++-
dashboardv2/public/js/utils/CommonViewFunction.js | 60 ++++++++++-
.../js/views/entity/EntityLabelDefineView.js | 79 +++++++++-----
.../js/views/entity/EntityUserDefineItemView.js | 37 ++++---
.../public/js/views/entity/EntityUserDefineView.js | 58 ++++-------
dashboardv2/public/js/views/site/Statistics.js | 72 +++++++++----
dashboardv3/public/css/scss/theme.scss | 4 +
dashboardv3/public/js/modules/Helpers.js | 25 +++++
.../entity/EntityDetailTableLayoutView_tmpl.html | 2 +-
.../entity/EntityLabelDefineView_tmpl.html | 114 ++++++++++-----------
.../entity/EntityUserDefineItemView_tmpl.html | 49 ++++-----
.../entity/EntityUserDefineView_tmpl.html | 8 +-
.../tree/ClassificationTreeLayoutView_tmpl.html | 2 +-
.../tree/CustomFilterTreeLayoutView_tmpl.html | 2 +-
.../search/tree/EntityTreeLayoutView_tmpl.html | 2 +-
.../search/tree/GlossaryTreeLayoutView_tmpl.html | 2 +-
.../public/js/templates/site/Statistics_tmpl.html | 59 ++++++-----
.../public/js/templates/site/entity_tmpl.html | 14 ++-
.../tag/TagAttributeDetailLayoutView_tmpl.html | 2 +-
dashboardv3/public/js/utils/CommonViewFunction.js | 62 ++++++++++-
.../js/views/entity/EntityLabelDefineView.js | 79 +++++++++-----
.../js/views/entity/EntityUserDefineItemView.js | 37 ++++---
.../public/js/views/entity/EntityUserDefineView.js | 56 +++-------
.../public/js/views/glossary/GlossaryLayoutView.js | 5 +-
dashboardv3/public/js/views/site/Statistics.js | 60 ++++++++---
32 files changed, 685 insertions(+), 435 deletions(-)
diff --git a/dashboardv2/public/css/scss/override.scss b/dashboardv2/public/css/scss/override.scss
index 6f4a8f1..a1e121e 100644
--- a/dashboardv2/public/css/scss/override.scss
+++ b/dashboardv2/public/css/scss/override.scss
@@ -470,4 +470,4 @@ div.columnmanager-dropdown-container {
.w30 {
width: 30% !important;
-}
+}
\ No newline at end of file
diff --git a/dashboardv2/public/css/scss/theme.scss b/dashboardv2/public/css/scss/theme.scss
index 901d693..0589e09 100644
--- a/dashboardv2/public/css/scss/theme.scss
+++ b/dashboardv2/public/css/scss/theme.scss
@@ -340,6 +340,10 @@ hr[size="10"] {
border: none !important;
}
+.no-pointer {
+ pointer-events: none;
+}
+
.position-relative {
position: relative;
}
diff --git a/dashboardv2/public/js/modules/Helpers.js b/dashboardv2/public/js/modules/Helpers.js
index 258a40e..2f36a0d 100644
--- a/dashboardv2/public/js/modules/Helpers.js
+++ b/dashboardv2/public/js/modules/Helpers.js
@@ -96,6 +96,31 @@ define(['require',
//return options.inverse(this);
});
+ Handlebars.registerHelper('arithmetic', function(val1, operator, val2, options) {
+ var v1 = parseInt(val1) || 0,
+ v2 = parseInt(val2) || 0;
+ switch (operator) {
+ case '+':
+ return (v1 + v2);
+ break;
+ case '-':
+ return (v1 - v2);
+ break;
+ case '/':
+ return (v1 / v2);
+ break;
+ case '*':
+ return (v1 * v2);
+ break;
+ case '%':
+ return (v1 % v2);
+ break;
+ default:
+ return 0;
+ break;
+ }
+ });
+
Handlebars.registerHelper('lookup', function(obj, field, defaulValue) {
return (obj[field] ? obj[field] : (defaulValue ? defaulValue : ""));
});
diff --git a/dashboardv2/public/js/templates/entity/EntityLabelDefineView_tmpl.html b/dashboardv2/public/js/templates/entity/EntityLabelDefineView_tmpl.html
index 9914299..f122fe9 100644
--- a/dashboardv2/public/js/templates/entity/EntityLabelDefineView_tmpl.html
+++ b/dashboardv2/public/js/templates/entity/EntityLabelDefineView_tmpl.html
@@ -14,84 +14,76 @@
* 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="userDefineLabel">
{{#ifCond labels.length "===" 0}}
- <div class="panel-heading collapsed" data-toggle="collapse" href="#collapse3" aria-expanded="false" style="width: 70%">
- <h4 class="panel-title">
- <a>Labels </a>
- </h4>
- <div class="btn-group pull-left">
- <button type="button" title="Collapse"><i class="ec-icon fa"></i></button>
- </div>
+ <div class="panel-heading collapsed" data-toggle="collapse" href={{div_1.anchor}} aria-expanded="false" style="width: 70%">
+ <h4 class="panel-title">
+ <a>Labels </a>
+ </h4>
+ <div class="btn-group pull-left">
+ <button type="button" title="Collapse"><i class="ec-icon fa"></i></button>
</div>
+ </div>
{{else}}
- <div class="panel-heading" data-toggle="collapse" href="#collapse4" aria-expanded="true" style="width: 70%">
- <h4 class="panel-title">
- <a>Labels </a>
- </h4>
- <div class="btn-group pull-left">
- <button type="button" title="Collapse"><i class="ec-icon fa"></i></button>
- </div>
+ <div class="panel-heading" data-toggle="collapse" href={{div_2.anchor}} aria-expanded="true" style="width: 70%">
+ <h4 class="panel-title">
+ <a>Labels </a>
+ </h4>
+ <div class="btn-group pull-left">
+ <button type="button" title="Collapse"><i class="ec-icon fa"></i></button>
</div>
-
+ </div>
{{/ifCond}}
-
{{#ifCond readOnlyEntity "===" false}}
- <div class="panel-actions">
- {{#ifCond swapItem "!==" true}}
- <button class="btn btn-action btn-sm" data-id="addLabels" {{#ifCond labels.length "===" 0}} data-original-title="Add User-Defined Labels" {{else}} data-original-title="Edit User-Defined Labels" {{/ifCond}}>
- {{#ifCond labels.length "===" 0}} Add {{else}} Edit {{/ifCond}}
- </button>
- {{/ifCond}}
- {{#ifCond saveLabels "===" true}}
- <button class="btn btn-action btn-sm" data-id="saveLabels" data-original-title="Save User-Defined Labels">Save</button>
- {{/ifCond}}
- </div>
+ <div class="panel-actions">
+ {{#ifCond swapItem "!==" true}}
+ <button class="btn btn-action btn-sm" data-id="addLabels" {{#ifCond labels.length "===" 0}} data-original-title="Add User-Defined Labels" {{else}} data-original-title="Edit User-Defined Labels" {{/ifCond}}>
+ {{#ifCond labels.length "===" 0}} Add {{else}} Edit {{/ifCond}}
+ </button>
+ {{/ifCond}}
+ {{#ifCond saveLabels "===" true}}
+ <button class="btn btn-action btn-sm" data-id="saveLabels" data-original-title="Save User-Defined Labels">Save</button>
+ {{/ifCond}}
+ </div>
{{/ifCond}}
-
- <div id="collapse3" {{#ifCond swapItem "===" false}} class="panel-collapse collapse" {{else}} class="panel-collapse collapse in" {{/ifCond}}>
+ <div id={{div_1.id}} {{#ifCond swapItem "===" false}} class="panel-collapse collapse" {{else}} class="panel-collapse collapse in" {{/ifCond}}>
{{#ifCond labels.length "===" 0}}
- <div class="panel-body">
- <div class="row">
- <div class="col-md-12">
- {{#ifCond swapItem "===" true}}
- <select class="form-control" data-id="addLabelOptions" multiple="multiple"></select>
- {{else}}
- <div class="badge-container">
- {{#each labels}}
- <label class="label badge-default">{{this}}</label>
- {{/each}}
- </div>
- {{/ifCond}}
- </div>
+ <div class="panel-body">
+ <div class="row">
+ <div class="col-md-12">
+ {{#ifCond swapItem "===" true}}
+ <select class="form-control" data-id="addLabelOptions" multiple="multiple"></select>
+ {{else}}
+ <div class="badge-container">
+ {{#each labels}}
+ <label class="btn btn-action btn-sm btn-blue no-pointer">{{this}}</label>
+ {{/each}}
</div>
+ {{/ifCond}}
+ </div>
</div>
+ </div>
{{/ifCond}}
</div>
-
{{#ifCond labels.length ">" 0}}
- <div id="collapse4" class="panel-collapse collapse in" >
- <div class="panel-body">
- <div class="row">
- <div class="col-md-12">
- {{#ifCond swapItem "===" true}}
- <select class="form-control" data-id="addLabelOptions" multiple="multiple"></select>
- {{else}}
- <div class="badge-container">
- {{#each labels}}
- <label class="label badge-default">{{this}}</label>
- {{/each}}
- </div>
- {{/ifCond}}
- </div>
+ <div id={{div_2.id}} class="panel-collapse collapse in">
+ <div class="panel-body">
+ <div class="row">
+ <div class="col-md-12">
+ {{#ifCond swapItem "===" true}}
+ <select class="form-control" data-id="addLabelOptions" multiple="multiple"></select>
+ {{else}}
+ <div class="badge-container">
+ {{#each labels}}
+ <label class="btn btn-action btn-sm btn-blue no-pointer">{{this}}</label>
+ {{/each}}
</div>
+ {{/ifCond}}
+ </div>
</div>
</div>
+ </div>
{{/ifCond}}
-
-
</div>
-</div>
+</div>
\ No newline at end of file
diff --git a/dashboardv2/public/js/templates/entity/EntityUserDefineItemView_tmpl.html b/dashboardv2/public/js/templates/entity/EntityUserDefineItemView_tmpl.html
index 2bd366a..9ee29d5 100644
--- a/dashboardv2/public/js/templates/entity/EntityUserDefineItemView_tmpl.html
+++ b/dashboardv2/public/js/templates/entity/EntityUserDefineItemView_tmpl.html
@@ -38,7 +38,12 @@
</td >
</tr>
{{/each}}
+ <tr>
+ <td colspan="4">
+ <p class="errorMsg" data-id="charSupportMsg"></p>
+ </td>
+ </tr>
{{#ifCond items.length "===" 0}}
- All properties have been removed. To add a new property, click <a href="javascript:void(0)" data-id="addItem">here</a>
+ No properties have been created yet. To add a property, click <a href="javascript:void(0)" data-id="addItem">here</a>
{{/ifCond}}
</table>
diff --git a/dashboardv2/public/js/templates/entity/EntityUserDefineView_tmpl.html b/dashboardv2/public/js/templates/entity/EntityUserDefineView_tmpl.html
index e3a2598..347052c 100644
--- a/dashboardv2/public/js/templates/entity/EntityUserDefineView_tmpl.html
+++ b/dashboardv2/public/js/templates/entity/EntityUserDefineView_tmpl.html
@@ -18,7 +18,7 @@
<div class="panel panel-default custom-panel expand_collapse_panel-icon" data-id="userDefine">
{{#ifCond customAttibutes.length "===" 0}}
- <div class="panel-heading collapsed" data-toggle="collapse" href="#collapse22" aria-expanded="false" style="width: 70%">
+ <div class="panel-heading collapsed" data-toggle="collapse" href={{divId_1.anchor}} aria-expanded="false" style="width: 70%">
<h4 class="panel-title">
<a>User-defined properties </a>
</h4>
@@ -27,7 +27,7 @@
</div>
</div>
{{else}}
- <div class="panel-heading" data-toggle="collapse" href="#collapse44" aria-expanded="true" style="width: 70%">
+ <div class="panel-heading" data-toggle="collapse" href={{divId_2.anchor}} aria-expanded="true" style="width: 70%">
<h4 class="panel-title">
<a>User-defined properties </a>
</h4>
@@ -51,7 +51,7 @@
</div>
{{/ifCond}}
- <div id="collapse22" {{#ifCond swapItem "===" false}} class="panel-collapse collapse" {{else}} class="panel-collapse collapse in" {{/ifCond}}>
+ <div id={{divId_1.id}} {{#ifCond swapItem "===" false}} class="panel-collapse collapse" {{else}} class="panel-collapse collapse in" {{/ifCond}}>
{{#ifCond customAttibutes.length "===" 0}}
<div class="panel-body">
<div class="row">
@@ -82,7 +82,7 @@
</div>
{{#ifCond customAttibutes.length ">" 0}}
- <div id="collapse44" class="panel-collapse collapse in" >
+ <div id={{divId_2.id}} class="panel-collapse collapse in" >
<div class="panel-body">
<div class="row">
<div class="col-md-12">
diff --git a/dashboardv2/public/js/templates/site/Statistics_tmpl.html b/dashboardv2/public/js/templates/site/Statistics_tmpl.html
index 1b8f49c..5bf0a9c 100644
--- a/dashboardv2/public/js/templates/site/Statistics_tmpl.html
+++ b/dashboardv2/public/js/templates/site/Statistics_tmpl.html
@@ -36,6 +36,33 @@
</div>
</div>
</div>
+ <div class="panel panel-default custom-panel expand_collapse_panel-icon" data-id="classification">
+ <div class="panel-heading" data-toggle="collapse" href="#classificationCountCollapse" aria-expanded="true">
+ <h4 class="panel-title">
+ <a>Classifications <span class="count">(0)</span></a>
+ </h4>
+ <div class="btn-group pull-left">
+ <button type="button" title="Collapse"><i class="ec-icon fa"></i></button>
+ </div>
+ </div>
+ <div id="classificationCountCollapse" class="panel-collapse collapse in">
+ <div class="panel-body">
+ <table class="table stat-table classificationTable">
+ <thead>
+ <tr>
+ <th class="">Name</th>
+ <th class="">Count <span class="count">(0)</span></th>
+ </tr>
+ </thead>
+ <tbody data-id="classification-card">
+ <tr class="empty text-center">
+ <td colspan="3"><span>No records found!</span></td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ </div>
<div class="panel panel-default custom-panel expand_collapse_panel-icon" data-id="stats">
<div class="panel-heading" data-toggle="collapse" href="#serverDetailcollapse" aria-expanded="true">
<h4 class="panel-title">
@@ -96,7 +123,7 @@
<button type="button" title="Collapse"><i class="ec-icon fa"></i></button>
</div>
</div>
- <div id="systemDetailCollapse" class="panel-collapse collapse ">
+ <div id="systemDetailCollapse" class="panel-collapse collapse">
<div class="panel-body">
<div class="col-sm-6">
<div class="card-container panel panel-primary">
@@ -143,33 +170,6 @@
</div>
</div>
</div>
- <div class="panel panel-default custom-panel expand_collapse_panel-icon" data-id="classification">
- <div class="panel-heading" data-toggle="collapse" href="#classificationCountCollapse" aria-expanded="false">
- <h4 class="panel-title">
- <a>Classifications <span class="count">(0)</span></a>
- </h4>
- <div class="btn-group pull-left">
- <button type="button" title="Collapse"><i class="ec-icon fa"></i></button>
- </div>
- </div>
- <div id="classificationCountCollapse" class="panel-collapse collapse">
- <div class="panel-body">
- <table class="table stat-table classificationTable">
- <thead>
- <tr>
- <th class="">Name</th>
- <th class="">Count <span class="count">(0)</span></th>
- </tr>
- </thead>
- <tbody data-id="classification-card">
- <tr class="empty text-center">
- <td colspan="3"><span>No records found!</span></td>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
- </div>
</div>
<div class="fontLoader-relative statsLoader show">
<i class="fa fa-refresh fa-spin-custom"></i>
diff --git a/dashboardv2/public/js/templates/site/entity_tmpl.html b/dashboardv2/public/js/templates/site/entity_tmpl.html
index 2c7aef5..974006a 100644
--- a/dashboardv2/public/js/templates/site/entity_tmpl.html
+++ b/dashboardv2/public/js/templates/site/entity_tmpl.html
@@ -26,19 +26,25 @@
<tbody>
{{#each data}}
<tr>
- <td>{{@key}}</td>
+ <td><a class="linkClicked" href="#!/search/searchResult?searchType=basic&type={{@key}}&includeDE=true">{{@key}} ({{arithmetic this.active '+' this.deleted}})</a></td>
{{#if this.active}}
- <td>{{this.active}}</td>
+ <td>
+ <a title="Search for active entities of type '{{@key}}'" class="linkClicked" href="#!/search/searchResult?searchType=basic&type={{@key}}">{{this.active}}</a>
+ </td>
{{else}}
<td>0</td>
{{/if}}
{{#if this.deleted}}
- <td>{{this.deleted}}</td>
+ <td class="readOnlyLink">
+ <a title="Search for deleted entities of type '{{@key}}'" class="linkClicked" href="#!/search/searchResult?searchType=basic&type={{@key}}&includeDE=true">{{this.deleted}}</a>
+ </td>
{{else}}
<td>0</td>
{{/if}}
{{#if this.shell}}
- <td>{{this.shell}}</td>
+ <td>
+ {{this.shell}}
+ </td>
{{else}}
<td>0</td>
{{/if}}
diff --git a/dashboardv2/public/js/utils/CommonViewFunction.js b/dashboardv2/public/js/utils/CommonViewFunction.js
index d785e9d..6877dfe 100644
--- a/dashboardv2/public/js/utils/CommonViewFunction.js
+++ b/dashboardv2/public/js/utils/CommonViewFunction.js
@@ -882,5 +882,63 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
});
}
}
+ CommonViewFunction.CheckDuplicateAndEmptyInput = function(elements, datalist) {
+ var keyMap = new Map(),
+ validation = true,
+ hasDup = [];
+ for (var i = 0; i < elements.length; i++) {
+ var input = elements[i],
+ pEl = input.nextElementSibling,
+ classes = 'form-control',
+ val = input.value.trim();
+ pEl.innerText = "";
+
+ if (val === '') {
+ classes = 'form-control errorClass';
+ validation = false;
+ pEl.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.innerText = 'Duplicate key';
+ } else {
+ keyMap.set(val, val);
+ }
+ }
+ }
+ input.setAttribute('class', classes);
+ }
+ return {
+ validation: validation,
+ hasDuplicate: (hasDup.length === 0 ? false : true)
+ };
+ }
+ CommonViewFunction.getRandomIdAndAnchor = function() {
+ var randomId = "collapse_" + parseInt((Math.random() * 100)) + "_" + new Date().getUTCMilliseconds();
+ return {
+ id: randomId,
+ anchor: "#" + randomId
+ };
+ }
+ CommonViewFunction.udKeysStringParser = function(udKeys) {
+ var o = {};
+ _.each(udKeys.split(','), function(udKey) {
+ var ud = udKey.split(':');
+ o[ud[0]] = ud[1];
+ })
+ return o;
+ }
+ CommonViewFunction.udKeysObjectToStringParser = function(udKeys) {
+ var list = _.map(udKeys, function(udKey) {
+ var t = udKey.key + ':' + udKey.value;
+ return t;
+ });
+ return list.join(',');
+ }
return CommonViewFunction;
-});
+});
\ No newline at end of file
diff --git a/dashboardv2/public/js/views/entity/EntityLabelDefineView.js b/dashboardv2/public/js/views/entity/EntityLabelDefineView.js
index 5a5d666..4f971ab 100644
--- a/dashboardv2/public/js/views/entity/EntityLabelDefineView.js
+++ b/dashboardv2/public/js/views/entity/EntityLabelDefineView.js
@@ -17,14 +17,15 @@
*/
define(['require',
-'backbone',
-'hbs!tmpl/entity/EntityLabelDefineView_tmpl',
-'models/VEntity',
-'utils/Utils',
-'utils/Messages',
-'utils/Enums'
-], function(require, Backbone, EntityLabelDefineView_tmpl, VEntity, Utils, Messages, Enums) {
-'use strict';
+ 'backbone',
+ 'hbs!tmpl/entity/EntityLabelDefineView_tmpl',
+ 'models/VEntity',
+ 'utils/Utils',
+ 'utils/Messages',
+ 'utils/Enums',
+ 'utils/CommonViewFunction',
+], function(require, Backbone, EntityLabelDefineView_tmpl, VEntity, Utils, Messages, Enums, CommonViewFunction) {
+ 'use strict';
return Backbone.Marionette.LayoutView.extend({
_viewName: 'REntityLabelDefineView',
@@ -34,7 +35,9 @@ define(['require',
swapItem: this.swapItem,
labels: this.labels,
saveLabels: this.saveLabels,
- readOnlyEntity: this.readOnlyEntity
+ readOnlyEntity: this.readOnlyEntity,
+ div_1: this.dynamicId_1,
+ div_2: this.dynamicId_2
};
},
ui: {
@@ -51,36 +54,56 @@ define(['require',
},
initialize: function(options) {
var self = this;
- _.extend(this, _.pick(options, 'entity'));
+ _.extend(this, _.pick(options, 'entity', 'customFilter'));
this.swapItem = false, this.saveLabels = false;
- this.readOnlyEntity = Enums.entityStateReadOnly[this.entity.status]
+ this.readOnlyEntity = this.customFilter === undefined ? Enums.entityStateReadOnly[this.entity.status] : this.customFilter;
this.entityModel = new VEntity(this.entity);
this.labels = this.entity.labels || [];
+ this.dynamicId_1 = CommonViewFunction.getRandomIdAndAnchor();
+ this.dynamicId_2 = CommonViewFunction.getRandomIdAndAnchor();
},
onRender: function() {
this.populateLabelOptions();
},
- bindEvents: function () {
- },
+ bindEvents: function() {},
populateLabelOptions: function() {
var that = this,
- str = this.labels.map(function (label) {
- return "<option selected > "+ label +" </option>";
- });
+ str = this.labels.map(function(label) {
+ return "<option selected > " + label + " </option>";
+ });
this.ui.addLabelOptions.html(str);
this.ui.addLabelOptions.select2({
placeholder: "Select Label",
- allowClear: true,
+ allowClear: false,
tags: true,
- multiple: true
+ multiple: true,
+ matcher: function(params, data) {
+ if (params.term === data.text) {
+ return data;
+ }
+ return null;
+ },
+ templateResult: this.formatResultSearch
});
},
- onChangeLabelChange: function () {
- this.labels = this.ui.addLabelOptions.val();
+ formatResultSearch: function(state) {
+ if (!state.id) {
+ return state.text;
+ }
+ if (!state.element) {
+ return $("<span>Add<strong> '" + state.text + "'</strong></span>");
+ }
},
- handleBtnClick: function () {
+ onChangeLabelChange: function() {
+ this.labels = this.ui.addLabelOptions.val().map(function(v) { return _.escape(v) });
+ },
+ handleBtnClick: function() {
this.swapItem = !this.swapItem;
- this.saveLabels = this.swapItem === true ? true : false;
+ if (this.customFilter === undefined) {
+ this.saveLabels = this.swapItem === true ? true : false;
+ } else {
+ this.saveLabels = false;
+ }
this.render();
},
saveUserDefinedLabels: function() {
@@ -88,7 +111,7 @@ define(['require',
var entityJson = that.entityModel.toJSON();
if (entityJson.labels !== undefined || this.labels.length !== 0) {
var payload = this.labels;
- that.entityModel.saveEntityLabels(entityJson.guid ,{
+ that.entityModel.saveEntityLabels(entityJson.guid, {
data: JSON.stringify(payload),
type: 'POST',
success: function() {
@@ -108,18 +131,18 @@ define(['require',
that.saveLabels = false;
that.render();
},
- error: function (e) {
- that.ui.saveLabels.attr("disabled", false);
+ error: function(e) {
+ that.ui.saveLabels && that.ui.saveLabels.length > 0 && that.ui.saveLabels[0].setAttribute("disabled", false);
Utils.notifySuccess({
content: e.message
});
},
- complete: function () {
- that.ui.saveLabels.attr("disabled", false);
+ complete: function() {
+ that.ui.saveLabels && that.ui.saveLabels.length > 0 && that.ui.saveLabels[0].setAttribute("disabled", false);
that.render();
}
});
}
}
});
-});
+});
\ No newline at end of file
diff --git a/dashboardv2/public/js/views/entity/EntityUserDefineItemView.js b/dashboardv2/public/js/views/entity/EntityUserDefineItemView.js
index a649ca8..38929e2 100644
--- a/dashboardv2/public/js/views/entity/EntityUserDefineItemView.js
+++ b/dashboardv2/public/js/views/entity/EntityUserDefineItemView.js
@@ -41,7 +41,8 @@ define(['require',
itemKey: "[data-type='key']",
itemValue: "[data-type='value']",
addItem: "[data-id='addItem']",
- deleteItem: "[data-id='deleteItem']"
+ deleteItem: "[data-id='deleteItem']",
+ charSupportMsg: "[data-id='charSupportMsg']"
},
/** ui events hash */
events: function() {
@@ -58,24 +59,17 @@ define(['require',
* @constructs
*/
initialize: function(options) {
- var that = this;
- this.editMode = options.mode;
if (options.items.length === 0) {
- this.items = [{ key: "", value: "", mode: this.editMode}];
-
+ this.items = [{ key: "", value: ""}];
} else {
- this.items = options.items.map(function(m) {
- m.mode = that.editMode;
- return m;
- });
+ this.items = options.items;
}
},
onRender: function() {
-
},
onAddItemClick: function(e) {
var el = e.currentTarget;
- this.items.splice(parseInt(el.dataset.index) + 1, 0, { key: "", value: "", mode: this.editMode});
+ this.items.splice(parseInt(el.dataset.index) + 1, 0, { key: "", value: ""});
this.render();
},
onDeleteItemClick: function(e) {
@@ -85,13 +79,26 @@ define(['require',
},
onItemKeyChange: function (e) {
var el = e.currentTarget;
- var val = el.value;
- this.items[ el.dataset.index].key = val;
+ this.handleCharSupport(el);
+ if (!el.value.trim().includes(':')) {
+ this.items[ el.dataset.index].key = _.escape(el.value.trim());
+ }
},
onItemValueChange: function (e) {
var el = e.currentTarget;
- var val = el.value;
- this.items[ el.dataset.index].value = el.value;
+ this.handleCharSupport(el);
+ if (!el.value.trim().includes(':')) {
+ this.items[ el.dataset.index].value = _.escape(el.value.trim());
+ }
+ },
+ handleCharSupport: function(el) {
+ if (el.value.trim().includes(':')) {
+ el.setAttribute('class', 'form-control errorClass');
+ this.ui.charSupportMsg.html("These special character '(:)' are not supported.");
+ } else {
+ el.setAttribute('class', 'form-control');
+ this.ui.charSupportMsg.html("");
+ }
}
});
diff --git a/dashboardv2/public/js/views/entity/EntityUserDefineView.js b/dashboardv2/public/js/views/entity/EntityUserDefineView.js
index bb901ff..04baffb 100644
--- a/dashboardv2/public/js/views/entity/EntityUserDefineView.js
+++ b/dashboardv2/public/js/views/entity/EntityUserDefineView.js
@@ -22,8 +22,9 @@ define(['require',
'models/VEntity',
'utils/Utils',
'utils/Enums',
-'utils/Messages'
-], function(require, Backbone, EntityUserDefineView_tmpl, VEntity, Utils, Enums, Messages) {
+'utils/Messages',
+'utils/CommonViewFunction',
+], function(require, Backbone, EntityUserDefineView_tmpl, VEntity, Utils, Enums, Messages, CommonViewFunction) {
'use strict';
return Backbone.Marionette.LayoutView.extend({
@@ -34,7 +35,9 @@ define(['require',
customAttibutes: this.customAttibutes,
readOnlyEntity : this.readOnlyEntity,
swapItem: this.swapItem,
- saveAttrItems: this.saveAttrItems
+ saveAttrItems: this.saveAttrItems,
+ divId_1: this.dynamicId_1,
+ divId_2: this.dynamicId_2
};
},
ui: {
@@ -50,12 +53,14 @@ define(['require',
return events;
},
initialize: function(options) {
- _.extend(this, _.pick(options, 'entity'));
+ _.extend(this, _.pick(options, 'entity', 'customFilter'));
this.userDefineAttr = this.entity.customAttributes || [];
this.initialCall = false;
this.swapItem = false, this.saveAttrItems = false;
- this.readOnlyEntity = Enums.entityStateReadOnly[this.entity.status];
+ this.readOnlyEntity = this.customFilter === undefined ? Enums.entityStateReadOnly[this.entity.status] : this.customFilter ;
this.entityModel = new VEntity(this.entity);
+ this.dynamicId_1 = CommonViewFunction.getRandomIdAndAnchor();
+ this.dynamicId_2 = CommonViewFunction.getRandomIdAndAnchor();
this.generateTableFields();
},
onRender: function() {
@@ -77,7 +82,11 @@ define(['require',
},
onAddAttrClick: function() {
this.swapItem = !this.swapItem;
- this.saveAttrItems = this.swapItem === true ? true : false;
+ if (this.customFilter === undefined) {
+ this.saveAttrItems = this.swapItem === true ? true : false;
+ } else {
+ this.saveAttrItems = false;
+ }
this.initialCall = true;
this.render();
if (this.swapItem === true) {
@@ -115,7 +124,7 @@ define(['require',
data: JSON.stringify(payload),
type: 'POST',
success: function() {
- var msg = that.initialCall ? 'addSuccessMessage' : 'editSuccessMessage',
+ var msg = _.isEmpty(that.customAttibutes) ? 'addSuccessMessage' : 'editSuccessMessage',
caption = "One or more user-defined propertie"; // 's' will be added in abbreviation function
that.customAttibutes = list;
if (list.length === 0) {
@@ -146,41 +155,10 @@ define(['require',
var self = this;
this.ui.saveAttrItems.attr("disabled", true);
var list = itemView.$el.find("[data-type]"),
- keyMap = new Map(),
- validation = true,
- hasDup = [],
dataList = [];
Array.prototype.push.apply(dataList, itemView.items);
- for(var i = 0; i < list.length ; i++) {
- var input = list[i],
- type = input.dataset.type,
- pEl = itemView.$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) {
+ var field = CommonViewFunction.CheckDuplicateAndEmptyInput(list, dataList);
+ if (field.validation && !field.hasDuplicate) {
self.saveAttributes(itemView.items);
} else {
this.ui.saveAttrItems.attr("disabled", false);
diff --git a/dashboardv2/public/js/views/site/Statistics.js b/dashboardv2/public/js/views/site/Statistics.js
index 03cec9f..fcee124 100644
--- a/dashboardv2/public/js/views/site/Statistics.js
+++ b/dashboardv2/public/js/views/site/Statistics.js
@@ -43,8 +43,8 @@ define(['require',
regions: {},
/** ui selector cache */
ui: {
- entityHeader: "[data-id='entity'] .count",
- classificationHeader: "[data-id='classification'] .count",
+ entity: "[data-id='entity']",
+ classification: "[data-id='classification']",
serverCard: "[data-id='server-card']",
connectionCard: "[data-id='connection-card']",
notificationCard: "[data-id='notification-card']",
@@ -54,10 +54,8 @@ define(['require',
offsetCard: "[data-id='offset-card']",
osCard: "[data-id='os-card']",
runtimeCard: "[data-id='runtime-card']",
- memoryCard: "[data-id='memory-card']"
-
-
-
+ memoryCard: "[data-id='memory-card']",
+ memoryPoolUsage: "[data-id='memory-pool-usage-card']"
},
/** ui events hash */
events: function() {},
@@ -68,6 +66,7 @@ define(['require',
initialize: function(options) {
_.extend(this, options);
var that = this;
+ this.DATA_MAX_LENGTH = 25;
var modal = new Modal({
title: 'Statistics',
content: this,
@@ -91,7 +90,12 @@ define(['require',
});
this.modal = modal;
},
- bindEvents: function() {},
+ bindEvents: function() {
+ var that = this;
+ this.$el.on('click', '.linkClicked', function() {
+ that.modal.close();
+ })
+ },
fetchMetricData: function(options) {
var that = this;
this.metricCollection.fetch({
@@ -114,8 +118,14 @@ define(['require',
});
},
onRender: function() {
+ this.bindEvents();
this.fetchMetricData();
},
+ closePanel: function(options) {
+ var el = options.el;
+ el.find(">.panel-heading").attr("aria-expanded", "false");
+ el.find(">.panel-collapse.collapse").removeClass("in");
+ },
genrateStatusData: function(stateObject) {
var that = this,
stats = {};
@@ -135,11 +145,16 @@ define(['require',
createTable: function(obj) {
var that = this,
tableBody = '',
+ type = obj.type,
data = obj.data;
_.each(data, function(value, key, list) {
- tableBody += '<tr><td>' + key + '</td><td class="">' + that.getValue({
+ var newValue = that.getValue({
"value": value
- }) + '</td></tr>';
+ });
+ if (type === "classification") {
+ newValue = '<a title="Search for entities associated with \'' + key + '\'" class="linkClicked" href="#!/search/searchResult?searchType=basic&tag=' + key + '">' + newValue + '<a>';
+ }
+ tableBody += '<tr><td>' + key + '</td><td class="">' + newValue + '</td></tr>';
});
return tableBody;
@@ -150,8 +165,9 @@ define(['require',
classificationData = data.tag || {},
tagEntitiesData = classificationData ? classificationData.tagEntities || {} : {},
tagsCount = 0,
- newTagEntitiesData = {};
- _.each(_.sortBy(_.keys(tagEntitiesData), function(o) {
+ newTagEntitiesData = {},
+ tagEntitiesKeys = _.keys(tagEntitiesData);
+ _.each(_.sortBy(tagEntitiesKeys, function(o) {
return o.toLocaleLowerCase();
}), function(key) {
var val = tagEntitiesData[key];
@@ -163,10 +179,16 @@ define(['require',
if (!_.isEmpty(tagEntitiesData)) {
this.ui.classificationCard.html(
that.createTable({
- "data": tagEntitiesData
+ "data": tagEntitiesData,
+ "type": "classification"
})
);
- this.ui.classificationHeader.html(" (" + _.numberFormatWithComa(tagsCount) + ")");
+ this.ui.classification.find(".count").html(" (" + _.numberFormatWithComa(tagsCount) + ")");
+ if (tagEntitiesKeys.length > this.DATA_MAX_LENGTH) {
+ this.closePanel({
+ el: this.ui.classification
+ })
+ }
}
},
renderEntities: function(options) {
@@ -185,13 +207,13 @@ define(['require',
type = opt.type;
_.each(entityData, function(val, key) {
var intVal = _.isUndefined(val) ? 0 : val;
- if (type === "active") {
+ if (type == "active") {
activeEntityCount += intVal;
}
- if (type === "deleted") {
+ if (type == "deleted") {
deletedEntityCount += intVal;
}
- if (type === "shell") {
+ if (type == "shell") {
shellEntityCount += intVal
}
intVal = _.numberFormatWithComa(intVal)
@@ -217,17 +239,23 @@ define(['require',
"type": "shell"
});
if (!_.isEmpty(stats)) {
- that.ui.entityCard.html(
+ var statsKeys = _.keys(stats);
+ this.ui.entityCard.html(
EntityTable({
- "data": _.pick(stats, _.sortBy(_.keys(stats), function(o) {
+ "data": _.pick(stats, _.sortBy(statsKeys, function(o) {
return o.toLocaleLowerCase();
})),
})
);
- that.$('[data-id="activeEntity"]').html(" (" + _.numberFormatWithComa(activeEntityCount) + ")");
- that.$('[data-id="deletedEntity"]').html(" (" + _.numberFormatWithComa(deletedEntityCount) + ")");
- that.$('[data-id="shellEntity"]').html(" (" + _.numberFormatWithComa(shellEntityCount) + ")");
- that.ui.entityHeader.html(" (" + _.numberFormatWithComa(data.general.entityCount) + ")");
+ this.$('[data-id="activeEntity"]').html(" (" + _.numberFormatWithComa(activeEntityCount) + ")");
+ this.$('[data-id="deletedEntity"]').html(" (" + _.numberFormatWithComa(deletedEntityCount) + ")");
+ this.$('[data-id="shellEntity"]').html(" (" + _.numberFormatWithComa(shellEntityCount) + ")");
+ this.ui.entity.find(".count").html(" (" + _.numberFormatWithComa(data.general.entityCount) + ")");
+ if (statsKeys.length > this.DATA_MAX_LENGTH) {
+ this.closePanel({
+ el: this.ui.entity
+ })
+ }
}
},
renderStats: function(options) {
diff --git a/dashboardv3/public/css/scss/theme.scss b/dashboardv3/public/css/scss/theme.scss
index cb8cc4d..7c10a0d 100644
--- a/dashboardv3/public/css/scss/theme.scss
+++ b/dashboardv3/public/css/scss/theme.scss
@@ -508,6 +508,10 @@ hr[size="10"] {
border: none !important;
}
+.no-pointer {
+ pointer-events: none;
+}
+
.position-relative {
position: relative;
}
diff --git a/dashboardv3/public/js/modules/Helpers.js b/dashboardv3/public/js/modules/Helpers.js
index 258a40e..2f36a0d 100644
--- a/dashboardv3/public/js/modules/Helpers.js
+++ b/dashboardv3/public/js/modules/Helpers.js
@@ -96,6 +96,31 @@ define(['require',
//return options.inverse(this);
});
+ Handlebars.registerHelper('arithmetic', function(val1, operator, val2, options) {
+ var v1 = parseInt(val1) || 0,
+ v2 = parseInt(val2) || 0;
+ switch (operator) {
+ case '+':
+ return (v1 + v2);
+ break;
+ case '-':
+ return (v1 - v2);
+ break;
+ case '/':
+ return (v1 / v2);
+ break;
+ case '*':
+ return (v1 * v2);
+ break;
+ case '%':
+ return (v1 % v2);
+ break;
+ default:
+ return 0;
+ break;
+ }
+ });
+
Handlebars.registerHelper('lookup', function(obj, field, defaulValue) {
return (obj[field] ? obj[field] : (defaulValue ? defaulValue : ""));
});
diff --git a/dashboardv3/public/js/templates/entity/EntityDetailTableLayoutView_tmpl.html b/dashboardv3/public/js/templates/entity/EntityDetailTableLayoutView_tmpl.html
index 6e84ef9..cc8bd5f 100644
--- a/dashboardv3/public/js/templates/entity/EntityDetailTableLayoutView_tmpl.html
+++ b/dashboardv3/public/js/templates/entity/EntityDetailTableLayoutView_tmpl.html
@@ -26,7 +26,7 @@
</div>
<div class="panel-actions">
<div class="pretty p-switch p-fill" style="margin-right: 20px">
- <input type="checkbox" data-id="noValueToggle" title="Show Empty Values"/>
+ <input type="checkbox" data-id="noValueToggle" />
<div class="state p-primary">
<label></label>
</div>
diff --git a/dashboardv3/public/js/templates/entity/EntityLabelDefineView_tmpl.html b/dashboardv3/public/js/templates/entity/EntityLabelDefineView_tmpl.html
index 9914299..f122fe9 100644
--- a/dashboardv3/public/js/templates/entity/EntityLabelDefineView_tmpl.html
+++ b/dashboardv3/public/js/templates/entity/EntityLabelDefineView_tmpl.html
@@ -14,84 +14,76 @@
* 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="userDefineLabel">
{{#ifCond labels.length "===" 0}}
- <div class="panel-heading collapsed" data-toggle="collapse" href="#collapse3" aria-expanded="false" style="width: 70%">
- <h4 class="panel-title">
- <a>Labels </a>
- </h4>
- <div class="btn-group pull-left">
- <button type="button" title="Collapse"><i class="ec-icon fa"></i></button>
- </div>
+ <div class="panel-heading collapsed" data-toggle="collapse" href={{div_1.anchor}} aria-expanded="false" style="width: 70%">
+ <h4 class="panel-title">
+ <a>Labels </a>
+ </h4>
+ <div class="btn-group pull-left">
+ <button type="button" title="Collapse"><i class="ec-icon fa"></i></button>
</div>
+ </div>
{{else}}
- <div class="panel-heading" data-toggle="collapse" href="#collapse4" aria-expanded="true" style="width: 70%">
- <h4 class="panel-title">
- <a>Labels </a>
- </h4>
- <div class="btn-group pull-left">
- <button type="button" title="Collapse"><i class="ec-icon fa"></i></button>
- </div>
+ <div class="panel-heading" data-toggle="collapse" href={{div_2.anchor}} aria-expanded="true" style="width: 70%">
+ <h4 class="panel-title">
+ <a>Labels </a>
+ </h4>
+ <div class="btn-group pull-left">
+ <button type="button" title="Collapse"><i class="ec-icon fa"></i></button>
</div>
-
+ </div>
{{/ifCond}}
-
{{#ifCond readOnlyEntity "===" false}}
- <div class="panel-actions">
- {{#ifCond swapItem "!==" true}}
- <button class="btn btn-action btn-sm" data-id="addLabels" {{#ifCond labels.length "===" 0}} data-original-title="Add User-Defined Labels" {{else}} data-original-title="Edit User-Defined Labels" {{/ifCond}}>
- {{#ifCond labels.length "===" 0}} Add {{else}} Edit {{/ifCond}}
- </button>
- {{/ifCond}}
- {{#ifCond saveLabels "===" true}}
- <button class="btn btn-action btn-sm" data-id="saveLabels" data-original-title="Save User-Defined Labels">Save</button>
- {{/ifCond}}
- </div>
+ <div class="panel-actions">
+ {{#ifCond swapItem "!==" true}}
+ <button class="btn btn-action btn-sm" data-id="addLabels" {{#ifCond labels.length "===" 0}} data-original-title="Add User-Defined Labels" {{else}} data-original-title="Edit User-Defined Labels" {{/ifCond}}>
+ {{#ifCond labels.length "===" 0}} Add {{else}} Edit {{/ifCond}}
+ </button>
+ {{/ifCond}}
+ {{#ifCond saveLabels "===" true}}
+ <button class="btn btn-action btn-sm" data-id="saveLabels" data-original-title="Save User-Defined Labels">Save</button>
+ {{/ifCond}}
+ </div>
{{/ifCond}}
-
- <div id="collapse3" {{#ifCond swapItem "===" false}} class="panel-collapse collapse" {{else}} class="panel-collapse collapse in" {{/ifCond}}>
+ <div id={{div_1.id}} {{#ifCond swapItem "===" false}} class="panel-collapse collapse" {{else}} class="panel-collapse collapse in" {{/ifCond}}>
{{#ifCond labels.length "===" 0}}
- <div class="panel-body">
- <div class="row">
- <div class="col-md-12">
- {{#ifCond swapItem "===" true}}
- <select class="form-control" data-id="addLabelOptions" multiple="multiple"></select>
- {{else}}
- <div class="badge-container">
- {{#each labels}}
- <label class="label badge-default">{{this}}</label>
- {{/each}}
- </div>
- {{/ifCond}}
- </div>
+ <div class="panel-body">
+ <div class="row">
+ <div class="col-md-12">
+ {{#ifCond swapItem "===" true}}
+ <select class="form-control" data-id="addLabelOptions" multiple="multiple"></select>
+ {{else}}
+ <div class="badge-container">
+ {{#each labels}}
+ <label class="btn btn-action btn-sm btn-blue no-pointer">{{this}}</label>
+ {{/each}}
</div>
+ {{/ifCond}}
+ </div>
</div>
+ </div>
{{/ifCond}}
</div>
-
{{#ifCond labels.length ">" 0}}
- <div id="collapse4" class="panel-collapse collapse in" >
- <div class="panel-body">
- <div class="row">
- <div class="col-md-12">
- {{#ifCond swapItem "===" true}}
- <select class="form-control" data-id="addLabelOptions" multiple="multiple"></select>
- {{else}}
- <div class="badge-container">
- {{#each labels}}
- <label class="label badge-default">{{this}}</label>
- {{/each}}
- </div>
- {{/ifCond}}
- </div>
+ <div id={{div_2.id}} class="panel-collapse collapse in">
+ <div class="panel-body">
+ <div class="row">
+ <div class="col-md-12">
+ {{#ifCond swapItem "===" true}}
+ <select class="form-control" data-id="addLabelOptions" multiple="multiple"></select>
+ {{else}}
+ <div class="badge-container">
+ {{#each labels}}
+ <label class="btn btn-action btn-sm btn-blue no-pointer">{{this}}</label>
+ {{/each}}
</div>
+ {{/ifCond}}
+ </div>
</div>
</div>
+ </div>
{{/ifCond}}
-
-
</div>
-</div>
+</div>
\ No newline at end of file
diff --git a/dashboardv3/public/js/templates/entity/EntityUserDefineItemView_tmpl.html b/dashboardv3/public/js/templates/entity/EntityUserDefineItemView_tmpl.html
index 2bd366a..439943d 100644
--- a/dashboardv3/public/js/templates/entity/EntityUserDefineItemView_tmpl.html
+++ b/dashboardv3/public/js/templates/entity/EntityUserDefineItemView_tmpl.html
@@ -14,31 +14,34 @@
* See the License for the specific language governing permissions and
* limitations under the License.
-->
-
-
<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>
+ <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}}
+ <tr>
+ <td colspan="4">
+ <p class="errorMsg" data-id="charSupportMsg"></p>
+ </td>
+ </tr>
{{#ifCond items.length "===" 0}}
- All properties have been removed. To add a new property, click <a href="javascript:void(0)" data-id="addItem">here</a>
+ No properties have been created yet. To add a property, click <a href="javascript:void(0)" data-id="addItem">here</a>
{{/ifCond}}
-</table>
+</table>
\ No newline at end of file
diff --git a/dashboardv3/public/js/templates/entity/EntityUserDefineView_tmpl.html b/dashboardv3/public/js/templates/entity/EntityUserDefineView_tmpl.html
index e3a2598..347052c 100644
--- a/dashboardv3/public/js/templates/entity/EntityUserDefineView_tmpl.html
+++ b/dashboardv3/public/js/templates/entity/EntityUserDefineView_tmpl.html
@@ -18,7 +18,7 @@
<div class="panel panel-default custom-panel expand_collapse_panel-icon" data-id="userDefine">
{{#ifCond customAttibutes.length "===" 0}}
- <div class="panel-heading collapsed" data-toggle="collapse" href="#collapse22" aria-expanded="false" style="width: 70%">
+ <div class="panel-heading collapsed" data-toggle="collapse" href={{divId_1.anchor}} aria-expanded="false" style="width: 70%">
<h4 class="panel-title">
<a>User-defined properties </a>
</h4>
@@ -27,7 +27,7 @@
</div>
</div>
{{else}}
- <div class="panel-heading" data-toggle="collapse" href="#collapse44" aria-expanded="true" style="width: 70%">
+ <div class="panel-heading" data-toggle="collapse" href={{divId_2.anchor}} aria-expanded="true" style="width: 70%">
<h4 class="panel-title">
<a>User-defined properties </a>
</h4>
@@ -51,7 +51,7 @@
</div>
{{/ifCond}}
- <div id="collapse22" {{#ifCond swapItem "===" false}} class="panel-collapse collapse" {{else}} class="panel-collapse collapse in" {{/ifCond}}>
+ <div id={{divId_1.id}} {{#ifCond swapItem "===" false}} class="panel-collapse collapse" {{else}} class="panel-collapse collapse in" {{/ifCond}}>
{{#ifCond customAttibutes.length "===" 0}}
<div class="panel-body">
<div class="row">
@@ -82,7 +82,7 @@
</div>
{{#ifCond customAttibutes.length ">" 0}}
- <div id="collapse44" class="panel-collapse collapse in" >
+ <div id={{divId_2.id}} class="panel-collapse collapse in" >
<div class="panel-body">
<div class="row">
<div class="col-md-12">
diff --git a/dashboardv3/public/js/templates/search/tree/ClassificationTreeLayoutView_tmpl.html b/dashboardv3/public/js/templates/search/tree/ClassificationTreeLayoutView_tmpl.html
index ab2ded9..d0d4c0b 100644
--- a/dashboardv3/public/js/templates/search/tree/ClassificationTreeLayoutView_tmpl.html
+++ b/dashboardv3/public/js/templates/search/tree/ClassificationTreeLayoutView_tmpl.html
@@ -15,7 +15,7 @@
* limitations under the License.
-->
<div class="panel panel-default expand_collapse_panel-icon right-icons">
- <div class="panel-heading dash-button-icon" data-toggle="collapse" aria-expanded="true" href="#c_classfication">
+ <div class="panel-heading dash-button-icon clearfix" data-toggle="collapse" aria-expanded="true" href="#c_classfication">
<i class="ec-icon fa"></i>
<h4 class="panel-title">Classifications</h4>
<div class="btn-group pull-right">
diff --git a/dashboardv3/public/js/templates/search/tree/CustomFilterTreeLayoutView_tmpl.html b/dashboardv3/public/js/templates/search/tree/CustomFilterTreeLayoutView_tmpl.html
index c472628..b6a2371 100644
--- a/dashboardv3/public/js/templates/search/tree/CustomFilterTreeLayoutView_tmpl.html
+++ b/dashboardv3/public/js/templates/search/tree/CustomFilterTreeLayoutView_tmpl.html
@@ -15,7 +15,7 @@
* limitations under the License.
-->
<div class="panel panel-default expand_collapse_panel-icon right-icons">
- <div class="panel-heading dash-button-icon" data-toggle="collapse" aria-expanded="true" href="#c_customFilter">
+ <div class="panel-heading dash-button-icon clearfix" data-toggle="collapse" aria-expanded="true" href="#c_customFilter">
<i class="ec-icon fa"></i>
<h4 class="panel-title">Custom Filters</h4>
<div class="btn-group pull-right ">
diff --git a/dashboardv3/public/js/templates/search/tree/EntityTreeLayoutView_tmpl.html b/dashboardv3/public/js/templates/search/tree/EntityTreeLayoutView_tmpl.html
index bb74ac8..e77b612 100644
--- a/dashboardv3/public/js/templates/search/tree/EntityTreeLayoutView_tmpl.html
+++ b/dashboardv3/public/js/templates/search/tree/EntityTreeLayoutView_tmpl.html
@@ -15,7 +15,7 @@
* limitations under the License.
-->
<div class="panel panel-default expand_collapse_panel-icon right-icons">
- <div class="panel-heading dash-button-icon" data-toggle="collapse" aria-expanded="true" href="#c_entity">
+ <div class="panel-heading dash-button-icon clearfix" data-toggle="collapse" aria-expanded="true" href="#c_entity">
<i class="ec-icon fa"></i>
<h4 class="panel-title">Entities</h4>
<div class="btn-group pull-right">
diff --git a/dashboardv3/public/js/templates/search/tree/GlossaryTreeLayoutView_tmpl.html b/dashboardv3/public/js/templates/search/tree/GlossaryTreeLayoutView_tmpl.html
index 8310b0a..ebf6f2e 100644
--- a/dashboardv3/public/js/templates/search/tree/GlossaryTreeLayoutView_tmpl.html
+++ b/dashboardv3/public/js/templates/search/tree/GlossaryTreeLayoutView_tmpl.html
@@ -15,7 +15,7 @@
* limitations under the License.
-->
<div class="panel panel-default expand_collapse_panel-icon right-icons">
- <div class="panel-heading dash-button-icon" data-toggle="collapse" aria-expanded="true" href="#c_term">
+ <div class="panel-heading dash-button-icon clearfix" data-toggle="collapse" aria-expanded="true" href="#c_term">
<i class="ec-icon fa"></i>
<h4 class="panel-title">Glossaries</h4>
<div class="btn-group pull-right">
diff --git a/dashboardv3/public/js/templates/site/Statistics_tmpl.html b/dashboardv3/public/js/templates/site/Statistics_tmpl.html
index 5c4c372..5bf0a9c 100644
--- a/dashboardv3/public/js/templates/site/Statistics_tmpl.html
+++ b/dashboardv3/public/js/templates/site/Statistics_tmpl.html
@@ -36,6 +36,33 @@
</div>
</div>
</div>
+ <div class="panel panel-default custom-panel expand_collapse_panel-icon" data-id="classification">
+ <div class="panel-heading" data-toggle="collapse" href="#classificationCountCollapse" aria-expanded="true">
+ <h4 class="panel-title">
+ <a>Classifications <span class="count">(0)</span></a>
+ </h4>
+ <div class="btn-group pull-left">
+ <button type="button" title="Collapse"><i class="ec-icon fa"></i></button>
+ </div>
+ </div>
+ <div id="classificationCountCollapse" class="panel-collapse collapse in">
+ <div class="panel-body">
+ <table class="table stat-table classificationTable">
+ <thead>
+ <tr>
+ <th class="">Name</th>
+ <th class="">Count <span class="count">(0)</span></th>
+ </tr>
+ </thead>
+ <tbody data-id="classification-card">
+ <tr class="empty text-center">
+ <td colspan="3"><span>No records found!</span></td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ </div>
<div class="panel panel-default custom-panel expand_collapse_panel-icon" data-id="stats">
<div class="panel-heading" data-toggle="collapse" href="#serverDetailcollapse" aria-expanded="true">
<h4 class="panel-title">
@@ -87,8 +114,7 @@
</div>
</div>
</div>
-
- <div class="panel panel-default custom-panel expand_collapse_panel-icon" data-id="systemDetails">
+ <div class="panel panel-default custom-panel expand_collapse_panel-icon" data-id="systemDetails">
<div class="panel-heading" data-toggle="collapse" href="#systemDetailCollapse" aria-expanded="false">
<h4 class="panel-title">
<a>System Details</a>
@@ -144,34 +170,7 @@
</div>
</div>
</div>
- <div class="panel panel-default custom-panel expand_collapse_panel-icon" data-id="classification">
- <div class="panel-heading" data-toggle="collapse" href="#classificationCountCollapse" aria-expanded="false">
- <h4 class="panel-title">
- <a>Classifications <span class="count">(0)</span></a>
- </h4>
- <div class="btn-group pull-left">
- <button type="button" title="Collapse"><i class="ec-icon fa"></i></button>
- </div>
- </div>
- <div id="classificationCountCollapse" class="panel-collapse collapse">
- <div class="panel-body">
- <table class="table stat-table classificationTable">
- <thead>
- <tr>
- <th class="">Name</th>
- <th class="">Count <span class="count">(0)</span></th>
- </tr>
- </thead>
- <tbody data-id="classification-card">
- <tr class="empty text-center">
- <td colspan="3"><span>No records found!</span></td>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
- </div>
</div>
<div class="fontLoader-relative statsLoader show">
<i class="fa fa-refresh fa-spin-custom"></i>
-</div>
+</div>
\ No newline at end of file
diff --git a/dashboardv3/public/js/templates/site/entity_tmpl.html b/dashboardv3/public/js/templates/site/entity_tmpl.html
index 2c7aef5..974006a 100644
--- a/dashboardv3/public/js/templates/site/entity_tmpl.html
+++ b/dashboardv3/public/js/templates/site/entity_tmpl.html
@@ -26,19 +26,25 @@
<tbody>
{{#each data}}
<tr>
- <td>{{@key}}</td>
+ <td><a class="linkClicked" href="#!/search/searchResult?searchType=basic&type={{@key}}&includeDE=true">{{@key}} ({{arithmetic this.active '+' this.deleted}})</a></td>
{{#if this.active}}
- <td>{{this.active}}</td>
+ <td>
+ <a title="Search for active entities of type '{{@key}}'" class="linkClicked" href="#!/search/searchResult?searchType=basic&type={{@key}}">{{this.active}}</a>
+ </td>
{{else}}
<td>0</td>
{{/if}}
{{#if this.deleted}}
- <td>{{this.deleted}}</td>
+ <td class="readOnlyLink">
+ <a title="Search for deleted entities of type '{{@key}}'" class="linkClicked" href="#!/search/searchResult?searchType=basic&type={{@key}}&includeDE=true">{{this.deleted}}</a>
+ </td>
{{else}}
<td>0</td>
{{/if}}
{{#if this.shell}}
- <td>{{this.shell}}</td>
+ <td>
+ {{this.shell}}
+ </td>
{{else}}
<td>0</td>
{{/if}}
diff --git a/dashboardv3/public/js/templates/tag/TagAttributeDetailLayoutView_tmpl.html b/dashboardv3/public/js/templates/tag/TagAttributeDetailLayoutView_tmpl.html
index 290f3fe..4aab7bb 100644
--- a/dashboardv3/public/js/templates/tag/TagAttributeDetailLayoutView_tmpl.html
+++ b/dashboardv3/public/js/templates/tag/TagAttributeDetailLayoutView_tmpl.html
@@ -25,7 +25,7 @@
<h1 class="title"><span data-id="title"></span></h1>
<button type="button" data-id="editButton" class="btn btn-sm btn-action pull-right"><i class="fa fa-pencil"></i></button>
<p class="form-group col-sm-12" data-id="description"></p>
- <div class="superType form-group" style="display:none">
+ <div class="superType form-group col-sm-12" style="display:none">
<label class="control-label-sm-pr pull-left">Direct super-classifications:</label>
<div data-id="superType" class="btn-inline">
</div>
diff --git a/dashboardv3/public/js/utils/CommonViewFunction.js b/dashboardv3/public/js/utils/CommonViewFunction.js
index 1c6aff3..aa9c526 100644
--- a/dashboardv3/public/js/utils/CommonViewFunction.js
+++ b/dashboardv3/public/js/utils/CommonViewFunction.js
@@ -372,7 +372,7 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
return '<span class="operator">' + obj.condition + '</span>' + '(' + objToString(obj).join("") + ')';
} else {
if (isCapsuleView) {
- return '<div class="capsuleView"><span class="key">' + _.escape(obj.id) + '</span><span class="operator">' + _.escape(obj.operator) + '</span><span class="value">' + _.escape(obj.value) + "</span><div class='fa fa-close clear-attr' data-type=" + type + " data-id="+_.escape(obj.id)+"></div></div>";
+ return '<div class="capsuleView"><span class="key">' + _.escape(obj.id) + '</span><span class="operator">' + _.escape(obj.operator) + '</span><span class="value">' + _.escape(obj.value) + "</span><div class='fa fa-close clear-attr' data-type=" + type + " data-id=" + _.escape(obj.id) + "></div></div>";
}
return '<span class="key">' + _.escape(obj.id) + '</span><span class="operator">' + _.escape(obj.operator) + '</span><span class="value">' + _.escape(obj.value) + "</span>";
}
@@ -902,5 +902,63 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
});
}
}
+ CommonViewFunction.CheckDuplicateAndEmptyInput = function(elements, datalist, view) {
+ var keyMap = new Map(),
+ validation = true,
+ hasDup = [];
+ for (var i = 0; i < elements.length; i++) {
+ var input = elements[i],
+ pEl = input.nextElementSibling,
+ classes = 'form-control',
+ val = input.value.trim();
+ pEl.innerText = "";
+
+ if (val === '') {
+ classes = 'form-control errorClass';
+ validation = false;
+ pEl.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.innerText = 'Duplicate key';
+ } else {
+ keyMap.set(val, val);
+ }
+ }
+ }
+ input.setAttribute('class', classes);
+ }
+ return {
+ validation: validation,
+ hasDuplicate: (hasDup.length === 0 ? false : true)
+ };
+ }
+ CommonViewFunction.getRandomIdAndAnchor = function() {
+ var randomId = "collapse_" + parseInt((Math.random() * 100)) + "_" + new Date().getUTCMilliseconds();
+ return {
+ id: randomId,
+ anchor: "#" + randomId
+ };
+ }
+ CommonViewFunction.udKeysStringParser = function(udKeys) {
+ var o = {};
+ _.each(udKeys.split(','), function(udKey) {
+ var ud = udKey.split(':');
+ o[ud[0]] = ud[1];
+ })
+ return o;
+ }
+ CommonViewFunction.udKeysObjectToStringParser = function(udKeys) {
+ var list = _.map(udKeys, function(udKey) {
+ var t = udKey.key + ':' + udKey.value;
+ return t;
+ });
+ return list.join(',');
+ }
return CommonViewFunction;
-});
+});
\ No newline at end of file
diff --git a/dashboardv3/public/js/views/entity/EntityLabelDefineView.js b/dashboardv3/public/js/views/entity/EntityLabelDefineView.js
index 786eab3..a003d2c 100644
--- a/dashboardv3/public/js/views/entity/EntityLabelDefineView.js
+++ b/dashboardv3/public/js/views/entity/EntityLabelDefineView.js
@@ -17,14 +17,15 @@
*/
define(['require',
-'backbone',
-'hbs!tmpl/entity/EntityLabelDefineView_tmpl',
-'models/VEntity',
-'utils/Utils',
-'utils/Messages',
-'utils/Enums'
-], function(require, Backbone, EntityLabelDefineView_tmpl, VEntity, Utils, Messages, Enums) {
-'use strict';
+ 'backbone',
+ 'hbs!tmpl/entity/EntityLabelDefineView_tmpl',
+ 'models/VEntity',
+ 'utils/Utils',
+ 'utils/Messages',
+ 'utils/Enums',
+ 'utils/CommonViewFunction',
+], function(require, Backbone, EntityLabelDefineView_tmpl, VEntity, Utils, Messages, Enums, CommonViewFunction) {
+ 'use strict';
return Backbone.Marionette.LayoutView.extend({
_viewName: 'REntityLabelDefineView',
@@ -34,7 +35,9 @@ define(['require',
swapItem: this.swapItem,
labels: this.labels,
saveLabels: this.saveLabels,
- readOnlyEntity: this.readOnlyEntity
+ readOnlyEntity: this.readOnlyEntity,
+ div_1: this.dynamicId_1,
+ div_2: this.dynamicId_2
};
},
ui: {
@@ -51,36 +54,56 @@ define(['require',
},
initialize: function(options) {
var self = this;
- _.extend(this, _.pick(options, 'entity'));
+ _.extend(this, _.pick(options, 'entity', 'customFilter'));
this.swapItem = false, this.saveLabels = false;
- this.readOnlyEntity = Enums.entityStateReadOnly[this.entity.status]
+ this.readOnlyEntity = this.customFilter === undefined ? Enums.entityStateReadOnly[this.entity.status] : this.customFilter;
this.entityModel = new VEntity(this.entity);
this.labels = this.entity.labels || [];
+ this.dynamicId_1 = CommonViewFunction.getRandomIdAndAnchor();
+ this.dynamicId_2 = CommonViewFunction.getRandomIdAndAnchor();
},
onRender: function() {
this.populateLabelOptions();
},
- bindEvents: function () {
- },
+ bindEvents: function() {},
populateLabelOptions: function() {
var that = this,
- str = this.labels.map(function (label) {
- return "<option selected > "+ label +" </option>";
- });
+ str = this.labels.map(function(label) {
+ return "<option selected > " + label + " </option>";
+ });
this.ui.addLabelOptions.html(str);
this.ui.addLabelOptions.select2({
placeholder: "Select Label",
- allowClear: true,
+ allowClear: false,
tags: true,
- multiple: true
+ multiple: true,
+ matcher: function(params, data) {
+ if (params.term === data.text) {
+ return data;
+ }
+ return null;
+ },
+ templateResult: this.formatResultSearch
});
},
- onChangeLabelChange: function () {
- this.labels = this.ui.addLabelOptions.val();
+ formatResultSearch: function(state) {
+ if (!state.id) {
+ return state.text;
+ }
+ if (!state.element) {
+ return $("<span>Add<strong> '" + state.text + "'</strong></span>");
+ }
},
- handleBtnClick: function () {
+ onChangeLabelChange: function() {
+ this.labels = this.ui.addLabelOptions.val().map(function(v) { return _.escape(v) });
+ },
+ handleBtnClick: function() {
this.swapItem = !this.swapItem;
- this.saveLabels = this.swapItem === true ? true : false;
+ if (this.customFilter === undefined) {
+ this.saveLabels = this.swapItem === true ? true : false;
+ } else {
+ this.saveLabels = false;
+ }
this.render();
},
saveUserDefinedLabels: function() {
@@ -88,12 +111,12 @@ define(['require',
var entityJson = that.entityModel.toJSON();
if (entityJson.labels !== undefined || this.labels.length !== 0) {
var payload = this.labels;
- that.entityModel.saveEntityLabels(entityJson.guid ,{
+ that.entityModel.saveEntityLabels(entityJson.guid, {
data: JSON.stringify(payload),
type: 'POST',
success: function() {
var msg = entityJson.labels === undefined ? 'addSuccessMessage' : 'editSuccessMessage',
- caption = "One or more label";
+ caption = "One or more label";
if (payload.length === 0) {
msg = 'removeSuccessMessage';
caption = "One or more existing label";
@@ -102,19 +125,19 @@ define(['require',
that.entityModel.set('labels', payload);
}
Utils.notifySuccess({
- content: caption + Messages.getAbbreviationMsg(true, msg)
+ content: caption + Messages.getAbbreviationMsg(true, msg)
});
that.swapItem = false;
that.saveLabels = false;
that.render();
},
- error: function (e) {
+ error: function(e) {
that.ui.saveLabels.attr("disabled", false);
Utils.notifySuccess({
content: e.message
});
},
- complete: function () {
+ complete: function() {
that.ui.saveLabels.attr("disabled", false);
that.render();
}
@@ -122,4 +145,4 @@ define(['require',
}
}
});
-});
+});
\ No newline at end of file
diff --git a/dashboardv3/public/js/views/entity/EntityUserDefineItemView.js b/dashboardv3/public/js/views/entity/EntityUserDefineItemView.js
index a649ca8..38929e2 100644
--- a/dashboardv3/public/js/views/entity/EntityUserDefineItemView.js
+++ b/dashboardv3/public/js/views/entity/EntityUserDefineItemView.js
@@ -41,7 +41,8 @@ define(['require',
itemKey: "[data-type='key']",
itemValue: "[data-type='value']",
addItem: "[data-id='addItem']",
- deleteItem: "[data-id='deleteItem']"
+ deleteItem: "[data-id='deleteItem']",
+ charSupportMsg: "[data-id='charSupportMsg']"
},
/** ui events hash */
events: function() {
@@ -58,24 +59,17 @@ define(['require',
* @constructs
*/
initialize: function(options) {
- var that = this;
- this.editMode = options.mode;
if (options.items.length === 0) {
- this.items = [{ key: "", value: "", mode: this.editMode}];
-
+ this.items = [{ key: "", value: ""}];
} else {
- this.items = options.items.map(function(m) {
- m.mode = that.editMode;
- return m;
- });
+ this.items = options.items;
}
},
onRender: function() {
-
},
onAddItemClick: function(e) {
var el = e.currentTarget;
- this.items.splice(parseInt(el.dataset.index) + 1, 0, { key: "", value: "", mode: this.editMode});
+ this.items.splice(parseInt(el.dataset.index) + 1, 0, { key: "", value: ""});
this.render();
},
onDeleteItemClick: function(e) {
@@ -85,13 +79,26 @@ define(['require',
},
onItemKeyChange: function (e) {
var el = e.currentTarget;
- var val = el.value;
- this.items[ el.dataset.index].key = val;
+ this.handleCharSupport(el);
+ if (!el.value.trim().includes(':')) {
+ this.items[ el.dataset.index].key = _.escape(el.value.trim());
+ }
},
onItemValueChange: function (e) {
var el = e.currentTarget;
- var val = el.value;
- this.items[ el.dataset.index].value = el.value;
+ this.handleCharSupport(el);
+ if (!el.value.trim().includes(':')) {
+ this.items[ el.dataset.index].value = _.escape(el.value.trim());
+ }
+ },
+ handleCharSupport: function(el) {
+ if (el.value.trim().includes(':')) {
+ el.setAttribute('class', 'form-control errorClass');
+ this.ui.charSupportMsg.html("These special character '(:)' are not supported.");
+ } else {
+ el.setAttribute('class', 'form-control');
+ this.ui.charSupportMsg.html("");
+ }
}
});
diff --git a/dashboardv3/public/js/views/entity/EntityUserDefineView.js b/dashboardv3/public/js/views/entity/EntityUserDefineView.js
index bb901ff..a9a9954 100644
--- a/dashboardv3/public/js/views/entity/EntityUserDefineView.js
+++ b/dashboardv3/public/js/views/entity/EntityUserDefineView.js
@@ -22,8 +22,9 @@ define(['require',
'models/VEntity',
'utils/Utils',
'utils/Enums',
-'utils/Messages'
-], function(require, Backbone, EntityUserDefineView_tmpl, VEntity, Utils, Enums, Messages) {
+'utils/Messages',
+'utils/CommonViewFunction',
+], function(require, Backbone, EntityUserDefineView_tmpl, VEntity, Utils, Enums, Messages, CommonViewFunction) {
'use strict';
return Backbone.Marionette.LayoutView.extend({
@@ -34,7 +35,9 @@ define(['require',
customAttibutes: this.customAttibutes,
readOnlyEntity : this.readOnlyEntity,
swapItem: this.swapItem,
- saveAttrItems: this.saveAttrItems
+ saveAttrItems: this.saveAttrItems,
+ divId_1: this.dynamicId_1,
+ divId_2: this.dynamicId_2
};
},
ui: {
@@ -50,12 +53,14 @@ define(['require',
return events;
},
initialize: function(options) {
- _.extend(this, _.pick(options, 'entity'));
+ _.extend(this, _.pick(options, 'entity', 'customFilter'));
this.userDefineAttr = this.entity.customAttributes || [];
this.initialCall = false;
this.swapItem = false, this.saveAttrItems = false;
- this.readOnlyEntity = Enums.entityStateReadOnly[this.entity.status];
+ this.readOnlyEntity = this.customFilter === undefined ? Enums.entityStateReadOnly[this.entity.status] : this.customFilter ;
this.entityModel = new VEntity(this.entity);
+ this.dynamicId_1 = CommonViewFunction.getRandomIdAndAnchor();
+ this.dynamicId_2 = CommonViewFunction.getRandomIdAndAnchor();
this.generateTableFields();
},
onRender: function() {
@@ -77,7 +82,11 @@ define(['require',
},
onAddAttrClick: function() {
this.swapItem = !this.swapItem;
- this.saveAttrItems = this.swapItem === true ? true : false;
+ if (this.customFilter === undefined) {
+ this.saveAttrItems = this.swapItem === true ? true : false;
+ } else {
+ this.saveAttrItems = false;
+ }
this.initialCall = true;
this.render();
if (this.swapItem === true) {
@@ -146,41 +155,10 @@ define(['require',
var self = this;
this.ui.saveAttrItems.attr("disabled", true);
var list = itemView.$el.find("[data-type]"),
- keyMap = new Map(),
- validation = true,
- hasDup = [],
dataList = [];
Array.prototype.push.apply(dataList, itemView.items);
- for(var i = 0; i < list.length ; i++) {
- var input = list[i],
- type = input.dataset.type,
- pEl = itemView.$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) {
+ var field = CommonViewFunction.CheckDuplicateAndEmptyInput(list, dataList);
+ if (field.validation && !field.hasDuplicate) {
self.saveAttributes(itemView.items);
} else {
this.ui.saveAttrItems.attr("disabled", false);
diff --git a/dashboardv3/public/js/views/glossary/GlossaryLayoutView.js b/dashboardv3/public/js/views/glossary/GlossaryLayoutView.js
index 6f0bf23..c8cda4f 100644
--- a/dashboardv3/public/js/views/glossary/GlossaryLayoutView.js
+++ b/dashboardv3/public/js/views/glossary/GlossaryLayoutView.js
@@ -440,7 +440,7 @@ define(['require',
}
},
"themes": {
- "name": that.isAssignView ? "default" : "proton",
+ "name": that.isAssignView ? "default" : "default-dark",
"dots": true
},
}
@@ -556,10 +556,9 @@ define(['require',
createTermAction: function() {
var that = this;
Utils.generatePopover({
- el: this.$el,
+ el: this.$('.termPopover'),
contentClass: 'termPopoverOptions',
popoverOptions: {
- selector: '[rel="popover"].termPopover',
content: function() {
var node = that.query[that.viewType],
liString = "";
diff --git a/dashboardv3/public/js/views/site/Statistics.js b/dashboardv3/public/js/views/site/Statistics.js
index b3cf21f..fcee124 100644
--- a/dashboardv3/public/js/views/site/Statistics.js
+++ b/dashboardv3/public/js/views/site/Statistics.js
@@ -43,8 +43,8 @@ define(['require',
regions: {},
/** ui selector cache */
ui: {
- entityHeader: "[data-id='entity'] .count",
- classificationHeader: "[data-id='classification'] .count",
+ entity: "[data-id='entity']",
+ classification: "[data-id='classification']",
serverCard: "[data-id='server-card']",
connectionCard: "[data-id='connection-card']",
notificationCard: "[data-id='notification-card']",
@@ -66,6 +66,7 @@ define(['require',
initialize: function(options) {
_.extend(this, options);
var that = this;
+ this.DATA_MAX_LENGTH = 25;
var modal = new Modal({
title: 'Statistics',
content: this,
@@ -89,7 +90,12 @@ define(['require',
});
this.modal = modal;
},
- bindEvents: function() {},
+ bindEvents: function() {
+ var that = this;
+ this.$el.on('click', '.linkClicked', function() {
+ that.modal.close();
+ })
+ },
fetchMetricData: function(options) {
var that = this;
this.metricCollection.fetch({
@@ -112,8 +118,14 @@ define(['require',
});
},
onRender: function() {
+ this.bindEvents();
this.fetchMetricData();
},
+ closePanel: function(options) {
+ var el = options.el;
+ el.find(">.panel-heading").attr("aria-expanded", "false");
+ el.find(">.panel-collapse.collapse").removeClass("in");
+ },
genrateStatusData: function(stateObject) {
var that = this,
stats = {};
@@ -133,11 +145,16 @@ define(['require',
createTable: function(obj) {
var that = this,
tableBody = '',
+ type = obj.type,
data = obj.data;
_.each(data, function(value, key, list) {
- tableBody += '<tr><td>' + key + '</td><td class="">' + that.getValue({
+ var newValue = that.getValue({
"value": value
- }) + '</td></tr>';
+ });
+ if (type === "classification") {
+ newValue = '<a title="Search for entities associated with \'' + key + '\'" class="linkClicked" href="#!/search/searchResult?searchType=basic&tag=' + key + '">' + newValue + '<a>';
+ }
+ tableBody += '<tr><td>' + key + '</td><td class="">' + newValue + '</td></tr>';
});
return tableBody;
@@ -148,8 +165,9 @@ define(['require',
classificationData = data.tag || {},
tagEntitiesData = classificationData ? classificationData.tagEntities || {} : {},
tagsCount = 0,
- newTagEntitiesData = {};
- _.each(_.sortBy(_.keys(tagEntitiesData), function(o) {
+ newTagEntitiesData = {},
+ tagEntitiesKeys = _.keys(tagEntitiesData);
+ _.each(_.sortBy(tagEntitiesKeys, function(o) {
return o.toLocaleLowerCase();
}), function(key) {
var val = tagEntitiesData[key];
@@ -161,10 +179,16 @@ define(['require',
if (!_.isEmpty(tagEntitiesData)) {
this.ui.classificationCard.html(
that.createTable({
- "data": tagEntitiesData
+ "data": tagEntitiesData,
+ "type": "classification"
})
);
- this.ui.classificationHeader.html(" (" + _.numberFormatWithComa(tagsCount) + ")");
+ this.ui.classification.find(".count").html(" (" + _.numberFormatWithComa(tagsCount) + ")");
+ if (tagEntitiesKeys.length > this.DATA_MAX_LENGTH) {
+ this.closePanel({
+ el: this.ui.classification
+ })
+ }
}
},
renderEntities: function(options) {
@@ -215,17 +239,23 @@ define(['require',
"type": "shell"
});
if (!_.isEmpty(stats)) {
- that.ui.entityCard.html(
+ var statsKeys = _.keys(stats);
+ this.ui.entityCard.html(
EntityTable({
- "data": _.pick(stats, _.sortBy(_.keys(stats), function(o) {
+ "data": _.pick(stats, _.sortBy(statsKeys, function(o) {
return o.toLocaleLowerCase();
})),
})
);
- that.$('[data-id="activeEntity"]').html(" (" + _.numberFormatWithComa(activeEntityCount) + ")");
- that.$('[data-id="deletedEntity"]').html(" (" + _.numberFormatWithComa(deletedEntityCount) + ")");
- that.$('[data-id="shellEntity"]').html(" (" + _.numberFormatWithComa(shellEntityCount) + ")");
- that.ui.entityHeader.html(" (" + _.numberFormatWithComa(data.general.entityCount) + ")");
+ this.$('[data-id="activeEntity"]').html(" (" + _.numberFormatWithComa(activeEntityCount) + ")");
+ this.$('[data-id="deletedEntity"]').html(" (" + _.numberFormatWithComa(deletedEntityCount) + ")");
+ this.$('[data-id="shellEntity"]').html(" (" + _.numberFormatWithComa(shellEntityCount) + ")");
+ this.ui.entity.find(".count").html(" (" + _.numberFormatWithComa(data.general.entityCount) + ")");
+ if (statsKeys.length > this.DATA_MAX_LENGTH) {
+ this.closePanel({
+ el: this.ui.entity
+ })
+ }
}
},
renderStats: function(options) {