|
55 | 55 | <tr><td colspan="2"></td></tr>
|
56 | 56 | <tr>
|
57 | 57 | <td>
|
58 |
| - <div class="reset" id="reset"><div class="flex=item">RESET</div></div> |
| 58 | + <div class="reset" id="reset"><div class="flex=item" id="resettext">START</div></div> |
59 | 59 | <div class="pointer" id="target">
|
60 | 60 | <div class="flex-item">T<br><br>A<br><br>R<br><br>G<br><br>E<br><br>T</div>
|
61 | 61 | </div>
|
|
74 | 74 |
|
75 | 75 | let padlen = 18
|
76 | 76 | let oData = {}
|
| 77 | +let isStart = true |
77 | 78 | let setEvents = new Set()
|
78 | 79 |
|
79 | 80 | function run(event, type) {
|
| 81 | + if (0 !== Object.keys(oData[type]).length) {return} |
| 82 | + |
80 | 83 | addEvent(type)
|
81 | 84 | let oList = {
|
82 | 85 | isPrimary: "boolean", // RFP true
|
|
94 | 97 | azimuthAngle: "number",
|
95 | 98 | }
|
96 | 99 | let oTemp = {}, oDisplay = []
|
97 |
| - oData = {} |
98 |
| - let lines = ["pressure", "pointerType", "tangentialPressure", "altitudeAngle"] |
99 |
| - let divider = "<span class='faint'>" + "----------".padStart(padlen) +"--------"+ sc |
100 | 100 |
|
101 | 101 | for (const k of Object.keys(oList)) {
|
102 |
| - if (lines.includes(k)) { |
103 |
| - oDisplay.push(divider) |
104 |
| - } |
| 102 | + let value |
105 | 103 | try {
|
106 |
| - let value = event[k], |
107 |
| - expected = oList[k] |
| 104 | + value = event[k] |
| 105 | + let expected = oList[k] |
108 | 106 | if (typeof value !== expected) {
|
109 |
| - value = "err" // zErrType + typeof value |
| 107 | + throw 'err' |
110 | 108 | } else if ("number" == expected && Number.isNaN(value)) {
|
111 |
| - value = "NaN" // zErrType + typeof value |
| 109 | + throw 'NaN' |
112 | 110 | } else {
|
113 | 111 | value = cleanFn(value)
|
114 | 112 | }
|
115 |
| - oTemp[k] = value |
116 |
| - oDisplay.push(s6 + k.padStart(padlen) +": "+ sc + value) |
117 | 113 | } catch(e) {
|
118 |
| - oTemp[k] = e.name |
| 114 | + value = e.name |
119 | 115 | }
|
| 116 | + oTemp[k] = value |
120 | 117 | }
|
| 118 | + // sort |
| 119 | + for (const k of Object.keys(oTemp).sort()) {oData[type][k] = oTemp[k]} |
121 | 120 |
|
122 |
| - // reorder so it matches TZP |
123 |
| - for (const k of Object.keys(oTemp).sort()) {oData[k] = oTemp[k]} |
| 121 | + // build display |
| 122 | + let lines = ["pressure", "pointerType", "tangentialPressure", "altitudeAngle"] |
| 123 | + let divider = "<span class='faint'>" + "----------".padStart(padlen) +"--------"+ sc |
| 124 | + let eventstr = '' |
| 125 | + for (const k of Object.keys(oList)) { |
| 126 | + if (lines.includes(k)) { |
| 127 | + oDisplay.push(divider) |
| 128 | + } |
| 129 | + let strActive = k.includes('ressure') ? s6 +' [active]' + sc : '' |
| 130 | + let valueDown = oData['pointerdown'][k], |
| 131 | + valueOver = oData['pointerover'][k] |
| 132 | + let str |
| 133 | + if (valueDown == undefined) { |
| 134 | + str = valueOver |
| 135 | + eventstr = 'pointerover' |
| 136 | + } else if (valueOver == undefined) { |
| 137 | + str = valueDown + strActive |
| 138 | + eventstr = 'pointerdown' |
| 139 | + } else { |
| 140 | + eventstr = 'pointerover | down' |
| 141 | + if (valueDown == valueOver) { |
| 142 | + str = valueDown |
| 143 | + } else { |
| 144 | + str = valueOver + " | " + valueDown + strActive |
| 145 | + } |
| 146 | + } |
| 147 | + oDisplay.push(s6 + k.padStart(padlen) +": "+ sc + str) |
| 148 | + } |
| 149 | + // display |
124 | 150 | let hash = mini(oData)
|
125 | 151 | let strHash = s6 + ("hash").padStart(padlen) +": "+ sc + hash
|
126 |
| - + '<br>' + s6 + ("event").padStart(padlen) +": "+ sc + type + ('pointerdown' == type ? s6+' [active]'+ sc : '') |
| 152 | + + '<br>' + s6 + ("events").padStart(padlen) +": "+ sc + eventstr |
127 | 153 | dom.results.innerHTML = strHash + "<br><br>" + oDisplay.join("<br>")
|
128 | 154 |
|
129 |
| - |
130 | 155 | }
|
131 | 156 |
|
132 | 157 | function addEvent(type) {
|
|
136 | 161 | }
|
137 | 162 |
|
138 | 163 | function reset() {
|
139 |
| - dom.results = '' |
140 |
| - dom.events = '' |
141 |
| - setEvents.clear() |
| 164 | + oData['pointerdown'] = {} |
| 165 | + oData['pointerover'] = {} |
| 166 | + |
| 167 | + // force mouse out of target area |
| 168 | + if (isStart) { |
| 169 | + start() |
| 170 | + dom.resettext.innerHTML = 'RESET' |
| 171 | + isStart = false |
| 172 | + } else { |
| 173 | + dom.results = '' |
| 174 | + dom.events = '' |
| 175 | + setEvents.clear() |
| 176 | + } |
142 | 177 | }
|
143 | 178 |
|
| 179 | +function start() { |
| 180 | + let target = dom.target |
| 181 | + target.addEventListener("pointerover", (event) => {run(event, 'pointerover')}) |
| 182 | + target.addEventListener("pointerdown", (event) => {run(event, 'pointerdown')}) |
| 183 | + target.addEventListener("pointermove", (event) => {addEvent('pointermove')}) |
| 184 | + target.addEventListener("mouseover", (event) => {addEvent('mouseover')}) |
| 185 | + target.addEventListener("mousedown", (event) => {addEvent('mousedown')}) |
| 186 | + target.addEventListener("mouseup", (event) => {addEvent('mouseup')}) |
| 187 | + target.addEventListener("mousemove", (event) => {addEvent('mousemove')}) |
| 188 | + |
| 189 | + target.addEventListener("touchstart", (event) => {addEvent('touchstart')}) |
| 190 | + target.addEventListener("touchmove", (event) => {addEvent('touchmove')}) |
| 191 | + target.addEventListener("touchend", (event) => {addEvent('touchend')}) |
| 192 | + target.addEventListener("touchcancel", (event) => {addEvent('touchcancel')}) |
| 193 | +} |
144 | 194 |
|
145 | 195 | let targetreset = dom.reset
|
146 | 196 | targetreset.addEventListener("pointerover", (event) => {reset()})
|
147 | 197 |
|
148 |
| -let target = dom.target |
149 |
| -target.addEventListener("pointerover", (event) => {run(event, 'pointerover')}) |
150 |
| -target.addEventListener("pointerdown", (event) => {run(event, 'pointerdown')}) |
151 |
| -target.addEventListener("pointermove", (event) => {addEvent('pointermove')}) |
152 |
| -target.addEventListener("mouseover", (event) => {addEvent('mouseover')}) |
153 |
| -target.addEventListener("mousedown", (event) => {addEvent('mousedown')}) |
154 |
| -target.addEventListener("mouseup", (event) => {addEvent('mouseup')}) |
155 |
| -target.addEventListener("mousemove", (event) => {addEvent('mousemove')}) |
156 |
| - |
157 |
| -target.addEventListener("touchstart", (event) => {addEvent('touchstart')}) |
158 |
| -target.addEventListener("touchmove", (event) => {addEvent('touchmove')}) |
159 |
| -target.addEventListener("touchend", (event) => {addEvent('touchend')}) |
160 |
| -target.addEventListener("touchcancel", (event) => {addEvent('touchcancel')}) |
161 |
| - |
162 |
| - |
163 | 198 | </script>
|
164 | 199 | </body>
|
165 | 200 | </html>
|
0 commit comments