@webwriter/flowchart
Version:
Create programming flowcharts with interactive tasks. Use standardized Elements such as loops and Branchings.
120 lines (101 loc) • 4.69 kB
text/typescript
import { html, render } from 'lit';
import { FlowchartWidget } from '../../..';
import { ItemList } from '../../definitions/ItemList';
// Füge eine Hilfskarte hinzu
export function addHelp(element: FlowchartWidget, helpList: ItemList[]) {
const helpContainer = element.shadowRoot.querySelector('.help-container');
// const helpWrapper = document.createElement('div');
// helpWrapper.style.position = 'relative';
// helpWrapper.dataset.index = helpList.length.toString();
// helpWrapper.className = 'help-wrapper';
// const helpTitle = document.createElement('input');
// helpTitle.type = 'text';
// helpTitle.className = 'help-title';
// helpTitle.placeholder = 'Überschrift';
// helpTitle.addEventListener('change', (event) => {
// const index = Array.from(helpContainer.children).indexOf(helpWrapper);
// helpList[index].titel = (event.target as HTMLInputElement).value;
// showHelp.textContent = helpList[index].titel;
// element.helpList = [...helpList];
// });
const helpContent = document.createElement('textarea');
helpContent.className = 'help-content';
helpContent.placeholder = 'Inhalt... \nÄnderungen werden automatisch gespeichert.';
helpContent.addEventListener('input', (event) => {
const target = event.target as HTMLTextAreaElement;
target.style.height = 'auto';
target.style.height = `${target.scrollHeight}px`;
});
helpContent.addEventListener('change', (event) => {
const index = Array.from(helpContainer.children).indexOf(helpWrapper);
helpList[index].content = (event.target as HTMLTextAreaElement).value;
element.helpList = [...helpList];
});
const deleteHelp = document.createElement('button');
deleteHelp.className = 'delete-help-button editMode';
deleteHelp.textContent = 'Löschen';
deleteHelp.onclick = () => {
const index = Array.from(helpContainer.children).indexOf(helpWrapper);
helpList.splice(index, 1);
helpContainer.removeChild(helpWrapper);
element.helpList = [...helpList];
};
const showHelp = document.createElement('button');
showHelp.className = 'show-help-button hidden';
showHelp.textContent = 'Tipp';
showHelp.onclick = () => {
helpContent.classList.toggle('hidden');
};
// Speichere ggf. die Default Werte
// helpTitle.value = helpList[helpList.length - 1].titel;
// showHelp.textContent = helpList[helpList.length - 1].titel;
// helpContent.value = helpList[helpList.length - 1].content;
helpWrapper.appendChild(showHelp);
helpWrapper.appendChild(helpTitle);
helpWrapper.appendChild(helpContent);
helpWrapper.appendChild(deleteHelp);
helpContainer.appendChild(helpWrapper);
helpList.push({ titel: '', content: '' });
element.helpList = [...helpList];
}
// render die Hilfskarten
export function renderHelpList(this: FlowchartWidget, helpList: ItemList[]) {
const renderHelp = (help, id) => {
const deleteHelp = () => {
helpList.splice(id, 1);
this.helpList = [...helpList];
};
const onTitleChange = (event) => {
help.titel = event.target.value;
this.helpList = [...helpList];
};
const onContentChange = (event) => {
help.content = event.target.value;
this.helpList = [...helpList];
};
const showHelp = () => {
const helpContainer = this.shadowRoot.querySelector('.help-container');
const helpContent = helpContainer.children[id].querySelector('.help-content');
helpContent.classList.toggle('hidden');
};
return html`<div class="help-wrapper" style="position:relative">
<button class="show-help-button hidden" @click=${showHelp}>${help.titel}</button>
<input
type="text"
class="help-title"
value="${help.titel}"
placeholder="Überschrift"
@change=${onTitleChange}
/>
<textarea
class="help-content"
@change=${onContentChange}
placeholder="Inhalt... Änderungen werden automatisch gespeichert."
>
${help.content}</textarea
>
<button class="delete-help-button editMode" @click=${deleteHelp}>Löschen</button>
</div>`;
};
return html`<div class="help-container">${helpList?.map((help, i) => renderHelp(help, i))}</div>`;
}