Bläddra i källkod

Lua plugin: QuerySelector and QuerySelectorAll (#329)

Maximilian Stark 3 år sedan
förälder
incheckning
6e6df4ccec
2 ändrade filer med 27 tillägg och 0 borttagningar
  1. 25 0
      Source/Lua/Element.cpp
  2. 2 0
      Source/Lua/Element.h

+ 25 - 0
Source/Lua/Element.cpp

@@ -189,6 +189,29 @@ int ElementGetElementsByTagName(lua_State* L, Element* obj)
     return 1;
     return 1;
 }
 }
 
 
+int ElementQuerySelector(lua_State* L, Element* obj)
+{
+    const char* sel = luaL_checkstring(L,1);
+    Element* ele = obj->QuerySelector(sel);
+    LuaType<Element>::push(L,ele,false);
+    return 1;
+}
+
+int ElementQuerySelectorAll(lua_State* L, Element* obj)
+{
+    const char* tag = luaL_checkstring(L,1);
+    ElementList list;
+    obj->QuerySelectorAll(list,tag);
+    lua_newtable(L);
+    for(unsigned int i = 0; i < list.size(); i++)
+    {
+        PushIndex(L,i);
+        LuaType<Element>::push(L,list[i],false);
+        lua_settable(L,-3); //-3 is the table
+    }
+    return 1;
+}
+
 int ElementHasAttribute(lua_State* L, Element* obj)
 int ElementHasAttribute(lua_State* L, Element* obj)
 {
 {
     const char* name = luaL_checkstring(L,1);
     const char* name = luaL_checkstring(L,1);
@@ -565,6 +588,8 @@ RegType<Element> ElementMethods[] =
     RMLUI_LUAMETHOD(Element,GetAttribute)
     RMLUI_LUAMETHOD(Element,GetAttribute)
     RMLUI_LUAMETHOD(Element,GetElementById)
     RMLUI_LUAMETHOD(Element,GetElementById)
     RMLUI_LUAMETHOD(Element,GetElementsByTagName)
     RMLUI_LUAMETHOD(Element,GetElementsByTagName)
+    RMLUI_LUAMETHOD(Element,QuerySelector)
+    RMLUI_LUAMETHOD(Element,QuerySelectorAll)
     RMLUI_LUAMETHOD(Element,HasAttribute)
     RMLUI_LUAMETHOD(Element,HasAttribute)
     RMLUI_LUAMETHOD(Element,HasChildNodes)
     RMLUI_LUAMETHOD(Element,HasChildNodes)
     RMLUI_LUAMETHOD(Element,InsertBefore)
     RMLUI_LUAMETHOD(Element,InsertBefore)

+ 2 - 0
Source/Lua/Element.h

@@ -48,6 +48,8 @@ int ElementFocus(lua_State* L, Element* obj);
 int ElementGetAttribute(lua_State* L, Element* obj);
 int ElementGetAttribute(lua_State* L, Element* obj);
 int ElementGetElementById(lua_State* L, Element* obj);
 int ElementGetElementById(lua_State* L, Element* obj);
 int ElementGetElementsByTagName(lua_State* L, Element* obj);
 int ElementGetElementsByTagName(lua_State* L, Element* obj);
+int ElementQuerySelector(lua_State* L, Element* obj);
+int ElementQuerySelectorAll(lua_State* L, Element* obj);
 int ElementHasAttribute(lua_State* L, Element* obj);
 int ElementHasAttribute(lua_State* L, Element* obj);
 int ElementHasChildNodes(lua_State* L, Element* obj);
 int ElementHasChildNodes(lua_State* L, Element* obj);
 int ElementInsertBefore(lua_State* L, Element* obj);
 int ElementInsertBefore(lua_State* L, Element* obj);