static/js/diagram.js (224 lines of code) (raw):
function buildCodebaseData() {
let elements = [];
$.each(JSON.parse($('#diagram').attr('codebase-attr')), function (ci, cv) {
elements.push(
{
data: {id: cv.id + '_codebase', type: 'codebase', name: cv.name}
}
);
$.each(cv.codebase_branch, function (bi, bv) {
elements.push(
{
data: {id: bv.id + '_branch', type: 'branch', name: bv.branchName}
}
);
elements.push(
{
data: {
id: 'from' + cv.id + '_codebase' + 'to' + bv.id + '_branch',
source: cv.id + '_codebase',
target: bv.id + '_branch'
}
},
);
$.each(bv.codebaseDockerStream, function (cdsi, cdsv) {
elements.push(
{
data: {
id: 'from' + bv.id + '_branch' + 'to' + cdsv.ocImageStreamName + '_codebase_docker_stream',
source: bv.id + '_branch',
target: cdsv.ocImageStreamName,
type: 'codebase_docker_stream'
}
},
);
});
});
});
return elements
}
function buildDataDockerStream() {
let elements = [];
$.each(JSON.parse($('#diagram').attr('codebase-docker-stream-attr')), function (cdsi, cdsv) {
elements.push(
{
data: {id: cdsv, type: 'codebase_docker_stream', name: cdsv}
}
);
});
return elements;
}
function buildCdPipeline() {
let elements = [];
$.each(JSON.parse($('#diagram').attr('pipeline-attr')), function (pi, pv) {
elements.push(
{
data: {id: pv.id + '_pipeline', type: 'pipeline', name: pv.name}
}
);
$.each(pv.cd_stage, function (si, sv) {
elements.push(
{
data: {id: sv.id + '_stage', type: 'stage', name: sv.name}
}
);
elements.push(
{
data: {
id: 'from' + pv.id + '_pipeline' + 'to' + sv.id + '_stage',
source: pv.id + '_pipeline',
target: sv.id + '_stage'
}
},
);
$.each(sv.qualityGates, function (qgi, qgv) {
if (qgv.qualityGateType === 'autotests') {
elements.push(
{
data: {
id: 'from' + sv.id + '_stage' + 'to' + qgv.branchId + '_branch',
source: sv.id + '_stage',
target: qgv.branchId + '_branch'
}
},
);
}
});
$.each(sv.stageCodebaseDockerStream, function (cdsi, cdsv) {
elements.push(
{
data: {
id: 'from' + sv.id + '_stage' + 'to' + cdsv.inputCodebaseDockerStreamId,
source: sv.id + '_stage',
target: cdsv.inputCodebaseDockerStreamId
}
},
{
data: {
id: 'from' + sv.id + '_stage' + 'to' + cdsv.outputCodebaseDockerStreamId,
source: sv.id + '_stage',
target: cdsv.outputCodebaseDockerStreamId
}
}
);
});
});
});
return elements;
}
function initDiagram() {
let diagram = cytoscape({
container: $('#diagram'),
elements: buildCodebaseData().concat(buildDataDockerStream()).concat(buildCdPipeline()),
style: [
{
selector: 'node',
style: {
'label': 'data(name)',
'font-size': '7px',
'font-weight': 'bold',
'text-valign': 'bottom',
}
},
//codebase style
{
selector: 'node[type="codebase"]',
style: {
'background-fit': 'cover cover',
'background-image': '/static/img/codebase.png',
'background-color': '#ffffff',
'background-width': '0.1px',
'background-height': '0.1px',
'shape': 'square',
'width': '40px',
'height': '40px'
}
},
//codebase branch style
{
selector: 'node[type="branch"]',
style: {
'background-fit': 'cover cover',
'background-image': '/static/img/branch.png',
'background-color': '#ffffff',
'background-width': '0.1px',
'background-height': '0.1px',
'shape': 'square',
'width': '40px',
'height': '40px'
}
},
//codebase docker stream style
{
selector: 'node[type="codebase_docker_stream"]',
style: {
'background-fit': 'cover cover',
'background-image': '/static/img/registry.png',
'background-color': '#ffffff',
}
},
//codebase docker stream line style
{
selector: 'edge[type="codebase_docker_stream"]',
style: {
'line-style': 'dashed'
}
},
//cd pipeline style
{
selector: 'node[type="pipeline"]',
style: {
'background-fit': 'cover cover',
'background-image': '/static/img/cd-pipeline.png',
'background-color': '#ffffff',
'background-width': '0.1px',
'background-height': '0.1px',
'shape': 'square',
'height': '40px',
'width': '40px',
}
},
//stage style
{
selector: 'node[type="stage"]',
style: {
'background-fit': 'cover cover',
'background-image': '/static/img/stage.png',
'background-color': '#ffffff',
'background-width': '0.1px',
'background-height': '0.1px',
'shape': 'square',
'height': '40px',
'width': '40px',
}
},
//edge style
{
selector: 'edge',
style: {
'width': 1,
'line-color': '#ccc',
'target-arrow-color': '#ccc',
'target-arrow-shape': 'triangle',
'curve-style': 'bezier'
}
},
],
layout: {
name: 'dagre',
rankDir: 'LR',
fit: true,
padding: 30,
avoidOverlap: true,
avoidOverlapPadding: 10,
nodeDimensionsIncludeLabels: false,
condense: true,
rows: 5,
cols: 5,
}
});
//display nodes related to parent
diagram.on('tap', 'node', function () {
diagram.filter('node').style("display", "none");
this.style("display", "element");
this.successors().targets().style("display", "element");
});
//display whole diagram
diagram.on('tap', function (event) {
if (event.target === diagram) {
diagram.filter('node').style("display", "element");
}
});
}
initDiagram();