var BNPChrome = angular
|
|
.module("BNPChrome", [])
|
|
.factory("parse", function () {
|
|
const parser = function (input, level, depthOverride) {
|
|
const depth = depthOverride || 3;
|
|
if (level > depth) return input;
|
|
|
|
if (!input || typeof input === "number" || typeof input === "boolean") {
|
|
return input;
|
|
}
|
|
|
|
if (Array.isArray(input)) {
|
|
// loop and parse each node
|
|
for (var i = 0; i < input.length; i++) {
|
|
input[i] = parser(input[i], level ? level + 1 : 1, depth);
|
|
}
|
|
return input;
|
|
}
|
|
|
|
if (typeof input === "string") {
|
|
try {
|
|
input = parser(JSON.parse(input), level ? level + 1 : 1, depth);
|
|
return input;
|
|
} catch (e) {
|
|
// not a stringified node
|
|
return input;
|
|
}
|
|
} else if (typeof input === "object") {
|
|
Object.keys(input).forEach(function (item) {
|
|
input[item] = parser(input[item], level ? level + 1 : 1, depth);
|
|
return item;
|
|
});
|
|
} else {
|
|
// unless there is a datatype I'm not checking for....
|
|
// console.log('shouldnt get here')
|
|
}
|
|
|
|
return input;
|
|
};
|
|
|
|
return parser;
|
|
})
|
|
.directive("prettyPrint", function (parse) {
|
|
return {
|
|
restrict: "E",
|
|
replace: true,
|
|
transclude: false,
|
|
scope: { data: "=data" },
|
|
link: function (scope, element, attrs) {
|
|
let data = scope.data;
|
|
let $el = $("<div></div>");
|
|
|
|
if (data === true) {
|
|
data = "<i>true</i>";
|
|
} else if (data === false) {
|
|
data = "<i>false</i>";
|
|
} else if (data === undefined) {
|
|
data = "<i>undefined</i>";
|
|
} else if (data === null) {
|
|
data = "<i>null</i>";
|
|
} else if (typeof data === "number") {
|
|
// skip (i.e. do default)
|
|
} else if (typeof data === "string" && (data[0] === "{" || data[0] === "[")) {
|
|
$el = $("<pre></pre>");
|
|
data = JSON.stringify(parse(data, 0), null, 4);
|
|
// try {
|
|
// data = JSON.stringify(JSON.parse(data), null, 4);
|
|
// // $el.text()
|
|
// } catch (e) {
|
|
// console.debug("Error parsing", data);
|
|
// }
|
|
} else if (typeof data === "string") {
|
|
// i.e. a string but not a JSON stringified string
|
|
data = $("<div>").text(data).html();
|
|
}
|
|
|
|
$el.html(data);
|
|
|
|
element.replaceWith($el);
|
|
}
|
|
};
|
|
})
|
|
.directive("resizableColumns", function ($parse) {
|
|
return {
|
|
link: function (scope, element, attrs) {
|
|
const options = { minWidth: 5 };
|
|
|
|
if ($(element).data("resizable-columns-sync")) {
|
|
var $target = $($(element).data("resizable-columns-sync"));
|
|
|
|
$(element).on("column:resize", function (
|
|
event,
|
|
resizable,
|
|
$leftColumn,
|
|
$rightColumn,
|
|
widthLeft,
|
|
widthRight
|
|
) {
|
|
var leftColumnIndex = resizable.$table
|
|
.find(".rc-column-resizing")
|
|
.parent()
|
|
.find("td, th")
|
|
.index($leftColumn);
|
|
|
|
var $targetFirstRow = $target.find("tr:first");
|
|
|
|
$($targetFirstRow.find("td, th").get(leftColumnIndex)).css("width", widthLeft + "%");
|
|
$($targetFirstRow.find("td, th").get(leftColumnIndex + 1)).css("width", widthRight + "%");
|
|
|
|
$target.data("resizableColumns").syncHandleWidths();
|
|
$target.data("resizableColumns").saveColumnWidths();
|
|
});
|
|
}
|
|
|
|
$(element).resizableColumns(options);
|
|
}
|
|
};
|
|
})
|
|
.directive("scrollToNew", function ($parse) {
|
|
return function (scope, element, attrs) {
|
|
if (scope.showIncomingRequests && scope.$last) {
|
|
const $container = $(element).parents(".data-container").first();
|
|
const $parent = $(element).parent();
|
|
|
|
$container.scrollTop($parent.height());
|
|
}
|
|
};
|
|
});
|