3d6c92901c
This should allow users to work with large logs set. Fixes #294
124 lines
3.4 KiB
JavaScript
124 lines
3.4 KiB
JavaScript
/**
|
|
* Service for building strings, with wildcards replaced with metadata.
|
|
*/
|
|
angular.module('quay').factory('StringBuilderService', ['$sce', 'UtilService', function($sce, UtilService) {
|
|
var stringBuilderService = {};
|
|
|
|
stringBuilderService.buildUrl = function(value_or_func, metadata) {
|
|
var url = value_or_func;
|
|
if (typeof url != 'string') {
|
|
url = url(metadata);
|
|
}
|
|
|
|
// Find the variables to be replaced.
|
|
var varNames = [];
|
|
for (var i = 0; i < url.length; ++i) {
|
|
var c = url[i];
|
|
if (c == '{') {
|
|
for (var j = i + 1; j < url.length; ++j) {
|
|
var d = url[j];
|
|
if (d == '}') {
|
|
varNames.push(url.substring(i + 1, j));
|
|
i = j;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Replace all variables found.
|
|
for (var i = 0; i < varNames.length; ++i) {
|
|
var varName = varNames[i];
|
|
if (!metadata[varName]) {
|
|
return null;
|
|
}
|
|
|
|
url = url.replace('{' + varName + '}', metadata[varName]);
|
|
}
|
|
|
|
return url;
|
|
};
|
|
|
|
stringBuilderService.buildTrustedString = function(value_or_func, metadata, opt_codetag) {
|
|
return $sce.trustAsHtml(stringBuilderService.buildString(value_or_func, metadata, opt_codetag));
|
|
};
|
|
|
|
stringBuilderService.buildString = function(value_or_func, metadata, opt_codetag) {
|
|
var fieldIcons = {
|
|
'inviter': 'user',
|
|
'username': 'user',
|
|
'user': 'user',
|
|
'email': 'envelope',
|
|
'activating_username': 'user',
|
|
'delegate_user': 'user',
|
|
'delegate_team': 'group',
|
|
'team': 'group',
|
|
'token': 'key',
|
|
'repo': 'hdd-o',
|
|
'robot': 'ci-robot',
|
|
'tag': 'tag',
|
|
'role': 'th-large',
|
|
'original_role': 'th-large',
|
|
'application_name': 'cloud',
|
|
'image': 'archive',
|
|
'original_image': 'archive',
|
|
'client_id': 'chain'
|
|
};
|
|
|
|
var filters = {
|
|
'obj': function(value) {
|
|
if (!value) { return []; }
|
|
return Object.getOwnPropertyNames(value);
|
|
},
|
|
|
|
'updated_tags': function(value) {
|
|
if (!value) { return []; }
|
|
return Object.getOwnPropertyNames(value);
|
|
}
|
|
};
|
|
|
|
var description = value_or_func;
|
|
if (typeof description != 'string') {
|
|
description = description(metadata);
|
|
}
|
|
|
|
for (var key in metadata) {
|
|
if (metadata.hasOwnProperty(key)) {
|
|
var value = metadata[key] != null ? metadata[key] : '(Unknown)';
|
|
if (filters[key]) {
|
|
value = filters[key](value);
|
|
}
|
|
|
|
if (Array.isArray(value)) {
|
|
value = value.join(', ');
|
|
}
|
|
|
|
value = value.toString();
|
|
|
|
if (key.indexOf('image') >= 0) {
|
|
value = value.substr(0, 12);
|
|
}
|
|
|
|
var safe = UtilService.escapeHtmlString(value);
|
|
var markedDown = UtilService.getMarkedDown(value);
|
|
markedDown = markedDown.substr('<p>'.length, markedDown.length - '<p></p>'.length);
|
|
|
|
var icon = fieldIcons[key];
|
|
if (icon) {
|
|
if (icon.indexOf('ci-') < 0) {
|
|
icon = 'fa-' + icon;
|
|
}
|
|
|
|
markedDown = '<i class="fa ' + icon + '"></i>' + markedDown;
|
|
}
|
|
|
|
var codeTag = opt_codetag || 'code';
|
|
description = description.replace('{' + key + '}',
|
|
'<' + codeTag + ' title="' + safe + '">' + markedDown + '</' + codeTag + '>');
|
|
}
|
|
}
|
|
return description.replace('\n', '<br>');
|
|
};
|
|
|
|
return stringBuilderService;
|
|
}]);
|