13 changed files with 1008 additions and 0 deletions
@ -0,0 +1,134 @@ |
|||
/** |
|||
* Der Bereich in dem der aktuell geladene/bearbeitete Eintrag angezeigt wird. |
|||
* @returns {Component} |
|||
*/ |
|||
function valueRow() { |
|||
return builder.row() |
|||
.addStyleClass("current-entry-area") |
|||
.modifier( |
|||
new Modifier() |
|||
.fillMaxWidth() |
|||
.background(Colors.gold_1) |
|||
.clip(Shapes.RoundedCorner.all(6)) |
|||
.padding(6) |
|||
) |
|||
} |
|||
|
|||
/** |
|||
* |
|||
* @param {HTMLElement} entryElement |
|||
* @param {HTMLElement} to das Elternelement in welches das Eintragselement verschoben werden soll |
|||
* @returns {HTMLElement} |
|||
*/ |
|||
function moveEntry(entryElement, to) { |
|||
entryElement.remove(); |
|||
[...entryElement.querySelectorAll('.material-icons')] |
|||
.forEach(e => { |
|||
e.setAttribute("hidden", "hidden"); |
|||
e.setAttribute("visibility", "hidden"); |
|||
e.style.visibility = "hidden"; |
|||
}); |
|||
|
|||
to.insertAdjacentElement( |
|||
"afterbegin", |
|||
entryElement |
|||
); |
|||
return entryElement; |
|||
} |
|||
|
|||
function moveCurrent(reverse = false) { |
|||
let currentArea = document.querySelector('div.current-entry-area'); |
|||
if (currentArea.children.length === 0) { |
|||
return |
|||
} |
|||
|
|||
let current = currentArea.children[0]; |
|||
return moveEntry( |
|||
current, |
|||
document.querySelector('div.plist' + (reverse |
|||
? '-upcoming' |
|||
: '-done' |
|||
)) |
|||
); |
|||
} |
|||
|
|||
function loadNext() { |
|||
moveCurrent(); |
|||
let upcomingArea = document.querySelector('div.plist-upcoming'); |
|||
if (upcomingArea.children.length === 0) { |
|||
return |
|||
} |
|||
let upcoming = upcomingArea.children[0]; |
|||
|
|||
upcoming = moveEntry( |
|||
upcoming, |
|||
document.querySelector('div.current-entry-area') |
|||
); |
|||
|
|||
[...upcoming.querySelectorAll('.material-icons')] |
|||
.forEach(e => { |
|||
e.removeAttribute("hidden"); |
|||
e.removeAttribute("visibility"); |
|||
e.style.visibility = ""; |
|||
}); |
|||
} |
|||
|
|||
function loadPrev() { |
|||
moveCurrent(true); |
|||
let prevArea = document.querySelector('div.plist-done'); |
|||
if (prevArea.children.length === 0) { |
|||
return |
|||
} |
|||
let prev = prevArea.children[0]; |
|||
|
|||
prev = moveEntry( |
|||
prev, |
|||
document.querySelector('div.current-entry-area') |
|||
); |
|||
|
|||
[...prev.querySelectorAll('.material-icons')] |
|||
.forEach(e => { |
|||
e.removeAttribute("hidden"); |
|||
e.removeAttribute("visibility"); |
|||
e.style.visibility = ""; |
|||
}); |
|||
} |
|||
|
|||
function aktionsKonsole(modifier = new Modifier()) { |
|||
return builder.column() |
|||
.modifier(componentModifiers.majorArea) |
|||
.modifier( |
|||
new Modifier() |
|||
.fillMaxWidth() |
|||
.background(colorModifiers.active.secondary) |
|||
.padding(32) |
|||
) |
|||
.modifier(modifier) |
|||
.addStyleClass("area") |
|||
.addStyleClass("area-aktiv") |
|||
.childContext([ |
|||
builder.div() |
|||
.modifier( |
|||
new Modifier() |
|||
.fillMaxSize() |
|||
.margin().bottom(6) |
|||
) |
|||
.alignment(Alignment.SPACE_EVENLY) |
|||
.arrangement(Arrangement.SPACE_EVENLY) |
|||
.childContext([ |
|||
builder.button().text("NEXT") |
|||
.addEventListener( |
|||
"click", |
|||
loadNext |
|||
) |
|||
, |
|||
builder.button().text("PREV") |
|||
.addEventListener( |
|||
"click", |
|||
loadPrev |
|||
) |
|||
]) |
|||
, |
|||
valueRow() |
|||
]) |
|||
} |
@ -0,0 +1,36 @@ |
|||
|
|||
/** |
|||
* Ein Knopf oder Kippschalter um den Klickselect zu (de-)aktivieren. |
|||
* Wenn aktiviert kann werden in einem generiertem feld, |
|||
* die angeklickten Felder referenziert. |
|||
*/ |
|||
function clickFormulateToggle() { |
|||
return builder.span() |
|||
} |
|||
|
|||
|
|||
function infoDisplayField(){ |
|||
return builder.column() |
|||
.childContext([ |
|||
builder.inputTags.checkbox({"name": "use_field"}) |
|||
, |
|||
builder.row() |
|||
.childContext([ |
|||
builder.inputTags.text() |
|||
, |
|||
builder.extensions.iconMIO(ICONS.EDIT) |
|||
]) |
|||
]) |
|||
} |
|||
|
|||
function computedArea() { |
|||
return builder.row() |
|||
.overflow(false, true) |
|||
.modifier( |
|||
new Modifier() |
|||
.padding(12) |
|||
) |
|||
.childContext([ |
|||
clickFormulateToggle() |
|||
]) |
|||
} |
@ -0,0 +1,90 @@ |
|||
const listRow = function (content) { |
|||
return builder.tableRow() |
|||
.componentChildren([ |
|||
builder.tableCell().text("1"), |
|||
builder.tableCell().text("Info 1"), |
|||
builder.tableCell().text("Info 2"), |
|||
builder.tableCell().text("Info 3") |
|||
]) |
|||
} |
|||
|
|||
function listColumn(colText, bckColor, id) { |
|||
return builder.column() |
|||
.setAttribute("id", id) |
|||
.alignment(Alignment.CENTER) |
|||
.modifier( |
|||
new Modifier() |
|||
.fillMaxWidth(0.497) |
|||
.background(bckColor) |
|||
.clip(Shapes.RoundedCorner.all(15)) |
|||
) |
|||
.componentChildren([ |
|||
builder.header(2) |
|||
.text(colText) |
|||
.alignment(Alignment.CENTER) |
|||
.chainModifier() |
|||
.padding(new Siding().all(32)) |
|||
, |
|||
builder.table() |
|||
.chainModifier() |
|||
.fillMaxWidth() |
|||
.linkPadding().all(16) |
|||
.componentChild( |
|||
builder.tableBody() |
|||
.addStyleClass("list-table-body") |
|||
.componentChild( |
|||
listRow() |
|||
) |
|||
) |
|||
]) |
|||
} |
|||
|
|||
const currentElementDisplay = function (fields) { |
|||
return builder.column() |
|||
.modifier( |
|||
new Modifier() |
|||
.fillMaxWidth() |
|||
) |
|||
.componentChildren([ |
|||
builder.row() |
|||
.componentChildren([ |
|||
builder.button() |
|||
.text("Load Next") |
|||
.setEvent(CommonEvents.ONCLICK, "rotateCurrentElement") |
|||
.chainModifier() |
|||
.fillMaxWidth(0.2) |
|||
, |
|||
builder.input({ "type": "number" }) |
|||
]) |
|||
, |
|||
builder.table() |
|||
.setAttribute("hidden", "true") |
|||
.componentChild(builder.tableBody()) |
|||
]) |
|||
} |
|||
|
|||
const currentSection = function () { |
|||
return builder.column() |
|||
.setAttribute("id", "current") |
|||
.alignment(Alignment.CENTER) |
|||
.chainModifier() |
|||
.fillMaxWidth() |
|||
.linkPadding().vertical(8) |
|||
.componentChild( |
|||
builder.column() |
|||
.chainModifier() |
|||
.fillMaxWidth() |
|||
.background(MaterialFiveHundredlColors.GOLD) |
|||
.clip(Shapes.RoundedCorner.all(15)) |
|||
.linkPadding().horizontal(32).vertical(32) |
|||
.componentChildren([ |
|||
builder.header(2) |
|||
.text("Current Element") |
|||
.chainModifier() |
|||
.linkPadding() |
|||
.bottom(8) |
|||
, |
|||
currentElementDisplay() |
|||
]) |
|||
) |
|||
} |
@ -0,0 +1,262 @@ |
|||
/** |
|||
* Im Grunde eine gekapselte Textarea |
|||
* Das Feld in welches roher Datentext eingefügt wird. |
|||
* Wir in der Zukunft eventuell in einen sepperaten View verschoben. |
|||
* |
|||
* @param {Modifier} modifier |
|||
* @returns {Component} |
|||
*/ |
|||
function rawTextImportArea(modifier = new Modifier()) { |
|||
return builder.div() |
|||
.modifier( |
|||
new Modifier() |
|||
.fillMaxSize() |
|||
.padding(6) |
|||
) |
|||
.modifier(modifier) |
|||
.setAttribute("id", "import-area") |
|||
.chainChild() |
|||
.textarea() |
|||
.name("import-textarea") |
|||
.modifier( |
|||
new Modifier() |
|||
.clip(Shapes.RoundedCorner.all(12)) |
|||
.fillMaxSize() |
|||
.padding(6) |
|||
.dimensions().height(120) |
|||
) |
|||
} |
|||
|
|||
class ProcessingRule { |
|||
use; |
|||
value; |
|||
constructor(display, id, type, placeholder, desc, isFlagged) { |
|||
this.display = display; |
|||
this.id = id; |
|||
this.type = type; |
|||
this.placeholder = placeholder; |
|||
this.desc = desc; |
|||
this.isFlagged = isFlagged; |
|||
} |
|||
|
|||
_getCorrespondingComponent() { |
|||
return document.getElementById(this.id) |
|||
} |
|||
|
|||
_getToBeUsedState() { |
|||
return !this.isFlagged |
|||
|| this._getCorrespondingComponent() |
|||
.querySelector('input[name="is_to_be_used"]').checked === true; |
|||
} |
|||
|
|||
_getInputTagValue() { |
|||
let container = this._getCorrespondingComponent() |
|||
.querySelector('.value-container'); |
|||
if (this.type === "checkbox") { |
|||
return container.checked === true; |
|||
} |
|||
|
|||
if (container.value === "") { |
|||
return this.placeholder; |
|||
} |
|||
return container.value; |
|||
} |
|||
|
|||
updateFromUi() { |
|||
this.use = this._getToBeUsedState(); |
|||
this.value = this._getInputTagValue(); |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
/** |
|||
* Die Überschrift und unter der Bedingung rule.isFlagged auch eine checkbox die bestimmt |
|||
* ob die ProcessingRule genutzt werden soll. |
|||
* |
|||
* @param {ProcessingRule} rule |
|||
* @returns {Component} |
|||
*/ |
|||
function prdUseboxAndLabel(rule) { |
|||
return builder.row() |
|||
.arrangement(Arrangement.CENTER) |
|||
.childContext([ |
|||
builder.inputTags.checkbox({ "name": "is_to_be_used" }) |
|||
.modifier(new Modifier().margin().right(6)) |
|||
.hiddenByCondition(!rule.isFlagged) |
|||
, |
|||
builder.label() |
|||
.setAttribute("for", rule.id) |
|||
.text(rule.display) |
|||
]); |
|||
} |
|||
|
|||
/** |
|||
* Componente die eine ProcessingRule definiert. |
|||
* - Ob sie verwendet werden soll |
|||
* - welche Standartwert erwartet/verwendet werden soll |
|||
* |
|||
* @param {ProcessingRule} rule |
|||
* @returns {Component} |
|||
*/ |
|||
function processingRuleDefineComponent(rule, index, arr, modifier = new Modifier()) { |
|||
return builder.column() |
|||
.isHigherComponent() |
|||
.setAttribute("id", rule.id) |
|||
.title(rule.desc) |
|||
.modifier(modifier) |
|||
.arrangement(Arrangement.CENTER) |
|||
.childContext([ |
|||
prdUseboxAndLabel(rule) |
|||
, |
|||
builder.span() |
|||
.modifier(new Modifier().fillMaxSize()) |
|||
.arrangement(Arrangement.CENTER) |
|||
.chainChild() |
|||
.input(rule.type) |
|||
.addStyleClass("value-container") |
|||
.setAttribute("placeholder", rule.placeholder) |
|||
.modifier( |
|||
new Modifier() |
|||
.padding(4) |
|||
.setStyleRule("field-sizing", "content") |
|||
) |
|||
.apply(function (el) { |
|||
if (!rule.isFlagged) { |
|||
el.setAttribute("deactivated", ""); |
|||
} |
|||
}) |
|||
]) |
|||
} |
|||
|
|||
|
|||
/** |
|||
* Bereich der ProcessingRules |
|||
* |
|||
* @param {ProcessingRule} rule |
|||
* @returns {Component} |
|||
*/ |
|||
function processingRulesArea(modifier = new Modifier()) { |
|||
return builder.row() |
|||
.modifier( |
|||
new Modifier() |
|||
.fillMaxWidth() |
|||
.padding(8) |
|||
) |
|||
.modifier(modifier) |
|||
.arrangement(Arrangement.SPACE_EVENLY) |
|||
.childContext( |
|||
Object.keys(processingRules) |
|||
.map(def => processingRules[def]) |
|||
.map(processingRuleDefineComponent) |
|||
) |
|||
} |
|||
|
|||
let importedData = []; |
|||
|
|||
/** |
|||
* Funktion keine Komponente |
|||
*/ |
|||
function importEntries() { |
|||
let rawtext = document.getElementById("import-area") |
|||
.querySelector("textarea").value; |
|||
let prules = Object.keys(processingRules) |
|||
.reduce((a, c) => { |
|||
let r = processingRules[c]; |
|||
let pr = new ProcessingRule(r.display, r.id, r.type, r.placeholder, r.desc, r.isFlagged); |
|||
pr.updateFromUi(); |
|||
a[c] = pr; |
|||
return a; |
|||
}, processingRules); |
|||
|
|||
let lines = rawtext.split(prules.line_splitter.value); |
|||
let splittedLines = lines |
|||
.filter(e => e.trim() !== ""); |
|||
|
|||
console.log(splittedLines); |
|||
|
|||
if (prules.entry_splitter.use) { |
|||
console.log(prules.entry_splitter.value); |
|||
splittedLines = splittedLines |
|||
.map(line => line.split(prules.entry_splitter.value)) |
|||
} else { |
|||
splittedLines = splittedLines |
|||
.map(e => [e]); |
|||
} |
|||
|
|||
importedData = splittedLines; |
|||
console.log(splittedLines); |
|||
|
|||
let upcoming = document.querySelector(".plist-upcoming"); |
|||
|
|||
splittedLines = splittedLines.map((e, i) => listEntryRow(e, i).generate().compext); |
|||
|
|||
splittedLines |
|||
.forEach(element => { |
|||
upcoming.insertAdjacentElement( |
|||
"beforeend", |
|||
element |
|||
) |
|||
}); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* Bereich mit ausführbaren Elementen |
|||
* |
|||
* @param {ProcessingRule} rule |
|||
* @returns {Component} |
|||
*/ |
|||
function commandRow(modifier = new Modifier()) { |
|||
return builder.row() |
|||
.modifier(modifier) |
|||
.childContext([ |
|||
builder.button() |
|||
.text("Import") |
|||
.addStyleClass("import-trigger") |
|||
.addEventListener( |
|||
"click", |
|||
importEntries |
|||
) |
|||
]) |
|||
} |
|||
|
|||
|
|||
/** |
|||
* |
|||
* |
|||
* @param {ProcessingRule} rule |
|||
* @returns {Component} |
|||
*/ |
|||
function importArea(modifier = new Modifier()) { |
|||
return builder.column() |
|||
.addStyleClass("area") |
|||
.addStyleClass("area-import") |
|||
.modifier( |
|||
new Modifier() |
|||
.fillMaxWidth() |
|||
.padding(12) |
|||
.background(colorModifiers.import.secondary) |
|||
) |
|||
.modifier(componentModifiers.majorArea) |
|||
.modifier(modifier) |
|||
.arrangement(Arrangement.CENTER) |
|||
.childContext([ |
|||
builder.header(4).text("Import") |
|||
, |
|||
builder.column() |
|||
.arrangement(Arrangement.CENTER) |
|||
.modifier( |
|||
new Modifier() |
|||
.padding().all(32).top(16) |
|||
) |
|||
.childContext([ |
|||
|
|||
rawTextImportArea() |
|||
, |
|||
processingRulesArea() |
|||
, |
|||
commandRow() |
|||
]) |
|||
]) |
|||
} |
@ -0,0 +1,78 @@ |
|||
/** |
|||
* @deprecated Verwendet die ebenfalls deprecated function document.execCommand('copy') |
|||
* @param {*} triggerElement |
|||
*/ |
|||
function copyFieldToClipboard2(triggerElement) { |
|||
var copyText = document.getElementById("myText"); |
|||
copyText.select(); |
|||
copyText.setSelectionRange(0, 99999); // For mobile devices
|
|||
|
|||
// Copy the text inside the textarea
|
|||
document.execCommand("copy"); |
|||
|
|||
let valuecontainer = triggerElement.parent |
|||
.querySelector('.valuecontainer'); |
|||
|
|||
let fieldvalue = valuecontainer.value; |
|||
|
|||
navigator.clipboard.writeText(fieldvalue); |
|||
|
|||
// Optional: Alert the copied text
|
|||
alert("Copied: " + copyText.value); |
|||
} |
|||
|
|||
function copyFieldToClipboard(triggerElement) { |
|||
let valcon = triggerElement.closest('.value-to-clipboard-field') |
|||
.querySelector('.valuecontainer'); |
|||
navigator.clipboard.writeText(valcon.value) |
|||
} |
|||
|
|||
|
|||
/** |
|||
* |
|||
* @param {string} value |
|||
* @param {number} index |
|||
* @param {Array<string>} arr |
|||
* @param {boolean} hideCopy |
|||
* @param {string} [type="text"] Falls ein anderer typ gebraucht wird |
|||
* @returns {Component} |
|||
*/ |
|||
function fieldForValueCopy( |
|||
value, |
|||
index, |
|||
arr, |
|||
hideCopy = true, |
|||
type="text", |
|||
setName = "field-" + (index + 3) |
|||
) { |
|||
return builder.div() |
|||
.addStyleClass("value-to-clipboard-field") |
|||
.childContext([ |
|||
builder.input(type) |
|||
.readonly() |
|||
.addStyleClass("valuecontainer") |
|||
.text(value) |
|||
.name(setName) |
|||
.modifier( |
|||
new Modifier() |
|||
.padding(0) |
|||
.border(0) |
|||
, |
|||
".inputfield-border-none" |
|||
) |
|||
, |
|||
builder.extensions.iconMIO(ICONS.CONTENT_COPY) |
|||
.hiddenByCondition(hideCopy) |
|||
.modifier( |
|||
new Modifier() |
|||
.setStyleRule("cursor", "pointer") |
|||
.setStyleRule("visibility", "hidden") |
|||
|
|||
) |
|||
.setAttribute( |
|||
"onclick", |
|||
"copyFieldToClipboard(this)" |
|||
) |
|||
]) |
|||
} |
|||
|
@ -0,0 +1,16 @@ |
|||
function rotateCurrentElement() { |
|||
let next = document.querySelector('#open table tbody tr'); |
|||
let currentTarget = document.querySelector('#current table tbody'); |
|||
let current = currentTarget.querySelector("tr"); |
|||
let target = document.querySelector('#processed table tbody'); |
|||
|
|||
if(current){ |
|||
current.remove(); |
|||
target.insertAdjacentElement("afterbegin", current); |
|||
} |
|||
|
|||
if(next){ |
|||
next.remove(); |
|||
currentTarget.append(next); |
|||
} |
|||
} |
@ -0,0 +1,105 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
|
|||
<head> |
|||
<meta charset="UTF-8"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|||
<title>Processing List</title> |
|||
|
|||
<!-- |
|||
<script src="https://git.labos.goip.de/chris/jpc-like-websites/raw/tag/v1.0.0/jpc-like-websites.js"></script> |
|||
<script src="http://laborcore.fritz.box:8030/chris/jpc-like-websites/raw/tag/v1.0.0/jpc-like-websites.js"></script> |
|||
<script src="http://laborcore.fritz.box:8030/attachments/53088c5b-4eb6-4c3f-ac60-6e2f42c2c6e4"></script> |
|||
|
|||
<script src="../../jpc-like-websites.js"></script> |
|||
--> |
|||
<script> |
|||
let compelgroups = {}; |
|||
</script> |
|||
<script src="./node_modules/jpc-like-websites/jpc-like-websites.js"></script> |
|||
<script src="./node_modules/jpclw-extension/extension.js"></script> |
|||
<script src="./node_modules/jpclwe-materialicons/icons.js"></script> |
|||
<style> |
|||
main { |
|||
display: flex; |
|||
justify-content: center; |
|||
align-content: center; |
|||
align-items: center; |
|||
} |
|||
</style> |
|||
</head> |
|||
|
|||
<body> |
|||
<main> |
|||
|
|||
</main> |
|||
<footer> |
|||
|
|||
<script src="theming.js"></script> |
|||
|
|||
<script src="dataImportArea.js"></script> |
|||
<script src="comutingArea.js"></script> |
|||
<script src="fieldForCopyValue.js"></script> |
|||
<script src="aktionsKonsole.js"></script> |
|||
<script src="processingList.js"></script> |
|||
<script src="processingRules.js"></script> |
|||
|
|||
<script src="content.js"></script> |
|||
<script src="index.js"></script> |
|||
<script> |
|||
document.querySelector('textarea').value = ` |
|||
202406 - Rimpido - Schulung.mm |
|||
3D_Modelle.mm |
|||
Bastel - Projekte.mm |
|||
Bastel_Handwerksressoursen.mm |
|||
Besorgungen.mm |
|||
Bodenseeschifferpatent - Präsentation - Gruppe.mm |
|||
Bodenseeschifferpatent - Präsentation - Gruppe.pdf |
|||
'Bogenbau_ Sehnenbau_ Mittenwicklung – Wikibooks, Sammlung freier Lehr-, Sach- und Fachbücher.pdf' |
|||
'Büroumzug Aicheler.mm' |
|||
Checkliste.mm |
|||
ContentOrientatedText.mm |
|||
Data - Analysten_Augen.md |
|||
Data - Analysten_Augen.mm |
|||
Data - Analysten_Augen.pdf |
|||
Data - Analysten_Augen.png |
|||
Digitalisierung_von_analogen_Informationen.mm |
|||
'GTD - Fokus.mm' |
|||
Hochzeit.mm |
|||
'How to write Code.mm' |
|||
Krankenversicherung - 2.mm |
|||
Krankenversicherung.mm |
|||
Kugelrechner.ods |
|||
Kugelrechner_quickVersion.ods |
|||
Linksammlung.mm |
|||
'Methanol - Synthese.mm' |
|||
Netzwerkkabel - Plan.ods |
|||
'Offene Recherchen.mm' |
|||
Projekt_LehrenMitarbeitenLernen.mm |
|||
Projekte.mm |
|||
'Rimpido - Unternehmens Roadmap.mm' |
|||
Rimpido - Sicherheitskonzept - Umstellung.mm |
|||
Systemalternativen.mm |
|||
Trauzeugenschaft_Stefan.mm |
|||
Typescript_Applikation.mm |
|||
Unternehmungen - n.pdf |
|||
Unternehmungen.mm |
|||
Unternehmungen.pdf |
|||
Wasser - Stromgenerator.mm |
|||
papbeton_betonplatten_volumenberchnungen.ods |
|||
rimpido.mm |
|||
`; |
|||
|
|||
setTimeout(() => { |
|||
document.getElementById('entry_splitter') |
|||
.querySelector('input[name="is_to_be_used"]') |
|||
.checked = true; |
|||
|
|||
document.querySelector('button.import-trigger').click(); |
|||
}, 500); |
|||
|
|||
</script> |
|||
</footer> |
|||
</body> |
|||
|
|||
</html> |
@ -0,0 +1,28 @@ |
|||
Page.inDev(45) |
|||
Page.addExtension(MaterialIcons); |
|||
|
|||
builder.page( |
|||
builder.column() |
|||
.arrangement(Arrangement.SPACE_EVENLY) |
|||
.alignment(Alignment.CENTER) |
|||
.modifier( |
|||
new Modifier() |
|||
.border(new Border().all(15)) |
|||
.padding(32) |
|||
.dimensions().width(1200) |
|||
) |
|||
.childContext([ |
|||
builder.header(1) |
|||
.alignment(Alignment.CENTER) |
|||
.text("Process List") |
|||
, |
|||
aktionsKonsole() |
|||
, |
|||
listArea(new Modifier().margin().vertical(5)) |
|||
, |
|||
importArea( |
|||
new Modifier() |
|||
.setStyleRule("float", "bottom") |
|||
) |
|||
]) |
|||
) |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"name": "semi-automatic-ui-process-list", |
|||
"version": "1.0.0", |
|||
"description": "WebUi to list and process entries, splitted into seperated fields if needed, with data for a task/process. Each entry will be used in a process of a partially manual/automated manner. Tasks of a repetetive kind that are to be executed on the ui (of application/s).", |
|||
"license": "ISC", |
|||
"keywords": [ |
|||
"automation", |
|||
"webui" |
|||
], |
|||
"author": "cm", |
|||
"type": "commonjs", |
|||
"main": "index.js", |
|||
"scripts": { |
|||
"test": "echo \"Error: no test specified\" && exit 1" |
|||
}, |
|||
"dependencies": { |
|||
"jpc-like-websites": "git+https://git.labos.goip.de/chris/jpc-like-websites.git", |
|||
"jpclw-extension": "git+https://git.labos.goip.de/chris/jpclw-extension.git", |
|||
"jpclwe-materialicons": "git+https://git.labos.goip.de/chris/jpclwe-materialIcons.git" |
|||
} |
|||
} |
@ -0,0 +1,118 @@ |
|||
function listEntryRowControls() { |
|||
const controls = [ |
|||
select, |
|||
de_activate, |
|||
edit, |
|||
] |
|||
} |
|||
|
|||
function listEntryRowControlsContextMenu() { |
|||
const menuOptions = { |
|||
copy: { |
|||
copy_below, |
|||
copy_bottom |
|||
}, |
|||
move: { |
|||
top, |
|||
bottom |
|||
}, |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
/** |
|||
* Stellt den Datensatz eines Prozesses dar |
|||
* |
|||
* @param {String[]} entry |
|||
* @param {number} index |
|||
* @returns {Component} |
|||
*/ |
|||
function listEntryRow(entry, index) { |
|||
return builder.row() |
|||
.modifyChildren(new Modifier().padding(2)) |
|||
.modifier( |
|||
new Modifier() |
|||
.fillMaxWidth() |
|||
.padding(4) |
|||
.background(Colors.white) |
|||
.clip(Shapes.RoundedCorner.all(4)) |
|||
) |
|||
.alignment(Alignment.CENTER) |
|||
.childContext([ |
|||
builder.span() |
|||
.addStyleClass("entrydata-container") |
|||
.setAttribute( |
|||
"data-entrydata", |
|||
JSON.stringify(entry) |
|||
) |
|||
.modifier( |
|||
new Modifier() |
|||
.fillMaxWidth(0.09) |
|||
.margin().right(4) |
|||
) |
|||
.arrangement(Arrangement.SPACE_BETWEEN) |
|||
.alignment(Alignment.CENTER) |
|||
.childContext([ |
|||
builder.inputTags.checkbox({ "name": "entry_select" }) |
|||
, |
|||
fieldForValueCopy(index, -1, [], true, "number","entry-index") |
|||
.alignment(Alignment.CENTER) |
|||
.modifier( |
|||
new Modifier() |
|||
.fillMaxWidth(0.7) |
|||
.margin().left(2) |
|||
) |
|||
|
|||
]) |
|||
, |
|||
...entry |
|||
.filter(e => e.trim() !== "") |
|||
.map(fieldForValueCopy) |
|||
]); |
|||
} |
|||
|
|||
/** |
|||
* |
|||
* @param {ComponentColor} colorTheme |
|||
* @param {Modifier} modifier |
|||
* @returns {Component} |
|||
*/ |
|||
function processingList(colorTheme, modifier = new Modifier()) { |
|||
return builder.column() |
|||
.modifier(componentModifiers.majorArea) |
|||
.modifier( |
|||
new Modifier() |
|||
.background(colorTheme.secondary) |
|||
.border(new Border(1)) |
|||
.padding(8) |
|||
) |
|||
.modifier(modifier) |
|||
.chainChild() |
|||
.column() |
|||
.modifier( |
|||
new Modifier() |
|||
.background(Colors.white) |
|||
.clip(Shapes.RoundedCorner.all(6)) |
|||
) |
|||
} |
|||
|
|||
|
|||
function listArea(modifier = new Modifier()) { |
|||
return builder.row() |
|||
.addStyleClass("area") |
|||
.addStyleClass("area-lists") |
|||
.modifier(modifier) |
|||
.modifier(new Modifier().fillMaxWidth()) |
|||
.arrangement(Arrangement.SPACE_EVENLY) |
|||
.childContext([ |
|||
processingList(colorModifiers.upcoming) |
|||
.addStyleClass("plist") |
|||
.addStyleClass("plist-upcoming") |
|||
, |
|||
processingList(colorModifiers.done) |
|||
.addStyleClass("plist") |
|||
.addStyleClass("plist-done") |
|||
]) |
|||
.distibuteSpacingEvenly(true, 0.05) |
|||
} |
@ -0,0 +1,37 @@ |
|||
const processingRules = { |
|||
line_splitter: { |
|||
display: "Line splitter", |
|||
id: "line_splitter", |
|||
type: "text", |
|||
placeholder: "\n", |
|||
desc: "Das Zeichen um Zeilen umzubrechen.", |
|||
isFlagged: false |
|||
}, |
|||
|
|||
entry_splitter: { |
|||
display: "Entry Info Splitter", |
|||
id: "entry_splitter", |
|||
type: "text", |
|||
placeholder: ".", |
|||
desc: "Das Zeichen das eine Zeile in einzelne Informationen teilt.", |
|||
isFlagged: true |
|||
}, |
|||
|
|||
use_headrow: { |
|||
display: "Use Head Row", |
|||
id: "use_headrow", |
|||
type: "checkbox", |
|||
placeholder: "false", |
|||
desc: "Bestimmt das im Text, die erste Reihe potentielle Spaltenüberschriften beinhaltet.", |
|||
isFlagged: true |
|||
}, |
|||
|
|||
generated_fields: { |
|||
display: "Generate Fields", |
|||
id: "generated_fields", |
|||
type: "number", |
|||
placeholder: "1", |
|||
desc: "Definiert das zusätzliche Informationen aus den anderen generiert werden sollen.", |
|||
isFlagged: true |
|||
} |
|||
} |
@ -0,0 +1,40 @@ |
|||
202406-Rimpido-Schulung.mm |
|||
3D_Modelle.mm |
|||
Bastel-Projekte.mm |
|||
Bastel_Handwerksressoursen.mm |
|||
Besorgungen.mm |
|||
Bodenseeschifferpatent-Präsentation-Gruppe.mm |
|||
Bodenseeschifferpatent-Präsentation-Gruppe.pdf |
|||
'Bogenbau_ Sehnenbau_ Mittenwicklung – Wikibooks, Sammlung freier Lehr-, Sach- und Fachbücher.pdf' |
|||
'Büroumzug Aicheler.mm' |
|||
Checkliste.mm |
|||
ContentOrientatedText.mm |
|||
Data-Analysten_Augen.md |
|||
Data-Analysten_Augen.mm |
|||
Data-Analysten_Augen.pdf |
|||
Data-Analysten_Augen.png |
|||
Digitalisierung_von_analogen_Informationen.mm |
|||
'GTD - Fokus.mm' |
|||
Hochzeit.mm |
|||
'How to write Code.mm' |
|||
Krankenversicherung-2.mm |
|||
Krankenversicherung.mm |
|||
Kugelrechner.ods |
|||
Kugelrechner_quickVersion.ods |
|||
Linksammlung.mm |
|||
'Methanol - Synthese.mm' |
|||
Netzwerkkabel-Plan.ods |
|||
'Offene Recherchen.mm' |
|||
Projekt_LehrenMitarbeitenLernen.mm |
|||
Projekte.mm |
|||
'Rimpido - Unternehmens Roadmap.mm' |
|||
Rimpido-Sicherheitskonzept-Umstellung.mm |
|||
Systemalternativen.mm |
|||
Trauzeugenschaft_Stefan.mm |
|||
Typescript_Applikation.mm |
|||
Unternehmungen-n.pdf |
|||
Unternehmungen.mm |
|||
Unternehmungen.pdf |
|||
Wasser-Stromgenerator.mm |
|||
papbeton_betonplatten_volumenberchnungen.ods |
|||
rimpido.mm |
@ -0,0 +1,43 @@ |
|||
|
|||
class ComponentColor { |
|||
constructor(primary, secondary, text = Colors.black, accent = Colors.seagreen_1) { |
|||
this.primary = primary; |
|||
this.secondary = secondary; |
|||
this.text = text; |
|||
this.accent = accent; |
|||
} |
|||
} |
|||
|
|||
|
|||
const colorModifiers = { |
|||
upcoming: new ComponentColor( |
|||
MaterialFiveHundredlColors.BLUE, |
|||
MaterialFiveHundredlColors.BLUE, |
|||
MaterialFiveHundredlColors.BLUE, |
|||
MaterialFiveHundredlColors.BLUE, |
|||
), |
|||
done: new ComponentColor( |
|||
MaterialFiveHundredlColors.GREEN, |
|||
MaterialFiveHundredlColors.SEA_GREEN, |
|||
MaterialFiveHundredlColors.BLUE, |
|||
Colors.white, |
|||
), |
|||
deactivated: new ComponentColor( |
|||
Colors.gray, |
|||
Colors.lightgrey |
|||
), |
|||
active: new ComponentColor( |
|||
MaterialFiveHundredlColors.ORANGE, |
|||
MaterialFiveHundredlColors.SOFT_ORANGE |
|||
), |
|||
import: new ComponentColor( |
|||
MaterialFiveHundredlColors.BLUE, |
|||
MaterialFiveHundredlColors.BLUE, |
|||
MaterialFiveHundredlColors.BLUE, |
|||
MaterialFiveHundredlColors.BLUE, |
|||
) |
|||
} |
|||
|
|||
const componentModifiers={ |
|||
majorArea: new Modifier().clip(Shapes.RoundedCorner.all(16)), |
|||
} |
Loading…
Reference in new issue