Für die Verwendung von OpenStreetMap nach der DSGVO habe ich eine kleine Bibliothek entwickelt. Diese bindet die Karte erst nach erfolgtem Opt-In ein.
Eine Beispielanwendung finden Sie hier und die Bibliothek selbst finden Sie hier.
Mit folgendem Fluid Tempalate Code kann man mittels VHS überprüfen ob eine Seite unter einer anderen Seite liegt.
<f:variable name="rootline" value="{v:page.rootline() -> v:iterator.extract(key: 'uid')}" /> <f:variable name="in_rootline" value="{v:condition.iterator.contains(needle:'3', haystack: rootline, then:'1', else:'0')}" />
Mittels
<f:debug>{rootline}</code> <f:debug>{in_rootline}</code>
Kann man dies in <f:if> etc. verwenden. in_rootline wird 1 wenn die Seite enthalten ist und 0 wenn die Seite nicht enthalten ist.
Nach einem Update von TYPO3 und der DCE Extension war bei mir der umschließende Container weg. Die Default.html aus dem Layout von FluidStyledContent wurde gar nicht verwendet.
Der Grund war diese neue Option, die nun standardmäßig auf an steht.
Ich habe von TYPO3 9.5.4 auf 9.5.15 und die DCE Extension von 1.6.0 auf 2.3.1 aktualisiert.
Mit folgender Funktion kann man ein gleichschenkliges Dreieck mit BC = hc auf ein Canvas zeichnen. Dei Position des Dreieckes ist durch die zwei Punkte A und D bestimmt, die die Strecke von A nach D definieren.
Die Funktion kann rechts getestet werden. Der Javascript Code folgt hier:
let canvas = document.getElementById('canvas'); function arrow(Ex, Ey, Tx, Ty) { let ctx = canvas.getContext('2d'); let ET = Math.sqrt(Math.pow(Tx - Ex, 2) + Math.pow(Ey - Ty, 2)); let EL = Math.sqrt(Math.pow(ET / 2, 2) + Math.pow(ET, 2)); let Alpha = Math.acos(ET / EL); let Alpha2 = Math.asin((Ey - Ty) / ET); let x_L = EL * Math.cos(Alpha + Alpha2); let y_L = EL * Math.sin(Alpha + Alpha2); let x_R = EL * Math.cos(Alpha - Alpha2); let y_R = EL * Math.sin(Alpha - Alpha2); let Rx = Ex + ((Tx > Ex)?1:-1) * x_R; let Ry = Ey + y_R; let Lx = Ex + ((Tx > Ex)?1:-1) * x_L; let Ly = Ey - y_L; ctx.clearRect(0, 0, 300, 300); ctx.beginPath(); ctx.moveTo(Ex, Ey); ctx.lineTo(Rx, Ry); ctx.lineTo(Lx, Ly); ctx.lineTo(Ex, Ey); ctx.stroke(); } canvas.addEventListener('mousemove', function(e) { arrow(150, 150, e.offsetX, e.offsetY); });
Mit folgender Funktion lassen sich Dateigrößen, die als Bytes übergeben werden formatieren. Kann leicht als Vue Filter verwendet werden.
export function fs(size: number): string { let mod = 1024; let units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']; let i = 0; for (i = 0; size > mod; i ++) { size = size / mod; } return round(size, 2) + ' ' + units[i]; }