Minetest checkbox_query now working; checkbox-based change_modules module still needs debugging
This commit is contained in:
@ -66,13 +66,13 @@ function modpol.interactions.dashboard(user)
|
||||
"size[10,8]",
|
||||
"hypertext[0.5,0.5;9,1;title;<big>Org dashboard</big>]",
|
||||
"label[0.5,2;All orgs:]",
|
||||
"dropdown[2,1.5;7,0.8;all_orgs;View...,"..formspec_list(all_orgs)..";;]",
|
||||
"dropdown[2.5,1.5;7,0.8;all_orgs;View...,"..formspec_list(all_orgs)..";;]",
|
||||
"label[0.5,3;Your orgs:]",
|
||||
"dropdown[2,2.5;7,0.8;user_orgs;View...,"..formspec_list(user_orgs)..";;]",
|
||||
"dropdown[2.5,2.5;7,0.8;user_orgs;View...,"..formspec_list(user_orgs)..";;]",
|
||||
"label[0.5,4;All users:]",
|
||||
"dropdown[2,3.5;7,0.8;all_users;View...,"..formspec_list(all_users)..";;]",
|
||||
"dropdown[2.5,3.5;7,0.8;all_users;View...,"..formspec_list(all_users)..";;]",
|
||||
"label[0.5,5;Pending ("..user_pending_count.."):]",
|
||||
"dropdown[2,4.5;7,0.8;pending;View...,"..formspec_list(user_pending)..";;]",
|
||||
"dropdown[2.5,4.5;7,0.8;pending;View...,"..formspec_list(user_pending)..";;]",
|
||||
"button[0.5,7;1,0.8;refresh;Refresh]",
|
||||
"button_exit[8.5,7;1,0.8;close;Close]",
|
||||
}
|
||||
@ -181,13 +181,13 @@ function modpol.interactions.org_dashboard(user, org_string)
|
||||
minetest.formspec_escape(org.name).."</b>"..membership_toggle(org.name).."</big>]",
|
||||
"label[0.5,1.25;Parent: "..parent..membership_toggle(parent).."]",
|
||||
"label[0.5,2;Members:]",
|
||||
"dropdown[2,1.5;7,0.8;members;View...,"..formspec_list(members)..";;]",
|
||||
"dropdown[2.5,1.5;7,0.8;members;View...,"..formspec_list(members)..";;]",
|
||||
"label[0.5,3;Child orgs:]",
|
||||
"dropdown[2,2.5;7,0.8;children;View...,"..formspec_list(children)..";;]",
|
||||
"dropdown[2.5,2.5;7,0.8;children;View...,"..formspec_list(children)..";;]",
|
||||
"label[0.5,4;Modules:]",
|
||||
"dropdown[2,3.5;7,0.8;modules;View...,"..formspec_list(modules)..";;]",
|
||||
"dropdown[2.5,3.5;7,0.8;modules;View...,"..formspec_list(modules)..";;]",
|
||||
"label[0.5,5;Pending ("..num_pending.."):]",
|
||||
"dropdown[2,4.5;7,0.8;pending;View...,"..formspec_list(pending)..";;]",
|
||||
"dropdown[2.5,4.5;7,0.8;pending;View...,"..formspec_list(pending)..";;]",
|
||||
"button[0.5,7;1,0.8;refresh;Refresh]",
|
||||
"button[8.5,7;1,0.8;back;Back]",
|
||||
}
|
||||
@ -286,7 +286,7 @@ function modpol.interactions.user_dashboard(viewer, user, completion)
|
||||
"size[10,8]",
|
||||
"hypertext[0.5,0.5;9,1;title;<big>User: <b>"..user.."</b></big>]",
|
||||
"label[0.5,2;User's orgs:]",
|
||||
"dropdown[2,1.5;7,0.8;user_orgs;View...,"..formspec_list(user_orgs)..";;]",
|
||||
"dropdown[2.5,1.5;7,0.8;user_orgs;View...,"..formspec_list(user_orgs)..";;]",
|
||||
"button[0.5,7;1.5,0.8;message;Message]",
|
||||
"button_exit[8.5,7;1,0.8;close;Close]",
|
||||
}
|
||||
@ -484,6 +484,85 @@ minetest.register_on_player_receive_fields(function (player, formname, fields)
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
--- Function: modpol.interactions.checkbox_query
|
||||
-- Allows user to select from a set of options
|
||||
-- @param user Name of user (string)
|
||||
-- @param label Query for user before options (string)
|
||||
-- @param options table of options and their checked status in the form {{"option_1_string", true}, {"option_2_string", false}}
|
||||
-- @param func function to be called with param "input", made up of the corrected table in the same format as the param options
|
||||
function modpol.interactions.checkbox_query(
|
||||
user, label, options, func)
|
||||
-- set up formspec
|
||||
-- prepare options
|
||||
local vertical = 0
|
||||
local checkbox_options = {}
|
||||
for i,v in ipairs(options) do
|
||||
local fs_line = ""
|
||||
vertical = i * .5
|
||||
fs_line = "checkbox[0,"..vertical..";checkbox_"..i..";"..
|
||||
v[1]..";"..tostring(v[2]).."]"
|
||||
table.insert(checkbox_options, fs_line)
|
||||
end
|
||||
local max = vertical * 4
|
||||
local bar_height = vertical / 2
|
||||
local formspec = {
|
||||
"formspec_version[4]",
|
||||
"size[10,8]",
|
||||
"label[0.5,0.5;"..label.."]",
|
||||
"scrollbaroptions[arrows=default;max="..max..";smallstep=10;largestep=100;thumbsize="..bar_height.."]",
|
||||
"scrollbar[9,1;0.3,5.5;vertical;scroller;0]",
|
||||
"scroll_container[0.5,1;9,5.5;scroller;vertical]",
|
||||
}
|
||||
-- prepare options
|
||||
for i,v in ipairs(options) do
|
||||
local fs_line = ""
|
||||
local vertical = i * .5
|
||||
fs_line = "checkbox[0,"..vertical..";checkbox_"..i..";"..
|
||||
minetest.formspec_escape(v[1])..";"
|
||||
..tostring(v[2]).."]"
|
||||
table.insert(formspec, fs_line)
|
||||
end
|
||||
table.insert(formspec,"scroll_container_end[]")
|
||||
table.insert(formspec,"button[0.5,7;1.5,0.8;submit;Submit]")
|
||||
table.insert(
|
||||
formspec,"button_exit[8,7;1.5,0.8;cancel;Cancel]")
|
||||
local formspec_string = table.concat(formspec, "")
|
||||
-- present to players
|
||||
minetest.show_formspec(user, "modpol:checkbox_query", formspec_string)
|
||||
-- put func in _contexts
|
||||
if _contexts[user] == nil then _contexts[user] = {} end
|
||||
_contexts[user]["checkbox_query_func"] = func
|
||||
_contexts[user]["checkbox_query_result"] = options
|
||||
end
|
||||
-- receive fields
|
||||
minetest.register_on_player_receive_fields(function (player, formname, fields)
|
||||
if formname == "modpol:checkbox_query" then
|
||||
local pname = player:get_player_name()
|
||||
-- start checking fields
|
||||
if fields.cancel then
|
||||
minetest.close_formspec(pname, formname)
|
||||
elseif fields.submit then
|
||||
-- send in result
|
||||
minetest.close_formspec(pname, formname)
|
||||
_contexts[pname].checkbox_query_func(
|
||||
_contexts[pname].checkbox_query_result)
|
||||
else
|
||||
for k,v in pairs(fields) do
|
||||
-- identify checkbox actions and flip bool
|
||||
if string.find(k,"checkbox_") then
|
||||
local index = tonumber(
|
||||
string.match(k,"%d+"))
|
||||
_contexts[pname].checkbox_query_result[index][2] =
|
||||
not _contexts[pname].checkbox_query_result[index][2]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
|
||||
-- Function: modpol.binary_poll_user(user, question, function)
|
||||
-- Overrides function at modpol/interactions.lua
|
||||
-- Params: user (string), question (string), func (function)
|
||||
|
Reference in New Issue
Block a user