Skip to content

Commit 72d5ff4

Browse files
committed
event: not throwing error when event type is unsupported
1 parent 340bc4c commit 72d5ff4

File tree

4 files changed

+34
-48
lines changed

4 files changed

+34
-48
lines changed

fixtures/html/canvas-leaferjs.html

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,6 @@
99
<body>
1010
</body>
1111

12-
<script type="module">
13-
import { Leafer, Rect } from 'https://unpkg.com/[email protected]/dist/web.module.min.js';
14-
try {
15-
var leafer = new Leafer({ view: window });
16-
var rect = new Rect({
17-
x: 100,
18-
y: 100,
19-
width: 200,
20-
height: 200,
21-
fill: '#32cd79',
22-
cornerRadius: [50, 80, 0, 80],
23-
draggable: true,
24-
});
25-
leafer.add(rect);
26-
console.info(leafer);
27-
} catch (error) {
28-
console.error(error);
29-
}
30-
</script>
12+
<script type="module" src="./canvas-leaferjs.js"></script>
3113

3214
</html>

fixtures/html/canvas-leaferjs.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { Leafer, Rect } from 'https://unpkg.com/[email protected]/dist/web.module.min.js';
2+
try {
3+
var leafer = new Leafer({ view: window });
4+
var rect = new Rect({
5+
x: 100,
6+
y: 100,
7+
width: 200,
8+
height: 200,
9+
fill: '#32cd79',
10+
cornerRadius: [50, 80, 0, 80],
11+
draggable: true,
12+
});
13+
leafer.add(rect);
14+
console.info(leafer);
15+
} catch (error) {
16+
console.error(error);
17+
}

src/bindings/dom/event_target-inl.hpp

Lines changed: 12 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -164,15 +164,10 @@ namespace dombinding
164164
return env.Undefined();
165165
}
166166

167-
dom::DOMEventType eventType;
168-
try
167+
std::optional<dom::DOMEventType> eventType = dom::StringToEventType(typeString, eventTargetType());
168+
if (!eventType.has_value())
169169
{
170-
eventType = dom::StringToEventType(typeString, eventTargetType());
171-
}
172-
catch (const invalid_argument &e)
173-
{
174-
auto msg = "Failed to execute 'addEventListener' on 'EventTarget': " + string(e.what());
175-
Napi::TypeError::New(env, msg).ThrowAsJavaScriptException();
170+
cerr << "The event type '" << typeString << "' is not supported by the event target." << endl;
176171
return env.Undefined();
177172
}
178173

@@ -227,7 +222,7 @@ namespace dombinding
227222
}
228223
};
229224

230-
auto nativeListener = eventTarget->addEventListener(eventType, listenerCallback);
225+
auto nativeListener = eventTarget->addEventListener(eventType.value(), listenerCallback);
231226
listenerRefToNativeIdMap.insert({listenerRef, nativeListener->id});
232227
return env.Undefined();
233228
}
@@ -266,15 +261,10 @@ namespace dombinding
266261
return env.Undefined();
267262
}
268263

269-
dom::DOMEventType eventType;
270-
try
271-
{
272-
eventType = dom::StringToEventType(typeString, eventTargetType());
273-
}
274-
catch (const invalid_argument &e)
264+
std::optional<dom::DOMEventType> eventType = dom::StringToEventType(typeString, eventTargetType());
265+
if (!eventType.has_value())
275266
{
276-
auto msg = "Failed to execute 'removeEventListener' on 'EventTarget': " + string(e.what());
277-
Napi::TypeError::New(env, msg).ThrowAsJavaScriptException();
267+
cerr << "The event type '" << typeString << "' is not supported by the event target." << endl;
278268
return env.Undefined();
279269
}
280270

@@ -284,7 +274,7 @@ namespace dombinding
284274
if (listenerRef->Value() == listenerValue)
285275
{
286276
uint32_t listenerId = it->second;
287-
eventTarget->removeEventListener(eventType, listenerId);
277+
eventTarget->removeEventListener(eventType.value(), listenerId);
288278
it = listenerRefToNativeIdMap.erase(it);
289279
break;
290280
}
@@ -328,19 +318,14 @@ namespace dombinding
328318
}
329319

330320
auto eventTypeString = eventObject.Get("type").ToString().Utf8Value();
331-
dom::DOMEventType eventType;
332-
try
333-
{
334-
eventType = dom::StringToEventType(eventTypeString, eventTargetType());
335-
}
336-
catch (const invalid_argument &e)
321+
std::optional<dom::DOMEventType> eventType = dom::StringToEventType(eventTypeString, eventTargetType());
322+
if (!eventType.has_value())
337323
{
338-
auto msg = "Failed to execute 'dispatchEvent' on 'EventTarget': " + string(e.what());
339-
Napi::TypeError::New(env, msg).ThrowAsJavaScriptException();
324+
cerr << "The event type '" << eventTypeString << "' is not supported by the event target type." << endl;
340325
return env.Undefined();
341326
}
342327

343-
eventTarget->dispatchEvent(eventType, nullptr);
328+
eventTarget->dispatchEvent(eventType.value(), nullptr);
344329
return Napi::Boolean::New(env, true);
345330
}
346331

src/client/dom/dom_event_target.hpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
#include <string>
44
#include <memory>
5+
#include <optional>
6+
57
#include "common/utility.hpp"
68
#include "common/events_v2/event_target.hpp"
79

@@ -220,7 +222,7 @@ namespace dom
220222
* @param fromEventTarget The event target type that the event is from.
221223
* @returns The `DOMEventType` enum.
222224
*/
223-
inline DOMEventType StringToEventType(std::string typeStr, DOMEventTargetType fromEventTarget)
225+
inline std::optional<DOMEventType> StringToEventType(std::string typeStr, DOMEventTargetType fromEventTarget)
224226
{
225227
std::string eventFullName = ToLowerCase(typeStr);
226228
if (fromEventTarget != DOMEventTargetType::kEventTarget)
@@ -233,7 +235,7 @@ namespace dom
233235
DOM_EVENT_TYPES_MAP(XX)
234236
#undef XX
235237

236-
throw std::invalid_argument("Invalid event type string: " + typeStr);
238+
return std::nullopt;
237239
}
238240

239241
/**

0 commit comments

Comments
 (0)