Release_4.106.0
Version 1.1 von MACH ProForms GmbH am 27.03.2025
Allgemeines
Diese Version enthält umfangreiche Erweiterungen im Bereich des Formulareditors, welche wir Ihnen in diesem Artikel im Detail vorstellen.
Vergleich
function init() { var style=document.createElement('style'); style.type='text/css'; var myStyles=` .before-after-wrapper { outline: 1px solid gray; position: relative; height: 544px; width: 1121px; } .before-after-wrapper::before { background-color: hsla(172, 61%, 82%, 75%); top: 10px; color: gray; content: 'before'; left: 10px; opacity: 0; padding: 5px 10px; position: absolute; transition: opacity 200ms ease-in-out; z-index: 15; } :global(.before-after-wrapper.show-before::before) { opacity: 1; } .before-after-wrapper::after { background-color: hsla(172, 61%, 82%, 75%); border-radius: 40px; top: 10px; color: gray; opacity: 0; padding: 5px 10px; position: absolute; right: 10px; transition: opacity 200ms ease-in-out; z-index: 15; content: 'after'; } :global(.before-after-wrapper.show-after::after) { opacity: 1; } .before-image-wrapper { bottom: 0; left: 0; overflow: hidden; position: absolute; top: 0; z-index: 10; } .before-image { filter: brightness(95%); background-size: cover; height: 100%; width: 100%; } .after-image { background-size: cover; inset: 0; position: absolute; } .handle { align-items: center; background: gray; bottom: 0; cursor: col-resize; display: flex; justify-content: center; left: 50%; position: absolute; top: 0; width: 4px; z-index: 20; } .handle::before { content: ''; position: absolute; inset: 0 -20px; } .handle::after { align-items: center; background: gray; background-image: url('data:image/svg+xml,'); background-position: center; background-repeat: no-repeat; border-radius: 50%; color: gray; content: ''; display: flex; font-size: 16px; font-weight: bold; justify-content: center; max-height: 40px; max-width: 40px; min-height: 40px; min-width: 40px; }`; if(style.styleSheet){ style.styleSheet.cssText=myStyles; }else{ style.appendChild(document.createTextNode(myStyles)); } document.getElementsByTagName('head')[0].appendChild(style); // get the div containing both the before and after images const imageWrapper = document.querySelector(`.before-after-wrapper`); // check if the user is using a touch device const isTouch = window.matchMedia('(pointer: coarse)').matches; // initialize the dragElement function below dragElement(imageWrapper.querySelector('.handle')); // get the current coordinates of the .handle function getCoords(e) { let x, y; // get the current x and y of the users input (dragging .handle) // check if the device is a touch device if (isTouch) { // touchscreen: if the devices is a touch device, the x and y will be in the touches[0] object x = e.touches[0].clientX; y = e.touches[0].clientY; } else { // // desktop: if the device is not a touch device we can get it right from the event (e) object x = e.clientX; y = e.clientY; } return { x, y }; } // listens for the user touch/mouse input on the .handle element and drags the slider function dragElement(el) { let pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; // initialize the slider being dragged when the .handle is pressed if (isTouch) { el.ontouchstart = dragInit; } else { el.onmousedown = dragInit; } // call elementDrag/closeElementDrag when the users interacts with .handle function dragInit(e) { e = e || window.event; e.preventDefault(); // get the mouse cursor/touch position at startup const { x, y } = getCoords(e); pos3 = x; pos4 = y; if (isTouch) { document.ontouchend = closeElementDrag; // stop moving document.ontouchmove = elementDrag; // call function whenever the cursor moves } else { document.onmouseup = closeElementDrag; // stop moving document.onmousemove = elementDrag; // call function whenever the cursor moves } } // as the element is dragged update the .before-image-wrapper width function elementDrag(e) { e = e || window.event; e.preventDefault(); // calculate new cursor position: const { x, y } = getCoords(e); pos1 = pos3 - x; pos2 = pos4 - y; pos3 = x; pos4 = y; let wrapperRight = el.offsetLeft - pos1; if (wrapperRight >= 0 && wrapperRight <= imageWrapper.offsetWidth) { // set the element's new position: el.style.left = `${el.offsetLeft - pos1}px`; imageWrapper.querySelector('.before-image-wrapper').style.width = `${wrapperRight}px`; } } function closeElementDrag() { if (isTouch) { document.ontouchend = null; document.ontouchmove = null; } else { document.onmouseup = null; document.onmousemove = null; } } } } window.addEventListener('load', init);
Anpassungen
Oberfläche Übersicht
- generell optische Anpassungen und neuer Anstrich
- Bereiche clustern
- Bereiche mit Labels A, P/H, K, B
Übersicht der Änderungen
Assistentenbereich
- Neue Gruppierung der Buttons
- Neuer Button zum Starten der Veröffentlichung (wenn vorhanden)
Panelbereich
- Jetzt eine Zeile
- Erster Button schaltet zwischen Panel und Hierarchie um
- Die Buttons für Aktivierung und Validierungsregeln erhalten nun die Farbe, wenn vorhanden
Hierarchie
- Wechsel zwischen Panelbereich/Hierarchie über Button mit Status
- blaues Label ändert sich P/H
Komponentenbereich
- Darstellung erweitert um Bezeichnung öffentlich, zusätzlich zu Bezeichnung intern
- Komponenteneinstellungen
- Symbole a Status jetzt auf Schaltflächen erkennbar
- Symbole b fällt weg: "ContextIdentifier" oder eine "Vorbefüllung" hat, wird in der Listendarstellung der Komponenten nicht mehr angezeigt
weiterhin in Einstellungen konfigurierbar - farbige Kennzeichnung Beregelung > auf Schaltflächen
- Schaltflächen dazugekommen zu bestehenden
- Schaltfläche Pflichtkomponente / Pflichtgruppe
weiterhin in Einstellungen konfigurierbar - Funktionen "Anzeige im Assistenten", "Anzeige im PDF" und "Anzeigen in der Druckvorschau" jetzt zusätzlich über Schaltflächen konfigurierbar
weiterhin in Einstellungen konfigurierbar - Farbe der Schaltfläche steht für die Einstellung: grün/gelb/schwarz
- Schaltfläche Pflichtkomponente / Pflichtgruppe
- verknüpfte Komponenten
- anderes, einheitliches Symbol
- enthaltende Komponenten sehen, aufklappbar
Bibliothek
- Mehrere Verlage nun als Dropdown
- Hinzufügen als Kopie oder Verknüpfung nun über Button mit Status,
nach Hinzufügen als Kopie springt der Button wieder zurück auf als Verknüpfung hinzufügen