Browse Source

Initial work on standardized ScriptEvent wrapper

Shaddock Heath 9 years ago
parent
commit
ae31ddef9d
2 changed files with 28 additions and 8 deletions
  1. 5 8
      Script/TypeScript/AtomicWork.d.ts
  2. 23 0
      Source/AtomicJS/Javascript/JSAtomic.cpp

+ 5 - 8
Script/TypeScript/AtomicWork.d.ts

@@ -27,23 +27,20 @@ declare module Atomic {
     // end subsystems
     // end subsystems
 
 
     // Base interface for events, contains eventType string and callback
     // Base interface for events, contains eventType string and callback
-    interface EventMetaData
-    {
+    interface EventMetaData {
         _eventType: string;
         _eventType: string;
         _callback: any;
         _callback: any;
     }
     }
 
 
-    interface NativeEvent extends EventMetaData
-    {
-    }
+    interface NativeEvent extends EventMetaData { }
 
 
-    interface ScriptEvent extends EventMetaData
-    {
-    }
+    interface ScriptEvent extends EventMetaData { }
 
 
     // typed callback generic
     // typed callback generic
     type EventCallback<T extends EventMetaData> = (data: T) => void;
     type EventCallback<T extends EventMetaData> = (data: T) => void;
 
 
+    export function ScriptEvent<T extends Atomic.EventMetaData>(eventType: string, callback: Atomic.EventCallback<T>): Atomic.EventMetaData;
+
     export interface PathInfo {
     export interface PathInfo {
 
 
         pathName: string;
         pathName: string;

+ 23 - 0
Source/AtomicJS/Javascript/JSAtomic.cpp

@@ -217,6 +217,26 @@ static int js_atomic_script(duk_context* ctx)
     return 1;
     return 1;
 }
 }
 
 
+static int js_atomic_ScriptEvent(duk_context* ctx)
+{
+    JSVM* vm = JSVM::GetJSVM(ctx);
+
+    duk_push_current_function(ctx);
+
+    if (duk_get_top(ctx) == 2)
+    {
+        String eventType = duk_get_string(ctx, 0);
+
+        duk_push_object(ctx);
+        duk_push_string(ctx, eventType.CString());
+        duk_put_prop_string(ctx, -2, "_eventType");
+        duk_dup(ctx, 1);
+        duk_put_prop_string(ctx, -2, "_callback");
+    }
+
+    return 1;
+}
+
 static void js_atomic_destroy_node(Node* node, duk_context* ctx, bool root = false)
 static void js_atomic_destroy_node(Node* node, duk_context* ctx, bool root = false)
 {
 {
 
 
@@ -435,6 +455,9 @@ void jsapi_init_atomic(JSVM* vm)
     duk_push_c_function(ctx, js_atomic_destroy, 1);
     duk_push_c_function(ctx, js_atomic_destroy, 1);
     duk_put_prop_string(ctx, -2, "destroy");
     duk_put_prop_string(ctx, -2, "destroy");
 
 
+    duk_push_c_function(ctx, js_atomic_ScriptEvent, 1);
+    duk_put_prop_string(ctx, -2, "ScriptEvent");
+
 
 
     duk_pop(ctx);
     duk_pop(ctx);