let paths = document.getElementById("paths");
let connections2 = [];
function getElement(element) {
for (let a = 0; a < element.length; a++) {
if (element[a].className.indexOf("indicator") != -1) {
return element[a];
}
}
return null;
}
function connectElements(connections) {
let spans = document.getElementsByTagName("span");
let start;
let end;
let temp;
for (let a = 0; a < connections.length; a += 2) {
for (let b = 0; b < spans.length; b++) {
if (spans[b].innerText == connections[a]) {
start = getElement(spans[b].parentElement.children);
}
if (spans[b].innerText == connections[a + 1]) {
if (connections[a + 1] == "Command Sequence Starting") {
end = spans[b];
} else {
end = getElement(spans[b].parentElement.children);
}
}
}
connections2.push({
start: start,
end: end
});
}
coordinates();
}
function coordinates() {
let padding = 5;
let bezierWeight = 0.5;
let oldPaths = paths.children;
for (let a = oldPaths.length - 1; a >= 0; a--) {
paths.removeChild(oldPaths[a]);
}
let x1, y1, x4, y4, dx, x2, x3, path, start, end;
for (let a = 0; a < connections2.length; a++) {
start = $(connections2[a].start);
end = $(connections2[a].end);
x1 = start.offset().left + start.width() / 2 - padding;
y1 = start.offset().top + start.height() / 2 - padding;
x4 = end.offset().left + start.width() / 2 - padding;
y4 = end.offset().top + start.height() / 2 - padding;
dx = Math.abs(x4 - x1) * bezierWeight;
if (x4 < x1) {
x2 = x1 - dx;
x3 = x4 + dx;
} else {
x2 = x1 + dx;
x3 = x4 - dx;
}
data = `M${x1} ${y1} C ${x2} ${y1} ${x3} ${y4} ${x4} ${y4}`;
path = document.createElementNS("http://www.w3.org/2000/svg", "path");
path.setAttribute("d", data);
path.setAttribute("class", "path");
paths.appendChild(path);
}
}
connectElements(["W_SCMadl_refresh", "Command Sequence Starting", "WIN64_MCCMon", "Command Sequence Starting", "W64_mkCopyPreq", "WIN64_MCCMon"]);
#paths {
z-index: -1;
position: absolute;
}
.path {
fill: none;
stroke: #3ed21b;
stroke-width: 6;
}
.mv-thread,
.mv-sequence {
display: inline-block;
}
.mv-sequence,
.mv-subsequence {
border: solid 1px #e0e0e0;
border-radius: 15px;
margin: 85px;
padding: 10px;
text-align: center;
}
.mv-sequence>.title,
.mv-subsequence>.title {
font-size: 17px;
background-color: cadetblue;
border-radius: 7px 0px;
color: #fff;
font-weight: bold;
padding: 10px;
}
.mv-sequence>.body,
.mv-subsequence>.body {
min-width: max-content;
display: inline-block;
text-align: left;
}
.mv-command>div.indicator {
display: inline-block;
width: 32px;
height: 32px;
line-height: 32px;
border-radius: 32px;
text-align: center;
font-size: 17px;
}
.mv-command>span {
font-size: 13px;
font-weight: bold;
}
.mv-command:before {
content: "";
background-color: #000;
width: 3px;
height: 16px;
display: block;
margin-left: 14px;
}
/* for done*/
.mv-command.done:before {
background: #477738;
}
.mv-cmd-done {
background: #57b847;
}
.mv-cmd-done>a>span,
.mv-command.done>span {
color: #477738;
}
/* for aborted*/
.mv-command.aborted:before {
background: #844138;
}
.mv-cmd-aborted {
background: #ea4f37;
}
.mv-cmd-aborted>a>span,
.mv-command.aborted>span {
color: #844138;
}
/* for waiting*/
.mv-command.waiting:before {
background-color: #808080;
}
.mv-cmd-waiting {
background: #f1f1f1;
}
.mv-cmd-waiting>span,
.mv-command.waiting>span {
color: #808080;
}
/* for disabled*/
.mv-command.disabled:before {
background: #80808080;
}
.mv-cmd-disabled {
border: 1px solid #80808080;
}
.mv-cmd-disabled>span,
.mv-command.disabled>span {
color: #80808080;
}
/* for running */
.mv-command.running:before {
background: #005686;
}
.mv-cmd-running {
border: 1px solid #005686;
}
.mv-cmd-running>a>span {
color: #80808080;
animation: mymove 2s infinite;
}
@keyframes mymove {
from {
color: #fff;
}
to {
color: #368ec4;
}
}
.mv-command.running>span {
color: #80808080;
animation: mymove 2s infinite;
}
<script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
<svg height="1000" width="1000" id="paths">
</svg>
<div>
<div class="mv-sequence">
<div class="body">
<div class="mv-thread">
<table style="width:100%">
<span class="mv-sequence" style="background-color: green; color: aliceblue;">Command Sequence Starting</span>
<tbody>
<tr>
<td style="vertical-align: top;">
<div>
<div class="body">
<div>
<div class="body">
<div class="mv-command done">
<span style="display:none" class="cmd-text">[ScmRefresh]</span>
<div data-state="Done" data-start="2020-10-22_18-13-49" data-end="2020-10-22_18-14-40" data-profile="ChgWS_64b_Win" data-system="WIN64" class="indicator mv-cmd-done"><a href="Main/MainThread/Release/Windows_SCM/W_SCMadl_refresh.xml"><span
class="fonticon fonticon-check"></span></a></div>
<span>W_SCMadl_refresh</span>
</div>
<div class="mv-command done">
<span style="display:none" class="cmd-text">adl_photo</span>
<div data-state="Done" data-start="2020-10-22_18-14-40" data-end="2020-10-22_18-14-41" data-profile="ChgWS_64b_Win" data-system="WIN64" class="indicator mv-cmd-done"><a href="Main/MainThread/Release/Windows_SCM/W_adl_photo.xml"><span
class="fonticon fonticon-check"></span></a></div>
<span>W_adl_photo</span>
</div>
<div class="mv-command done">
<span style="display:none" class="cmd-text">code:[ScmCollect]
-cr_later</span>
<div data-state="Done" data-start="2020-10-22_18-14-42" data-end="2020-10-22_18-14-43" data-profile="ChgWS_64b_Win" data-system="WIN64" class="indicator mv-cmd-done"><a href="Main/MainThread/Release/Windows_SCM/W_adl_collect.xml"><span
class="fonticon fonticon-check"></span></a></div>
<span>W_adl_collect</span>
</div>
<div class="mv-command done">
<span style="display:none" class="cmd-text">adl_collect_cr</span>
<div data-state="Done" data-start="2020-10-22_18-14-43" data-end="2020-10-22_18-14-44" data-profile="ChgWS_64b_Win" data-system="WIN64" class="indicator mv-cmd-done"><a href="Main/MainThread/Release/Windows_SCM/W_adl_collect_cr.xml"><span
class="fonticon fonticon-check"></span></a></div>
<span>W_adl_collect_cr</span>
</div>
<div>
<div class="body">
<div class="mv-command aborted">
<span style="display:none" class="cmd-text">[ScmSync]</span>
<div data-state="Aborted" data-start="2020-10-22_18-14-44" data-end="2020-10-22_18-14-54" data-profile="ChgWS_64b_Win" data-system="WIN64" class="indicator mv-cmd-aborted"><a href="Main/MainThread/Release/Windows_SCM/Windows_SCM_sync/W_adl_sync.xml"><span
class="fonticon fonticon-wrong"></span></a></div>
<span>W_adl_sync</span>
</div>
<div class="mv-command waiting">
<span style="display:none" class="cmd-text">[ScmAttach]
-attached_fw_mod</span>
<div data-state="Waiting" data-start="-1" data-end="-1" data-profile="ChgWS_64b_Win" data-system="WIN64" class="indicator
mv-cmd-waiting"><span class="fonticon fonticon-clock"></span></div>
<span>W_adl_attach</span>
</div>
</div>
</div>
<div class="mv-command waiting">
<span style="display:none" class="cmd-text">adl_publish</span>
<div data-state="Waiting" data-start="-1" data-end="-1" data-profile="ChgWS_64b_Win" data-system="WIN64" class="indicator
mv-cmd-waiting"><span class="fonticon fonticon-clock"></span></div>
<span>W_adl_publish</span>
</div>
<div class="mv-command waiting">
<span style="display:none" class="cmd-text">code:[ScmDsWs]
[workspace]</span>
<div data-state="Waiting" data-start="-1" data-end="-1" data-profile="ChgWS_64b_Win" data-system="WIN64" class="indicator
mv-cmd-waiting"><span class="fonticon fonticon-clock"></span></div>
<span>W_adl_ds_ws</span>
</div>
</div>
</div>
<div class="mv-thread">
<table style="width:100%">
<tbody>
<tr>
<td style="vertical-align: top;">
<div>
<div class="body">
<div>
<div class="body">
<div class="mv-command waiting">
<span style="display:none" class="cmd-text">if not exist
[WIN64_DRIVE]\[WIN64_DIR]\[PreqDir] mkdir
[WIN64_DRIVE]\[WIN64_DIR]\[PreqDir]</span>
<div data-state="Waiting" data-start="-1" data-end="-1" data-profile="TCK" data-system="WIN64" class="indicator
mv-cmd-waiting"><span class="fonticon fonticon-clock"></span></div>
<span>W64_Shared_Preq_mkdir</span>
</div>
<div class="mv-command waiting">
<span style="display:none" class="cmd-text">mkCopyPreq -W
[WIN64_DRIVE]\[WIN64_DIR] -p [WIN_PREQ_DIR] -t
[WIN64_DRIVE]\[WIN64_DIR]\[PreqDir] -d -o win_b64 -retry 10 -time 30
-copyretry 10 -copytime 30</span>
<div data-state="Waiting" data-start="-1" data-end="-1" data-profile="CD_WS_64b_Win" data-system="WIN64" class="indicator
mv-cmd-waiting"><span class="fonticon fonticon-clock"></span></div>
<span>W64_mkCopyPreq</span>
</div>
</div>
</div>
<div class="mv-thread">
<table style="width:100%">
<tbody>
<tr>
<td style="vertical-align: top;">
<div>
<div class="body"></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</td>
<td style="vertical-align: top;">
<div>
<div class="body">
<div class="mv-thread">
<table style="width:100%">
<tbody>
<tr>
<td style="vertical-align: top;">
<div class="mv-command
done">
<div data-state="Done" data-start="2020-10-22_18-13-49" data-end="2020-10-22_18-14-53" data-profile="CD" data-system="WIN64" class="indicator mv-cmd-done"><a><span
class="fonticon fonticon-check"></span></a></div>
<span>WIN64_MCCMon</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>