diff options
-rw-r--r-- | Sluift/core.lua | 33 | ||||
-rw-r--r-- | Sluift/sluift.cpp | 2 |
2 files changed, 25 insertions, 10 deletions
diff --git a/Sluift/core.lua b/Sluift/core.lua index 48b8a97..ecd3c5e 100644 --- a/Sluift/core.lua +++ b/Sluift/core.lua @@ -442,6 +442,27 @@ local function read_file(file) return result end +_H = { + [[ Generate a form table, suitable for PubSubConfiguration and MAMQuery ]], + parameters = { {"fields", "The fields that will be converted into a form table"}, + {"form_type", "If specified, add a form_type field with this value"}, + {"type", "Form type, e.g. 'submit'"} } +} +local function create_form(fields, ...) + local options = parse_options({}, ...) + local result = { fields = {} } + for var, value in pairs(fields) do + result.fields[#result.fields+1] = { name = var, value = value } + end + if options.form_type then + result.fields[#result.fields+1] = { name = 'form_type', value = form_type } + end + if options.type then + result['type'] = type + end + return result +end + -------------------------------------------------------------------------------- -- Metatables -------------------------------------------------------------------------------- @@ -809,14 +830,7 @@ end -------------------------------------------------------------------------------- local function pubsub_node_configuration_to_form(configuration) - if not configuration then - return - end - local fields = { {name = 'form_type', value = 'http://jabber.org/protocol/pubsub#node_config'} } - for var, value in pairs(configuration) do - fields[#fields+1] = { name = var, value = value } - end - return { type = "submit", fields = fields } + return create_form{configuration, form_type="http://jabber.org/protocol/pubsub#node_config", type="submit"} end function PubSubNode:list_items (options) @@ -1018,5 +1032,6 @@ return { help = help, extra_help = extra_help, copy = copy, - with = with + with = with, + create_form = create_form } diff --git a/Sluift/sluift.cpp b/Sluift/sluift.cpp index a04ceeb..b55649b 100644 --- a/Sluift/sluift.cpp +++ b/Sluift/sluift.cpp @@ -391,7 +391,7 @@ SLUIFT_API int luaopen_sluift(lua_State* L) { // Register convenience functions lua_rawgeti(L, LUA_REGISTRYINDEX, Sluift::globals.coreLibIndex); std::vector<std::string> coreLibExports = boost::assign::list_of - ("tprint")("disco")("help")("get_help")("copy")("with")("read_file"); + ("tprint")("disco")("help")("get_help")("copy")("with")("read_file")("create_form"); foreach (const std::string& coreLibExport, coreLibExports) { lua_getfield(L, -1, coreLibExport.c_str()); lua_setfield(L, -3, coreLibExport.c_str()); |