Wiki-Quellcode von Release 4.106.0
Zuletzt geändert von MACH ProForms GmbH am 10.04.2025
Zeige letzte Bearbeiter
author | version | line-number | content |
---|---|---|---|
1 | (% class="box" id="HAllgemeines" %) | ||
2 | ((( | ||
3 | Diese Version enthält umfangreiche Erweiterungen im Bereich des Formulareditors, welche wir Ihnen in diesem Artikel im Detail vorstellen. | ||
4 | ))) | ||
5 | |||
6 | {{html}} | ||
7 | <div class="overflow-hidden before-after-wrapper"> | ||
8 | <div class="before-image-wrapper" style="width: 50%"> | ||
9 | <div class="before-image" style="background-image: url('https://mpfpublicstorage.blob.core.windows.net/mpf-marketing/wiki-v4106-as-before.png');"></div> | ||
10 | </div> | ||
11 | <div class="after-image" style="background-image: url('https://mpfpublicstorage.blob.core.windows.net/mpf-marketing/wiki-v4106-as-after.png');"></div> | ||
12 | <span class="handle draggable"></span> | ||
13 | </div> | ||
14 | |||
15 | <script type="text/javascript"> | ||
16 | function init() { | ||
17 | var style=document.createElement('style'); | ||
18 | style.type='text/css'; | ||
19 | var myStyles=` | ||
20 | .before-after-wrapper { | ||
21 | outline: 1px solid gray; | ||
22 | position: relative; | ||
23 | height: 544px; | ||
24 | width: 1100px; | ||
25 | } | ||
26 | |||
27 | .before-after-wrapper::before { | ||
28 | background-color: hsla(172, 61%, 82%, 75%); | ||
29 | |||
30 | top: 10px; | ||
31 | color: gray; | ||
32 | content: 'before'; | ||
33 | left: 10px; | ||
34 | opacity: 0; | ||
35 | padding: 5px 10px; | ||
36 | position: absolute; | ||
37 | transition: opacity 200ms ease-in-out; | ||
38 | z-index: 15; | ||
39 | } | ||
40 | |||
41 | :global(.before-after-wrapper.show-before::before) { | ||
42 | opacity: 1; | ||
43 | } | ||
44 | |||
45 | .before-after-wrapper::after { | ||
46 | background-color: hsla(172, 61%, 82%, 75%); | ||
47 | border-radius: 40px; | ||
48 | top: 10px; | ||
49 | color: gray; | ||
50 | opacity: 0; | ||
51 | padding: 5px 10px; | ||
52 | position: absolute; | ||
53 | right: 10px; | ||
54 | transition: opacity 200ms ease-in-out; | ||
55 | z-index: 15; | ||
56 | content: 'after'; | ||
57 | } | ||
58 | |||
59 | :global(.before-after-wrapper.show-after::after) { | ||
60 | opacity: 1; | ||
61 | } | ||
62 | |||
63 | .before-image-wrapper { | ||
64 | bottom: 0; | ||
65 | left: 0; | ||
66 | overflow: hidden; | ||
67 | position: absolute; | ||
68 | top: 0; | ||
69 | z-index: 10; | ||
70 | } | ||
71 | |||
72 | .before-image { | ||
73 | filter: brightness(95%); | ||
74 | background-size: cover; | ||
75 | height: 100%; | ||
76 | width: 100%; | ||
77 | } | ||
78 | |||
79 | .after-image { | ||
80 | background-size: cover; | ||
81 | inset: 0; | ||
82 | position: absolute; | ||
83 | } | ||
84 | |||
85 | .handle { | ||
86 | align-items: center; | ||
87 | background: gray; | ||
88 | bottom: 0; | ||
89 | cursor: col-resize; | ||
90 | display: flex; | ||
91 | justify-content: center; | ||
92 | left: 50%; | ||
93 | position: absolute; | ||
94 | top: 0; | ||
95 | width: 4px; | ||
96 | z-index: 20; | ||
97 | } | ||
98 | |||
99 | .handle::before { | ||
100 | content: ''; | ||
101 | position: absolute; | ||
102 | inset: 0 -20px; | ||
103 | } | ||
104 | |||
105 | .handle::after { | ||
106 | align-items: center; | ||
107 | background: gray; | ||
108 | background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 512 512"><path fill="hsl(172, 61%, 82%)" d="M505.7 265.7c3-3 3.1-7.9 .2-11.1l-104-112c-3-3.2-8.1-3.4-11.3-.4s-3.4 8.1-.4 11.3L481.7 252 23.3 252l90.3-90.3c3.1-3.1 3.1-8.2 0-11.3s-8.2-3.1-11.3 0l-104 104c-3.1 3.1-3.1 8.2 0 11.3l104 104c3.1 3.1 8.2 3.1 11.3 0s3.1-8.2 0-11.3L23.3 268l457.4 0-90.3 90.3c-3.1 3.1-3.1 8.2 0 11.3s8.2 3.1 11.3 0l104-104z"/></svg>'); | ||
109 | background-position: center; | ||
110 | background-repeat: no-repeat; | ||
111 | border-radius: 50%; | ||
112 | color: gray; | ||
113 | content: ''; | ||
114 | display: flex; | ||
115 | font-size: 16px; | ||
116 | font-weight: bold; | ||
117 | justify-content: center; | ||
118 | max-height: 40px; | ||
119 | max-width: 40px; | ||
120 | min-height: 40px; | ||
121 | min-width: 40px; | ||
122 | }`; | ||
123 | |||
124 | if(style.styleSheet){ | ||
125 | style.styleSheet.cssText=myStyles; | ||
126 | }else{ | ||
127 | style.appendChild(document.createTextNode(myStyles)); | ||
128 | } | ||
129 | document.getElementsByTagName('head')[0].appendChild(style); | ||
130 | |||
131 | // get the div containing both the before and after images | ||
132 | const imageWrapper = document.querySelector(`.before-after-wrapper`); | ||
133 | // check if the user is using a touch device | ||
134 | const isTouch = window.matchMedia('(pointer: coarse)').matches; | ||
135 | |||
136 | // initialize the dragElement function below | ||
137 | dragElement(imageWrapper.querySelector('.handle')); | ||
138 | |||
139 | // get the current coordinates of the .handle | ||
140 | function getCoords(e) { | ||
141 | let x, y; | ||
142 | |||
143 | // get the current x and y of the users input (dragging .handle) | ||
144 | // check if the device is a touch device | ||
145 | if (isTouch) { | ||
146 | // touchscreen: if the devices is a touch device, the x and y will be in the touches[0] object | ||
147 | x = e.touches[0].clientX; | ||
148 | y = e.touches[0].clientY; | ||
149 | } else { | ||
150 | // | ||
151 | // desktop: if the device is not a touch device we can get it right from the event (e) object | ||
152 | x = e.clientX; | ||
153 | y = e.clientY; | ||
154 | } | ||
155 | |||
156 | return { x, y }; | ||
157 | } | ||
158 | |||
159 | // listens for the user touch/mouse input on the .handle element and drags the slider | ||
160 | function dragElement(el) { | ||
161 | let pos1 = 0, | ||
162 | pos2 = 0, | ||
163 | pos3 = 0, | ||
164 | pos4 = 0; | ||
165 | |||
166 | // initialize the slider being dragged when the .handle is pressed | ||
167 | if (isTouch) { | ||
168 | el.ontouchstart = dragInit; | ||
169 | } else { | ||
170 | el.onmousedown = dragInit; | ||
171 | } | ||
172 | |||
173 | // call elementDrag/closeElementDrag when the users interacts with .handle | ||
174 | function dragInit(e) { | ||
175 | e = e || window.event; | ||
176 | e.preventDefault(); | ||
177 | |||
178 | // get the mouse cursor/touch position at startup | ||
179 | const { x, y } = getCoords(e); | ||
180 | pos3 = x; | ||
181 | pos4 = y; | ||
182 | |||
183 | if (isTouch) { | ||
184 | document.ontouchend = closeElementDrag; // stop moving | ||
185 | document.ontouchmove = elementDrag; // call function whenever the cursor moves | ||
186 | } else { | ||
187 | document.onmouseup = closeElementDrag; // stop moving | ||
188 | document.onmousemove = elementDrag; // call function whenever the cursor moves | ||
189 | } | ||
190 | } | ||
191 | |||
192 | // as the element is dragged update the .before-image-wrapper width | ||
193 | function elementDrag(e) { | ||
194 | e = e || window.event; | ||
195 | e.preventDefault(); | ||
196 | |||
197 | // calculate new cursor position: | ||
198 | const { x, y } = getCoords(e); | ||
199 | pos1 = pos3 - x; | ||
200 | pos2 = pos4 - y; | ||
201 | pos3 = x; | ||
202 | pos4 = y; | ||
203 | |||
204 | let wrapperRight = el.offsetLeft - pos1; | ||
205 | |||
206 | if (wrapperRight >= 0 && wrapperRight <= imageWrapper.offsetWidth) { | ||
207 | // set the element's new position: | ||
208 | el.style.left = `${el.offsetLeft - pos1}px`; | ||
209 | imageWrapper.querySelector('.before-image-wrapper').style.width = `${wrapperRight}px`; | ||
210 | } | ||
211 | } | ||
212 | |||
213 | function closeElementDrag() { | ||
214 | if (isTouch) { | ||
215 | document.ontouchend = null; | ||
216 | document.ontouchmove = null; | ||
217 | } else { | ||
218 | document.onmouseup = null; | ||
219 | document.onmousemove = null; | ||
220 | } | ||
221 | } | ||
222 | } | ||
223 | } | ||
224 | |||
225 | window.addEventListener('load', init); | ||
226 | </script> | ||
227 | {{/html}} | ||
228 | |||
229 | (% class="wikigeneratedid" %) | ||
230 | //Vergleich: Links (Version kleiner 4.106) - Rechts (Version gleich 4.106)// | ||
231 | |||
232 | = Anpassungen des Formulareditors = | ||
233 | |||
234 | {{toc start="2"/}} | ||
235 | |||
236 | == Zusammenfassung == | ||
237 | |||
238 | * optische Anpassungen und Modernisierung | ||
239 | * Die Bereiche Assistent, Panel/Hierarchie, Komponenten und Bibliothek sind gekennzeichnet und voneinander abgegrenzt. | ||
240 | * Schnellzugriff auf wichtige Komponenteneinstellungen durch Schaltflächen direkt in der Komponentenliste | ||
241 | |||
242 | == Übersicht der Änderungen == | ||
243 | |||
244 | === Assistentenbereich === | ||
245 | |||
246 | * neue Anordnung der Schaltflächen der Hauptwerkzeugleiste | ||
247 | |||
248 | === Panelbereich === | ||
249 | |||
250 | * Panelauswahl und Panelwerkzeugleiste wurden zu einer Zeile zusammengefasst. | ||
251 | * Umschalten zwischen Panel- und Hierarchieansicht geschieht jetzt durch eine Schaltfläche statt über Reiter | ||
252 | * Wenn Regeln konfiguriert sind, werden die Aktivierungs- und Validierungsregelschaltflächen rot hervorgehoben. | ||
253 | |||
254 | === Komponentenbereich === | ||
255 | |||
256 | * verbesserte Orientierung durch eine weitere Spalte "Bezeichnung öffentlich", zusätzlich zu "Bezeichnung intern" | ||
257 | * ((( | ||
258 | Konfiguration von Komponenten direkt in der Komponentenliste durch neue Schaltflächen: | ||
259 | |||
260 | * Pflichtkomponente / Pflichtgruppe (sofern Anzeige im Assistenten aktiviert) | ||
261 | * Eigenschaft der Komponente: "Anzeige im Assistent" | ||
262 | * Eigenschaft der Komponente: "Anzeige im PDF" | ||
263 | * Eigenschaft der Komponente: "Anzeige in der Druckvorschau" (sofern Druckvorschau aktiviert) | ||
264 | |||
265 | Zusätzlich zum Schnellzugriff über die neuen Schaltflächen finden Sie die Einstellungen wie bisher im Konfigurationsdialog der Komponenten. | ||
266 | \\Die Farbe der Schaltflächen in der Komponentenzeile zeigt den konfigurierten Status an: | ||
267 | |||
268 | * grün: aktiv/immer | ||
269 | * gelb: Anzeige wenn Wert vorhanden | ||
270 | * schwarz: deaktiviert/nie | ||
271 | * rot: Regel konfiguriert | ||
272 | ))) | ||
273 | * Symbole für "ContextIdentifier" und "Vorbefüllung" entfallen in der Listendarstellung der Komponenten. | ||
274 | Im Konfigurationsdialog der Komponente sind diese Funktionen weiterhin konfigurierbar. | ||
275 | * verknüpfte Komponenten: | ||
276 | ** das Symbol für verknüpft eingefügte Bausteine ist [[image:1743597653824-818.png||alt="Symbol ~"Link~" für Verknüpfung"]] | ||
277 | ** Die Bestandteile einer verknüpften Komponente/Komponentengruppe können jetzt angezeigt werden. | ||
278 | Klicken Sie zum Aufklappen auf das Pfeilsymbol links von der Bezeichnung. | ||
279 | |||
280 | === Bibliothek === | ||
281 | |||
282 | * Ein Dropdown ersetzt die Reiter für Verlage und eigene Bibliothek des Mandanten. | ||
283 | * Einfügen von Komponenten:[[image:Bibliothek_Kopie-Verknuepfung.png||data-xwiki-image-style-alignment="end"]] | ||
284 | ** Voreinstellung ist "Verknüpfung erstellen" | ||
285 | ** Um eine Kopie des markierten Bausteins einzufügen, schalten Sie die Schaltfläche "Verknüpfung erstellen/kopieren" um. Sie finden die Schaltfläche in der Kopfzeile der Bibliothek. | ||
286 | ** Nach Hinzufügen eines Bausteins wird die Schaltfläche wieder zurückgesetzt auf "Verknüpfung erstellen". | ||
287 | |||
288 | Standardkomponenten werden immer als Kopie eingefügt. Die Schaltfläche "Verknüpfung erstellen"/"kopieren" ist deaktiviert. |