mirror of
https://github.com/datahub-project/datahub.git
synced 2025-07-23 09:32:04 +00:00
871 lines
25 KiB
JavaScript
871 lines
25 KiB
JavaScript
var currentTab;
|
|
function setOwnerNameAutocomplete(controller) {
|
|
if (!controller) {
|
|
return;
|
|
}
|
|
|
|
$('.userEntity').blur(function (data) {
|
|
var userEntitiesMaps = controller.get("userEntitiesMaps");
|
|
var value = this.value;
|
|
if (userEntitiesMaps[value]) {
|
|
controller.set("showMsg", false);
|
|
var owners = controller.get("owners");
|
|
for (var i = 0; i < owners.length; i++) {
|
|
if (owners[i].userName == value) {
|
|
Ember.set(owners[i], "name", userEntitiesMaps[value]);
|
|
if (userEntitiesMaps[value]) {
|
|
Ember.set(owners[i], "isGroup", false);
|
|
}
|
|
else {
|
|
Ember.set(owners[i], "isGroup", true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
controller.set("showMsg", true);
|
|
controller.set("alertType", "alert-danger");
|
|
controller.set("ownerMessage", "The user name '" + value + "' is invalid");
|
|
}
|
|
});
|
|
|
|
$('.userEntity').autocomplete({
|
|
select: function (event, ui) {
|
|
var userEntitiesMaps = controller.get("userEntitiesMaps");
|
|
var value = ui.item.value;
|
|
if (value in userEntitiesMaps) {
|
|
var owners = controller.get("owners");
|
|
for (var i = 0; i < owners.length; i++) {
|
|
if (owners[i].userName == value) {
|
|
controller.set("showMsg", false);
|
|
Ember.set(owners[i], "name", userEntitiesMaps[value]);
|
|
if (userEntitiesMaps[value]) {
|
|
Ember.set(owners[i], "isGroup", false);
|
|
}
|
|
else {
|
|
Ember.set(owners[i], "isGroup", true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
source: function (request, response) {
|
|
var userEntitiesSource = controller.get("userEntitiesSource");
|
|
var results = $.ui.autocomplete.filter(userEntitiesSource, request.term);
|
|
response(results.slice(0, 20));
|
|
}
|
|
|
|
});
|
|
}
|
|
|
|
var insertListAtCursor = function (myField, myValue, number) {
|
|
if (myField[0].selectionStart || myField[0].selectionStart == '0') {
|
|
var startPos = myField[0].selectionStart;
|
|
var endPos = myField[0].selectionEnd;
|
|
var selection;
|
|
var value;
|
|
if (endPos > startPos) {
|
|
selection = myField.val().substring(startPos, endPos);
|
|
}
|
|
var insertvalue = "";
|
|
if (selection) {
|
|
var lines = selection.split('\n');
|
|
for (var i = 0; i < lines.length; i++) {
|
|
if (number == 'numbered') {
|
|
insertvalue += (i + 1) + ".";
|
|
}
|
|
else if (number == 'bulleted') {
|
|
insertvalue += "-";
|
|
}
|
|
else if (number == 'blockquote') {
|
|
insertvalue += "> ";
|
|
}
|
|
insertvalue += " " + lines[i];
|
|
if (i < lines.length) {
|
|
insertvalue += "\n";
|
|
}
|
|
}
|
|
value = myField.val().substring(0, startPos) + insertvalue + myField.val().substring(endPos, myField.val().length);
|
|
myField.val(value);
|
|
myField[0].selectionEnd = myField.selectionStart = startPos + insertvalue.length;
|
|
return;
|
|
}
|
|
}
|
|
|
|
var lines = myValue.split('\n');
|
|
for (var i = 0; i < lines.length; i++) {
|
|
if (number == 'numbered') {
|
|
insertvalue += (i + 1) + ".";
|
|
}
|
|
else if (number == 'bulleted') {
|
|
insertvalue += "-";
|
|
}
|
|
else if (number == 'blockquote') {
|
|
insertvalue += ">";
|
|
}
|
|
insertvalue += " " + lines[i];
|
|
if (i < lines.length) {
|
|
insertvalue += "\n";
|
|
}
|
|
}
|
|
value = myField.val() + '\n' + insertvalue;
|
|
myField.val(value);
|
|
};
|
|
|
|
var insertSourcecodeAtCursor = function (myField) {
|
|
if (myField[0].selectionStart || myField[0].selectionStart == '0') {
|
|
var startPos = myField[0].selectionStart;
|
|
var endPos = myField[0].selectionEnd;
|
|
var selection;
|
|
var value;
|
|
if (endPos > startPos) {
|
|
selection = myField.val().substring(startPos, endPos);
|
|
}
|
|
var insertvalue = "```\n";
|
|
if (selection) {
|
|
insertvalue += selection + '\n```';
|
|
}
|
|
else {
|
|
insertvalue += 'code text' + '\n```\n';
|
|
}
|
|
value = myField.val().substring(0, startPos) + insertvalue + myField.val().substring(endPos, myField.val().length);
|
|
myField.val(value);
|
|
myField[0].selectionEnd = myField.selectionStart = startPos + insertvalue.length;
|
|
return;
|
|
}
|
|
var insertvalue = "```\n";
|
|
insertvalue += 'code text' + '\n```\n';
|
|
value = myField.val() + '\n' + insertvalue;
|
|
myField.val(value);
|
|
};
|
|
|
|
var datasetCommentsComponent = null;
|
|
var insertAtCursor = function (myField, myValue, newline) {
|
|
if (myField[0].selectionStart || myField[0].selectionStart == '0') {
|
|
var startPos = myField[0].selectionStart;
|
|
var endPos = myField[0].selectionEnd;
|
|
var value;
|
|
if (newline) {
|
|
value = myField.val().substring(0, startPos) + '\n' +
|
|
myValue + myField.val().substring(endPos, myField.val().length);
|
|
}
|
|
else {
|
|
value = myField.val().substring(0, startPos) +
|
|
myValue + myField.val().substring(endPos, myField.val().length);
|
|
}
|
|
|
|
myField.val(value);
|
|
myField[0].selectionEnd = myField.selectionStart = startPos + myValue.length;
|
|
} else {
|
|
var value;
|
|
if (newline) {
|
|
value = myField.val() + '\n' + myValue;
|
|
}
|
|
else {
|
|
value = myField.val() + myValue;
|
|
}
|
|
|
|
myField.val(value);
|
|
}
|
|
};
|
|
|
|
|
|
var insertImageAtCursor = function (myField, param) {
|
|
if (myField[0].selectionStart || myField[0].selectionStart == '0') {
|
|
var startPos = myField[0].selectionStart;
|
|
var endPos = myField[0].selectionEnd;
|
|
var selection;
|
|
var value;
|
|
if (endPos > startPos) {
|
|
selection = myField.val().substring(startPos, endPos);
|
|
}
|
|
var insertvalue = "";
|
|
if (selection && selection.length > 0 &&
|
|
(selection.substr(0, 7) == 'http://' || selection.substr(0, 7) == 'https:/')) {
|
|
if (param == 'image') {
|
|
insertvalue = "[alt text](" + selection + ")";
|
|
}
|
|
else {
|
|
insertvalue = "[" + selection + "](" + selection + ")";
|
|
}
|
|
|
|
}
|
|
else {
|
|
if (param == 'image') {
|
|
insertvalue = "";
|
|
}
|
|
else {
|
|
insertvalue = "[example link](http://example.com/)";
|
|
}
|
|
|
|
}
|
|
value = myField.val().substring(0, startPos) + insertvalue + myField.val().substring(endPos, myField.val().length);
|
|
myField.val(value);
|
|
myField[0].selectionEnd = myField.selectionStart = startPos + insertvalue.length;
|
|
return;
|
|
}
|
|
if (param == 'image') {
|
|
insertvalue = "";
|
|
}
|
|
else {
|
|
insertvalue = "[example link](http://example.com/)";
|
|
}
|
|
value = myField.val() + '\n' + insertvalue;
|
|
myField.val(value);
|
|
};
|
|
|
|
var updatePreview = function () {
|
|
var text = $("#datasetSchemaComment-write > textarea").val()
|
|
$("#datasetSchemaComment-preview").html(marked(text))
|
|
}
|
|
var g;
|
|
var svg;
|
|
var l;
|
|
var rotation = 1;
|
|
var g_currentData;
|
|
var g_scale = 1;
|
|
var g_upLevel = 1;
|
|
var g_downLevel = 1;
|
|
|
|
var convertQueryStringToObject = function () {
|
|
var queryString = {}
|
|
var uri = window.location.hash || window.location.search
|
|
uri.replace(
|
|
new RegExp("([^?=&]+)(=([^&]*))?", "g"),
|
|
function ($0, $1, $2, $3) {
|
|
queryString[$1] = $3
|
|
}
|
|
)
|
|
return queryString;
|
|
}
|
|
|
|
function resetCategoryActiveFlag(category) {
|
|
$('#categoryDatasets').removeClass('active');
|
|
$('#categoryComments').removeClass('active');
|
|
$('#categoryMetrics').removeClass('active');
|
|
$('#categoryFlows').removeClass('active');
|
|
$('#categoryJobs').removeClass('active');
|
|
if (category.toLowerCase() == 'datasets') {
|
|
$('#categoryDatasets').addClass('active');
|
|
}
|
|
else if (category.toLowerCase() == 'comments') {
|
|
$('#categoryComments').addClass('active');
|
|
}
|
|
else if (category.toLowerCase() == 'metrics') {
|
|
$('#categoryMetrics').addClass('active');
|
|
}
|
|
else if (category.toLowerCase() == 'flows') {
|
|
$('#categoryFlows').addClass('active');
|
|
}
|
|
else if (category.toLowerCase() == 'jobs') {
|
|
$('#categoryJobs').addClass('active');
|
|
}
|
|
currentCategory = category;
|
|
}
|
|
|
|
function updateSearchCategories(category) {
|
|
if (category.toLowerCase() == 'all') {
|
|
$('#categoryIcon').removeClass('fa fa-list');
|
|
$('#categoryIcon').removeClass('fa fa-database');
|
|
$('#categoryIcon').removeClass('fa fa-comment');
|
|
$('#categoryIcon').removeClass('fa fa-random');
|
|
$('#categoryIcon').removeClass('fa fa-plus-square-o');
|
|
$('#categoryIcon').removeClass('fa fa-file-o');
|
|
$('#categoryIcon').addClass('fa fa-list');
|
|
}
|
|
else if (category.toLowerCase() == 'datasets') {
|
|
$('#categoryIcon').removeClass('fa fa-list');
|
|
$('#categoryIcon').removeClass('fa fa-database');
|
|
$('#categoryIcon').removeClass('fa fa-comment');
|
|
$('#categoryIcon').removeClass('fa fa-random');
|
|
$('#categoryIcon').removeClass('fa fa-plus-square-o');
|
|
$('#categoryIcon').removeClass('fa fa-file-o');
|
|
$('#categoryIcon').addClass('fa fa-database');
|
|
}
|
|
else if (category.toLowerCase() == 'comments') {
|
|
$('#categoryIcon').removeClass('fa fa-list');
|
|
$('#categoryIcon').removeClass('fa fa-database');
|
|
$('#categoryIcon').removeClass('fa fa-comment');
|
|
$('#categoryIcon').removeClass('fa fa-random');
|
|
$('#categoryIcon').removeClass('fa fa-plus-square-o');
|
|
$('#categoryIcon').removeClass('fa fa-file-o');
|
|
$('#categoryIcon').addClass('fa fa-comment');
|
|
}
|
|
else if (category.toLowerCase() == 'metrics') {
|
|
$('#categoryIcon').removeClass('fa fa-list');
|
|
$('#categoryIcon').removeClass('fa fa-database');
|
|
$('#categoryIcon').removeClass('fa fa-comment');
|
|
$('#categoryIcon').removeClass('fa fa-random');
|
|
$('#categoryIcon').removeClass('fa fa-plus-square-o');
|
|
$('#categoryIcon').removeClass('fa fa-file-o');
|
|
$('#categoryIcon').addClass('fa fa-plus-square-o');
|
|
}
|
|
else if (category.toLowerCase() == 'flows') {
|
|
$('#categoryIcon').removeClass('fa fa-list');
|
|
$('#categoryIcon').removeClass('fa fa-database');
|
|
$('#categoryIcon').removeClass('fa fa-comment');
|
|
$('#categoryIcon').removeClass('fa fa-random');
|
|
$('#categoryIcon').removeClass('fa fa-plus-square-o');
|
|
$('#categoryIcon').removeClass('fa fa-file-o');
|
|
$('#categoryIcon').addClass('fa fa-random');
|
|
}
|
|
else if (category.toLowerCase() == 'jobs') {
|
|
$('#categoryIcon').removeClass('fa fa-list');
|
|
$('#categoryIcon').removeClass('fa fa-database');
|
|
$('#categoryIcon').removeClass('fa fa-comment');
|
|
$('#categoryIcon').removeClass('fa fa-random');
|
|
$('#categoryIcon').removeClass('fa fa-plus-square-o');
|
|
$('#categoryIcon').removeClass('fa fa-file-o');
|
|
$('#categoryIcon').addClass('fa fa-file-o');
|
|
}
|
|
resetCategoryActiveFlag(category);
|
|
}
|
|
|
|
String.prototype.toProperCase = function () {
|
|
return this.replace(/\w\S*/g, function (txt) {
|
|
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()
|
|
})
|
|
}
|
|
|
|
function renderDatasetListView(nodes, name) {
|
|
var folderTemplate = '<a href="$URL" class="list-group-item"><i class="fa fa-folder"></i> $NODE_NAME</a>';
|
|
var datasetTemplate = '<a href="$URL" class="list-group-item"><i class="fa fa-database"></i> $NODE_NAME</a>';
|
|
var activeTemplate = '<a href="$URL" class="active list-group-item"><i class="fa fa-database"></i> $NODE_NAME</a>';
|
|
var obj = $('#datasetlist');
|
|
if (!obj)
|
|
return;
|
|
obj.empty();
|
|
var activeObj;
|
|
for (var i = 0; i < nodes.length; i++) {
|
|
if (nodes[i].datasetId && nodes[i].datasetId > 0) {
|
|
if (name && name == nodes[i].nodeName) {
|
|
|
|
obj.append(activeTemplate.replace('$NODE_NAME', nodes[i].nodeName).replace("$URL", nodes[i].nodeUrl));
|
|
}
|
|
else {
|
|
obj.append(datasetTemplate.replace('$NODE_NAME', nodes[i].nodeName).replace("$URL", nodes[i].nodeUrl));
|
|
}
|
|
}
|
|
else {
|
|
obj.append(folderTemplate.replace('$NODE_NAME', nodes[i].nodeName).replace("$URL", nodes[i].nodeUrl));
|
|
}
|
|
|
|
}
|
|
if (activeObj) {
|
|
var scrollToActiveNode = function () {
|
|
$("#tabSplitter").scrollTo(activeObj, 800)
|
|
}
|
|
}
|
|
}
|
|
|
|
function renderFlowListView(nodes, flowId) {
|
|
var folderTemplate = '<a href="$URL" class="list-group-item"><i class="fa fa-folder"></i> $NODE_NAME</a>';
|
|
var flowTemplate = '<a href="$URL" class="list-group-item"><i class="fa fa-random"></i> $NODE_NAME</a>';
|
|
var activeTemplate = '<a href="$URL" class="active list-group-item"><i class="fa fa-random"></i> $NODE_NAME</a>';
|
|
var obj = $('#flowlist');
|
|
if (!obj)
|
|
return;
|
|
obj.empty();
|
|
var activeObj;
|
|
for (var i = 0; i < nodes.length; i++) {
|
|
if (nodes[i].flowId && nodes[i].flowId > 0) {
|
|
if (flowId == nodes[i].flowId) {
|
|
activeObj = obj.append(activeTemplate.replace('$NODE_NAME', nodes[i].nodeName).replace("$URL", nodes[i].nodeUrl));
|
|
}
|
|
else {
|
|
obj.append(flowTemplate.replace('$NODE_NAME', nodes[i].nodeName).replace("$URL", nodes[i].nodeUrl));
|
|
}
|
|
}
|
|
else {
|
|
obj.append(folderTemplate.replace('$NODE_NAME', nodes[i].nodeName).replace("$URL", nodes[i].nodeUrl));
|
|
}
|
|
|
|
}
|
|
if (activeObj) {
|
|
var scrollToActiveNode = function () {
|
|
$("#tabSplitter").scrollTo(activeObj, 800)
|
|
}
|
|
}
|
|
}
|
|
|
|
function renderMetricListView(nodes, metricId) {
|
|
var folderTemplate = '<a href="$URL" class="list-group-item"><i class="fa fa-folder"></i>$NODE_NAME</a>';
|
|
var metricTemplate = '<a href="$URL" class="list-group-item"><i class="fa fa-plus-square-o"></i>$NODE_NAME</a>';
|
|
var activeTemplate = '<a href="$URL" class="active list-group-item"><i class="fa fa-plus-square-o"></i>$NODE_NAME</a>';
|
|
var obj = $('#metriclist');
|
|
if (!obj)
|
|
return;
|
|
obj.empty();
|
|
var activeObj;
|
|
for (var i = 0; i < nodes.length; i++) {
|
|
if (nodes[i].metricId && nodes[i].metricId > 0) {
|
|
if (metricId == nodes[i].metricId) {
|
|
activeObj = obj.append(activeTemplate.replace('$NODE_NAME', nodes[i].nodeName).replace("$URL", nodes[i].nodeUrl));
|
|
}
|
|
else {
|
|
obj.append(metricTemplate.replace('$NODE_NAME', nodes[i].nodeName).replace("$URL", nodes[i].nodeUrl));
|
|
}
|
|
}
|
|
else {
|
|
obj.append(folderTemplate.replace('$NODE_NAME', nodes[i].nodeName).replace("$URL", nodes[i].nodeUrl));
|
|
}
|
|
|
|
}
|
|
if (activeObj) {
|
|
var scrollToActiveNode = function () {
|
|
$("#tabSplitter").scrollTo(activeObj, 800)
|
|
}
|
|
}
|
|
}
|
|
|
|
function filterListView(category, filter) {
|
|
var obj = $('#flowlist');
|
|
if (category == 'Datasets') {
|
|
obj = $('#datasetlist');
|
|
}
|
|
else if (category == 'Metrics') {
|
|
obj = $('#metriclist');
|
|
}
|
|
|
|
if (!obj || !obj.children() || obj.children().length == 0) {
|
|
return;
|
|
}
|
|
|
|
var items = obj.children();
|
|
|
|
for (var i = 0; i < items.length; i++) {
|
|
if (!filter) {
|
|
$(items[i]).show();
|
|
}
|
|
else if (items[i].text && items[i].text.toLowerCase().includes(filter.toLowerCase())) {
|
|
$(items[i]).show();
|
|
}
|
|
else {
|
|
$(items[i]).hide();
|
|
}
|
|
}
|
|
}
|
|
|
|
function initializeColumnTreeGrid() {
|
|
$('#json-table').treegrid();
|
|
}
|
|
|
|
function highlightResultsforAdvSearch(result, index) {
|
|
var content = result[index].schema;
|
|
var len = content.length;
|
|
if (len > 500) {
|
|
content = content.substring(0, 500);
|
|
}
|
|
result[index].schema = content;
|
|
};
|
|
|
|
function initializeDependsTreeGrid() {
|
|
$('#depends-table').treegrid();
|
|
}
|
|
|
|
function initializeReferencesTreeGrid() {
|
|
$('#references-table').treegrid();
|
|
}
|
|
|
|
function formatValue(key, value) {
|
|
switch (key) {
|
|
case 'modification_time':
|
|
case 'begin_date':
|
|
case 'lumos_process_time':
|
|
case 'end_date':
|
|
case 'oracle_time':
|
|
if (value < 0)
|
|
return value
|
|
var obj = value;
|
|
try {
|
|
obj = new Date(value).toISOString();
|
|
}
|
|
catch (err) {
|
|
console.log("Invalid date for " + key + " : " + value);
|
|
}
|
|
return obj;
|
|
break;
|
|
case 'dumpdate':
|
|
var y = value.substring(0, 4)
|
|
var mm = value.substring(4, 6)
|
|
var d = value.substring(6, 8)
|
|
var h = value.substring(8, 10)
|
|
var m = value.substring(10, 12)
|
|
var s = value.substring(12, 14)
|
|
return y + '-' + mm + '-' + d + ' ' + h + ':' + m + ':' + s
|
|
break;
|
|
default:
|
|
return value;
|
|
}
|
|
}
|
|
|
|
function convertPropertiesToArray(properties) {
|
|
var propertyArray = [];
|
|
if (properties) {
|
|
for (var key in properties) {
|
|
if ((key.toLowerCase() != 'elements') && (key.toLowerCase() != 'view_depends_on')) {
|
|
var isSelectController = false;
|
|
if (key.toLowerCase() == 'view_expanded_text' || key.toLowerCase() == 'viewSqlText') {
|
|
isSelectController = true;
|
|
}
|
|
else {
|
|
isSelectController = false;
|
|
}
|
|
if (typeof properties[key] !== 'object') {
|
|
if (key == 'connectionURL' && properties[key]) {
|
|
var list = properties[key].split(',');
|
|
if (list && list.length > 0) {
|
|
propertyArray.push({
|
|
'isSelectController': isSelectController,
|
|
'key': key, 'value': JsonHuman.format(list)
|
|
});
|
|
}
|
|
else {
|
|
propertyArray.push({
|
|
'isSelectController': isSelectController,
|
|
'key': key, 'value': properties[key]
|
|
});
|
|
}
|
|
}
|
|
else {
|
|
var value = formatValue(key, properties[key]);
|
|
if (!value && !(value === 0))
|
|
value = 'NULL';
|
|
propertyArray.push({
|
|
'isSelectController': isSelectController,
|
|
'key': key, 'value': value
|
|
});
|
|
}
|
|
}
|
|
else {
|
|
propertyArray.push({
|
|
'isSelectController': isSelectController,
|
|
'key': key, 'value': JsonHuman.format(properties[key])
|
|
});
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
return propertyArray;
|
|
}
|
|
var datasetController = null;
|
|
var flowsController = null;
|
|
var metricsController = null;
|
|
|
|
var update = function (param) {
|
|
if (param && param.name) {
|
|
var name = param.name;
|
|
var val = param.value;
|
|
var metricId = param.pk;
|
|
var url = '/api/v1/metrics/' + metricId + '/update';
|
|
var method = 'POST';
|
|
var token = $("#csrfToken").val().replace('/', '');
|
|
var data = {"csrfToken": token};
|
|
data[name] = val;
|
|
$.ajax({
|
|
url: url,
|
|
method: method,
|
|
headers: {
|
|
'Csrf-Token': token
|
|
},
|
|
dataType: 'json',
|
|
data: data
|
|
}).done(function (data, txt, xhr) {
|
|
if (data && data.status && data.status == "success") {
|
|
console.log('Done.')
|
|
}
|
|
else {
|
|
console.log('Failed.')
|
|
}
|
|
}).fail(function (xhr, txt, err) {
|
|
Notify.toast("Failed to update data", "Metric Update Failure", "error")
|
|
})
|
|
}
|
|
|
|
}
|
|
function initializeXEditable(id,
|
|
description,
|
|
dashboardName,
|
|
sourceType,
|
|
grain,
|
|
displayFactor,
|
|
displayFactorSym) {
|
|
$.fn.editable.defaults.mode = 'inline';
|
|
|
|
//below code is a walk around for xeditable and ember integration issue
|
|
|
|
$('.xeditable').editable("disable");
|
|
$('.xeditable').editable("destroy");
|
|
|
|
$('#metricdesc').text(description);
|
|
$('#metricdesc').editable({
|
|
pk: id,
|
|
value: description,
|
|
url: update
|
|
});
|
|
|
|
$('#dashboardname').text(dashboardName);
|
|
$('#dashboardname').editable({
|
|
pk: id,
|
|
value: dashboardName,
|
|
url: update
|
|
});
|
|
|
|
$('#sourcetype').text(sourceType);
|
|
$('#sourcetype').editable({
|
|
pk: id,
|
|
value: sourceType,
|
|
url: update
|
|
});
|
|
|
|
$('#metricgrain').text(grain);
|
|
$('#metricgrain').editable({
|
|
pk: id,
|
|
value: grain,
|
|
url: update
|
|
});
|
|
|
|
$('#displayfactor').text(displayFactor);
|
|
$('#displayfactor').editable({
|
|
pk: id,
|
|
value: displayFactor,
|
|
url: update
|
|
});
|
|
|
|
$('#displayfactorsym').text(displayFactorSym);
|
|
$('#displayfactorsym').editable({
|
|
pk: id,
|
|
value: displayFactorSym,
|
|
url: update
|
|
});
|
|
}
|
|
function updateActiveTab() {
|
|
var obj = $("#mainnavbar .nav").find(".active");
|
|
if (obj && obj.length > 0) {
|
|
var text = obj[0].innerText;
|
|
if (text && text.indexOf(currentTab) != -1) {
|
|
return;
|
|
}
|
|
}
|
|
if (obj) {
|
|
obj.removeClass("active");
|
|
}
|
|
|
|
if (currentTab == 'Metrics') {
|
|
$('#menutabs a:eq(1)').tab("show");
|
|
$('#metriclink').addClass("active");
|
|
|
|
}
|
|
else if (currentTab == 'Flows') {
|
|
$('#menutabs a:last').tab("show");
|
|
$('#flowlink').addClass("active");
|
|
}
|
|
else {
|
|
$('#menutabs a:first').tab("show");
|
|
$('#datasetlink').addClass("active");
|
|
}
|
|
}
|
|
|
|
function findAndActiveDatasetNode(name, urn) {
|
|
var rootNode = $('#tree2').fancytree("getRootNode");
|
|
if (!rootNode.isLoading()) {
|
|
var nodes = rootNode.findAll(name);
|
|
for (var i in nodes) {
|
|
if (nodes[i] && nodes[i].data && nodes[i].data.path == urn) {
|
|
window.g_skipDatasetTreeActivation = true;
|
|
nodes[i].setActive(true, {
|
|
noEvents: true
|
|
});
|
|
scrollToTreeNode();
|
|
return;
|
|
}
|
|
}
|
|
} else {
|
|
window.g_currentDatasetNodeName = name;
|
|
window.g_currentDatasetNodeUrn = urn;
|
|
}
|
|
}
|
|
|
|
function findAndActiveMetricNode(name, id) {
|
|
var rootNode = $("#tree1").fancytree("getRootNode");
|
|
if (!rootNode.isLoading()) {
|
|
var nodes = rootNode.findAll(name);
|
|
for (var i in nodes) {
|
|
if (nodes[i] && nodes[i].data && nodes[i].data.metric_id == id) {
|
|
window.g_skipMetricTreeActivation = true;
|
|
nodes[i].setActive();
|
|
scrollToTreeNode();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
window.g_currentMetricNodeName = name;
|
|
window.g_currentMetricNodeId = id;
|
|
window.g_currentMetricDashboardName = null;
|
|
window.g_currentMetricGroupName = null;
|
|
}
|
|
};
|
|
|
|
function findAndActiveMetricDashboardNode(name) {
|
|
var rootNode = $("#tree1").fancytree("getRootNode");
|
|
if (!rootNode.isLoading()) {
|
|
var nodes = rootNode.findAll(name);
|
|
for (var i in nodes) {
|
|
if (nodes[i] && nodes[i].data && nodes[i].data.dashboard_name == name && nodes[i].data.level == 1) {
|
|
window.g_skipMetricTreeActivation = true;
|
|
nodes[i].setActive();
|
|
scrollToTreeNode();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
window.g_currentMetricDashboardName = name;
|
|
window.g_currentMetricGroupName = null;
|
|
window.g_currentMetricNodeName = null;
|
|
window.g_currentMetricNodeId = null;
|
|
}
|
|
};
|
|
|
|
function findAndActiveMetricGroupNode(dashboard, group) {
|
|
var rootNode = $("#tree1").fancytree("getRootNode");
|
|
if (!rootNode.isLoading()) {
|
|
var nodes = rootNode.findAll(group);
|
|
for (var i in nodes) {
|
|
if (nodes[i] && nodes[i].data && nodes[i].data.dashboard_name == dashboard
|
|
&& nodes[i].data.metric_group == group
|
|
&& nodes[i].data.level == 2) {
|
|
window.g_skipMetricTreeActivation = true;
|
|
nodes[i].setActive();
|
|
scrollToTreeNode();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
window.g_currentMetricDashboardName = dashboard;
|
|
window.g_currentMetricGroupName = group;
|
|
window.g_currentMetricNodeName = null;
|
|
window.g_currentMetricNodeId = null;
|
|
}
|
|
};
|
|
|
|
function findAndActiveFlowNode(application, project, flowId, flowName) {
|
|
var rootNode = $("#tree3").fancytree("getRootNode");
|
|
if (!rootNode.isLoading()) {
|
|
var node = $("#tree3").fancytree("getActiveNode");
|
|
var name;
|
|
var level = 0;
|
|
if (flowName) {
|
|
name = flowName;
|
|
level = 2;
|
|
}
|
|
else if (project) {
|
|
name = project;
|
|
level = 1;
|
|
}
|
|
else if (application) {
|
|
name = application;
|
|
level = 0;
|
|
}
|
|
else {
|
|
return;
|
|
}
|
|
|
|
if (node && node.title == name) {
|
|
return;
|
|
}
|
|
|
|
var nodes = rootNode.findAll(name);
|
|
if (nodes && nodes.length > 0) {
|
|
for (var i = 0; i < nodes.length; i++) {
|
|
if (level == 0) {
|
|
if (nodes[i].title == application) {
|
|
window.g_skipFlowTreeActivation = true;
|
|
nodes[i].setActive();
|
|
scrollToTreeNode();
|
|
return;
|
|
}
|
|
}
|
|
else if (level == 1) {
|
|
if (nodes[i] && nodes[i].parent) {
|
|
if (nodes[i].title == project && nodes[i].parent.title == application) {
|
|
window.g_skipFlowTreeActivation = true;
|
|
nodes[i].setActive();
|
|
scrollToTreeNode();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
else if (level == 2) {
|
|
if (nodes[i] && nodes[i].parent && nodes[i].parent.parent) {
|
|
var topParent = nodes[i].parent.parent;
|
|
if (nodes[i].data.id == flowId
|
|
&& nodes[i].parent.title == project && topParent.title == application) {
|
|
window.g_skipFlowTreeActivation = true;
|
|
nodes[i].setActive();
|
|
scrollToTreeNode();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
window.g_currentFlowApplication = application;
|
|
window.g_currentFlowProject = project;
|
|
window.g_currentFlowId = flowId;
|
|
window.g_currentFlowName = flowName;
|
|
}
|
|
};
|
|
|
|
var scrollToTreeNode = function () {
|
|
$("#tabSplitter").scrollTo($('.fancytree-focused'), 800)
|
|
}
|
|
function highlightResults(result, index, keyword) {
|
|
var content = result[index].schema;
|
|
if (keyword)
|
|
keyword = keyword.replace("+", "").replace("-", "");
|
|
var query = new RegExp("(" + keyword + ")", "gim");
|
|
var i = content.indexOf(keyword);
|
|
var len = content.length;
|
|
if (len > 500) {
|
|
if ((len - i) < 500) {
|
|
content = content.substring((len - 500), len);
|
|
}
|
|
else {
|
|
content = content.substring(i, 500 + i);
|
|
}
|
|
}
|
|
var newContent = content.replace(query, "<b>$1</b>");
|
|
result[index].schema = newContent;
|
|
var urn = result[index].urn;
|
|
if (urn) {
|
|
var newUrn = urn.replace(query, "<b>$1</b>");
|
|
result[index].urn = newUrn;
|
|
}
|
|
};
|
|
|
|
var genBreadcrumbs = function(urn) {
|
|
var breadcrumbs = []
|
|
var b = urn.split('/')
|
|
b.shift();
|
|
for(var i = 0; i < b.length; i++) {
|
|
var updatedUrn = "/metadata/dashboard/" + b[i]
|
|
if(i === 0)
|
|
{
|
|
|
|
breadcrumbs.push({title: b[i], urn: updatedUrn})
|
|
}
|
|
else
|
|
{
|
|
breadcrumbs.push({title: b[i], urn: updatedUrn})
|
|
}
|
|
}
|
|
return breadcrumbs
|
|
}
|