Skip to content

Commit

Permalink
feat(info): add info/about popup.
Browse files Browse the repository at this point in the history
Signed-off-by: Dmitry Kisler <admin@dkisler.com>
  • Loading branch information
kislerdm committed Jul 17, 2023
1 parent 83c2556 commit 6708b7a
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 3 deletions.
7 changes: 6 additions & 1 deletion src/main.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import Graph, {getNodeByID, Node} from "./graph.ts";
import {DiagramBuilder} from "./diagram.ts";
import SetTemplatedComponents from "./template.ts";
import SetTemplatedComponents, {addInfoPopUp} from "./template.ts";


const inputSelectedIdStyle: string = "font-weight:bold;font-size:18px";

Expand Down Expand Up @@ -93,6 +94,7 @@ export default async function Main(mountPoint: HTMLDivElement, builder: DiagramB
console.error(err.message);
mountPoint.innerHTML = errorMessage(err.message);
mountPoint.innerHTML = SetTemplatedComponents(mountPoint.innerHTML);
addInfoPopUp(mountPoint)
return;
}

Expand All @@ -110,11 +112,13 @@ export default async function Main(mountPoint: HTMLDivElement, builder: DiagramB
<div class="column right"><div id="output">${addTitle(getNodeByID(d.nodes, id))}${svg}</div></div>
</div>`;
mountPoint.innerHTML = SetTemplatedComponents(mountPoint.innerHTML);
addInfoPopUp(mountPoint)
// @ts-ignore
} catch (err: Error) {
console.error(err.message);
mountPoint.innerHTML = errorMessage(`Diagram rendering error. Node ID: ${id}\n${err.message}`);
mountPoint.innerHTML = SetTemplatedComponents(mountPoint.innerHTML);
addInfoPopUp(mountPoint)
return;
}

Expand Down Expand Up @@ -166,6 +170,7 @@ export default async function Main(mountPoint: HTMLDivElement, builder: DiagramB
console.error(err.message);
mountPoint.innerHTML = errorMessage(`Diagram rendering error. Node ID: ${id}\n${err.message}`);
mountPoint.innerHTML = SetTemplatedComponents(mountPoint.innerHTML);
addInfoPopUp(mountPoint)
}

resetDefaultStyleInputElement(prevSelectedId);
Expand Down
47 changes: 46 additions & 1 deletion src/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ svg#diagram {

footer {
text-align: center;
padding:1rem
padding: 1rem
}

a {
Expand Down Expand Up @@ -186,4 +186,49 @@ header {
text-align: center;
left: 50%;
transform: translate(0%, 50%);
}

.modal {
display: none;
position: fixed;
z-index: 1;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: auto;
background-color: rgb(0,0,0);
background-color: rgba(0,0,0,0.4);
}

/* Modal Content/Box */
.modal-content {
background-color: var(--code-bg);
margin: 15% auto;
padding: 20px;
border: 2px solid #000;
border-radius: 20px;
width: 80vh;
}

/* The Close Button */
.close {
color: #aaa;
float: right;
font-size: 28px;
font-weight: bold;
position: relative;
top: 0;
right: 0;
}

.close:hover,
.close:focus {
color: black;
text-decoration: none;
cursor: pointer;
}

p#info {
text-align: left;
}
40 changes: 39 additions & 1 deletion src/template.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import logoGithub from "./svg/github.svg";
import logoLinkedin from "./svg/linkedin.svg";
// @ts-ignore
import logoEmail from "./svg/email.svg";
// @ts-ignore
import infoSign from "./svg/info-sign.svg";

function MailToLinkStr(innerHTML: string = ""): string {
return `<a href="mailto:admin@dkisler.com" target="_blank" rel="noopener">${innerHTML}</a>`;
Expand All @@ -30,9 +32,45 @@ function Footer(): string {
}

function Header(): string {
return `<header>Organisational Infrastructure's Diagrams</header>`
return `<header>Organisational Infrastructure's Diagrams<sup></header>`
}

export default function SetTemplatedComponents(baseHTML: string): string {
return `${Header()}${baseHTML}${Footer()}`
}

export function addInfoPopUp(mountPoint: HTMLDivElement): void {
const infoIconWidth: number = 20;

const header = mountPoint.getElementsByTagName("header")[0]!;

header.innerHTML += `<sup><img id="info-icon" src="${infoSign}" alt="info"
width=${infoIconWidth} height=${infoIconWidth} ></sup>
<div class="modal">
<div class="modal-content"><span class="close">&times;</span>
<p id="info">foobar<br>qux</p>
</div>
</div>`

const modal = mountPoint.querySelector<HTMLElement>(".modal")!;

for (const el of mountPoint.getElementsByTagName("img")) {
if (el.id === "info-icon") {
el.addEventListener("click", () => {
modal.style.display = "block";
})
}
}

const closeBtn = mountPoint.querySelector<HTMLElement>(".close")!;
closeBtn.addEventListener("click", () => {
modal.style.display = "none";
})

modal.addEventListener("click", (e) => {
// @ts-ignore
if (e.target.className === "modal") {
modal.style.display = "none";
}
})
}

0 comments on commit 6708b7a

Please sign in to comment.