Severin Opel
86b23f4e6f
Migrated a ot of the content from the tuesch to the iwmlib. This is before the decoupeling of the layers.
134 lines
4.1 KiB
HTML
134 lines
4.1 KiB
HTML
<!doctype html>
|
|
<html lang='en'>
|
|
|
|
<head>
|
|
<meta charset='UTF-8'>
|
|
<title>Utils</title>
|
|
<link rel='stylesheet' href='../iwmlib/lib/3rdparty/highlight/styles/default.css'>
|
|
<link rel='stylesheet' href='../iwmlib/lib/../css/doctest.css'>
|
|
<script src='../iwmlib/lib/3rdparty/highlight/highlight.pack.js'></script>
|
|
<script src='../iwmlib/lib/3rdparty/all.js'></script>
|
|
<script src='../iwmlib/lib/all.js'></script>
|
|
<script src='../iwmlib/lib/pixi/all.js'></script>
|
|
<script src="all.js"></script>
|
|
|
|
<style>
|
|
body {
|
|
position: relative;
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body onload="Doctest.run()">
|
|
<h1>Utils</h1>
|
|
<p>Some utility functionalities for the Tuesch.</p>
|
|
|
|
<h2>Event Handler</h2>
|
|
<p>
|
|
The event handler class generalizes a common design principle in javascript. When an event occurs, that is of relevance for
|
|
other objects, then this event should be sent out to all objects, that are interested in that event. Objects interested
|
|
in that event, subscribe the event handler and get notified via a callback function.
|
|
</p>
|
|
<script class="doctest">
|
|
let result = []
|
|
function a() { result.push("a") }
|
|
function b() { result.push("b") }
|
|
function c() { result.push("c") }
|
|
function d() { result.push("d") }
|
|
function e() { result.push("e") }
|
|
function f() { result.push("f") }
|
|
|
|
//Init and call.
|
|
let eventHandler = new EventHandler("manual", { listeners: [a, b] })
|
|
eventHandler.call()
|
|
Doctest.expect(result.join(","), ["a", "b"].join(","))
|
|
result = []
|
|
|
|
// Add single
|
|
eventHandler.add(c)
|
|
eventHandler.call()
|
|
Doctest.expect(result.join(","), ["a", "b", "c"].join(","))
|
|
result = []
|
|
|
|
// Add multiple
|
|
eventHandler.addMultiple(d, e, f)
|
|
eventHandler.call()
|
|
Doctest.expect(result.join(","), ["a", "b", "c", "d", "e", "f"].join(","))
|
|
result = []
|
|
|
|
//Remove inbetween
|
|
eventHandler.remove(c)
|
|
eventHandler.call()
|
|
Doctest.expect(result.join(","), ["a", "b", "d", "e", "f"].join(","))
|
|
result = []
|
|
|
|
// Remove first
|
|
eventHandler.remove(a)
|
|
eventHandler.call()
|
|
Doctest.expect(result.join(","), ["b", "d", "e", "f"].join(","))
|
|
result = []
|
|
|
|
// Remove all remaining elements.
|
|
eventHandler.empty()
|
|
eventHandler.call()
|
|
Doctest.expect(result.join(","), [].join(","))
|
|
result = []
|
|
|
|
|
|
|
|
</script>
|
|
|
|
<h2>DomUtils</h2>
|
|
|
|
Utility functions that help handling the DOM.
|
|
|
|
<h3>positionOnElement(element, position)</h3>
|
|
Function that returns the global position for a normalized position.
|
|
|
|
<div id="positionOnElementBox" class="box" style="width: 512px;height:256px;border: 1px solid black; box-sizing: border-box; transform: rotate(30deg); margin:100px;"></div>
|
|
|
|
<script class="doctest">
|
|
|
|
|
|
let target = document.getElementById("positionOnElementBox")
|
|
|
|
window.addEventListener("load", () => {
|
|
|
|
let positions = [
|
|
[0, 0],
|
|
[0, 1],
|
|
[1, 0],
|
|
[0.5,0.5],
|
|
[0.2, 0.2],
|
|
[0.2, 0.8],
|
|
[0.8, 0.2],
|
|
[0.8, 0.8],
|
|
]
|
|
|
|
positions.forEach(position => {
|
|
position = { x: position[0], y: position[1] }
|
|
let transformedPosition = DomUtils.positionOnElement(target, position)
|
|
let dot = document.createElement("div");
|
|
const size = 10;
|
|
|
|
|
|
Object.assign(dot.style, {
|
|
width: size + "px",
|
|
height: size + "px",
|
|
top: target.offsetTop + target.offsetHeight / 2 + transformedPosition.y -size/2+ "px",
|
|
left: target.offsetLeft + target.offsetWidth / 2 + transformedPosition.x -size/2 + "px",
|
|
position: "absolute",
|
|
backgroundColor: "green",
|
|
borderRadius: "50%"
|
|
})
|
|
|
|
|
|
document.body.appendChild(dot)
|
|
})
|
|
})
|
|
|
|
</script>
|
|
|
|
</body>
|
|
|
|
</html> |