From c541888cbd51ae277f06e7baa092fe526d742f89 Mon Sep 17 00:00:00 2001 From: Nathan Schneider Date: Fri, 23 Apr 2021 23:21:02 -0600 Subject: [PATCH 1/4] Linked org_dashboard to dashboard, added basic join/leave buttons --- .../overrides/interactions/interactions.lua | 45 +++++++++++++++++-- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/modpol_minetest/overrides/interactions/interactions.lua b/modpol_minetest/overrides/interactions/interactions.lua index 4cc8464..e79ab32 100644 --- a/modpol_minetest/overrides/interactions/interactions.lua +++ b/modpol_minetest/overrides/interactions/interactions.lua @@ -29,6 +29,9 @@ local formspec_fields = {} -- output: a formspec-ready list of the strings local function formspec_list(array) local escaped = {} + if not array then + return "" + end for i = 1, #array do escaped[i] = minetest.formspec_escape(array[i]) end @@ -54,7 +57,7 @@ function modpol.interactions.dashboard(user) local formspec = { "formspec_version[4]", "size[10,8]", - "label[0.5,0.5;MODULAR POLITICS]", + "label[0.5,0.5;M O D U L A R P O L I T I C S]", "label[0.5,2;All orgs:]", "dropdown[2,1.5;5,0.8;all_orgs;"..formspec_list(all_orgs)..";;]", "label[0.5,3;Your orgs:]", @@ -76,12 +79,20 @@ end minetest.register_on_player_receive_fields(function (player, formname, fields) if formname == "modpol:dashboard" then local pname = player:get_player_name() - if fields.test_poll then + if nil then + -- buttons first + elseif fields.test_poll then modpol.interactions.binary_poll_org(pname, 1, "Poll question (yes/no):") elseif fields.add_org then modpol.interactions.add_org(pname, 1) elseif fields.remove_org then modpol.interactions.remove_org(pname) + -- dropdowns need to go last + elseif fields.close then + minetest.close_formspec(pname, formname) + elseif fields.all_orgs or fields.user_orgs then + local org_name = fields.all_orgs or fields.user_orgs + modpol.interactions.org_dashboard(pname, org_name) end end end) @@ -94,14 +105,32 @@ function modpol.interactions.org_dashboard(user, org_name) -- prepare data local org = modpol.orgs.get_org(org_name) if not org then return nil end + local is_member = org:has_member(user) + local membership_toggle = function() + local toggle_code = "" + if is_member then + toggle_code = toggle_code + ..minetest.formspec_escape("leave")..";" + ..minetest.formspec_escape("Leave").."]" + else + toggle_code = toggle_code + ..minetest.formspec_escape("join")..";" + ..minetest.formspec_escape("Join").."]" + end + return toggle_code + end -- set player context - _contexts[user][current_org] = org + local user_context = {} + user_context["current_org"] = org_name + _contexts[user] = user_context -- set up formspec local formspec = { "formspec_version[4]", "size[10,8]", "label[0.5,0.5;Org: ".. minetest.formspec_escape(org_name).."]", + "label[0.5,1;Parent: TODO]", + "button[8.5,0.5;1,0.8;"..membership_toggle(), "label[0.5,2;Members:]", "dropdown[2,1.5;5,0.8;user_orgs;"..formspec_list(org.members)..";;]", "label[0.5,3;Children:]", @@ -123,7 +152,15 @@ end minetest.register_on_player_receive_fields(function (player, formname, fields) if formname == "modpol:org_dashboard" then local pname = player:get_player_name() - if fields.test_poll then + local org = modpol.orgs.get_org(_contexts[pname].current_org) + if nil then + elseif fields.join then + org:add_member(pname) + modpol.interactions.org_dashboard(pname,org.name) + elseif fields.leave then + org:remove_member(pname) + modpol.interactions.dashboard(pname) + elseif fields.test_poll then modpol.interactions.binary_poll_org(pname, _contexts.pname.current_org.id, "Poll question (yes/no):") elseif fields.add_org then modpol.interactions.add_org(pname, _contexts.pname.current_org.id) From a923f5f2496cab47569d5fdf3f25c39bcac06596 Mon Sep 17 00:00:00 2001 From: Nathan Schneider Date: Tue, 27 Apr 2021 22:54:15 -0600 Subject: [PATCH 2/4] Fixes on creating and listing child orgs in formspec dashboards --- .../overrides/interactions/interactions.lua | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/modpol_minetest/overrides/interactions/interactions.lua b/modpol_minetest/overrides/interactions/interactions.lua index e79ab32..fa33508 100644 --- a/modpol_minetest/overrides/interactions/interactions.lua +++ b/modpol_minetest/overrides/interactions/interactions.lua @@ -119,6 +119,11 @@ function modpol.interactions.org_dashboard(user, org_name) end return toggle_code end + local children = {} + for k,v in ipairs(org.children) do + local this_child = modpol.orgs.get_org(v) + table.insert(children, this_child.name) + end -- set player context local user_context = {} user_context["current_org"] = org_name @@ -134,13 +139,13 @@ function modpol.interactions.org_dashboard(user, org_name) "label[0.5,2;Members:]", "dropdown[2,1.5;5,0.8;user_orgs;"..formspec_list(org.members)..";;]", "label[0.5,3;Children:]", - "dropdown[2,2.5;5,0.8;children;"..formspec_list(org.children)..";;]", + "dropdown[2,2.5;5,0.8;children;"..formspec_list(children)..";;]", "label[0.5,4;Policies:]", "dropdown[2,3.5;5,0.8;policies;"..formspec_list(org.policies)..";;]", "label[0.5,5;Processes:]", "dropdown[2,4.5;5,0.8;processes;"..formspec_list(org.processes)..";;]", "button[0.5,7;1,0.8;test_poll;Test poll]", - "button[2,7;1,0.8;add_org;Add child]", + "button[2,7;1,0.8;add_child;Add child]", "button[3.5,7;1.5,0.8;remove_org;Remove org]", "button[8.5,7;1,0.8;back;Back]", } @@ -162,8 +167,8 @@ minetest.register_on_player_receive_fields(function (player, formname, fields) modpol.interactions.dashboard(pname) elseif fields.test_poll then modpol.interactions.binary_poll_org(pname, _contexts.pname.current_org.id, "Poll question (yes/no):") - elseif fields.add_org then - modpol.interactions.add_org(pname, _contexts.pname.current_org.id) + elseif fields.add_child then + modpol.interactions.add_org(pname, org.id) elseif fields.remove_org then modpol.interactions.remove_org(pname) elseif fields.back then From 37aadb90c5c5843c0d4eb45a1e486a20f3e74031 Mon Sep 17 00:00:00 2001 From: Nathan Schneider Date: Wed, 28 Apr 2021 22:27:21 -0600 Subject: [PATCH 3/4] Added user argument to org:add_org in minetest interactions, anticipating change on master --- modpol_minetest/overrides/interactions/interactions.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modpol_minetest/overrides/interactions/interactions.lua b/modpol_minetest/overrides/interactions/interactions.lua index fa33508..cbbb814 100644 --- a/modpol_minetest/overrides/interactions/interactions.lua +++ b/modpol_minetest/overrides/interactions/interactions.lua @@ -318,7 +318,7 @@ function modpol.interactions.add_org(initiator, base_org_id) _contexts[initiator] = function(input) if input then local base_org = modpol.orgs.get_org(base_org_id) - local result = base_org:add_org(input) + local result = base_org:add_org(input, initiator) if result then local message = input .. " created" modpol.interactions.message(initiator, message) From d7d8e6907d043d531dab55e481ad184923859b3d Mon Sep 17 00:00:00 2001 From: Nathan Schneider Date: Wed, 28 Apr 2021 23:13:36 -0600 Subject: [PATCH 4/4] Preparing to merge basic interactions --- modpol_minetest/overrides/interactions/interactions.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/modpol_minetest/overrides/interactions/interactions.lua b/modpol_minetest/overrides/interactions/interactions.lua index cbbb814..30ec7f0 100644 --- a/modpol_minetest/overrides/interactions/interactions.lua +++ b/modpol_minetest/overrides/interactions/interactions.lua @@ -245,6 +245,7 @@ minetest.register_on_player_receive_fields(function (player, formname, fields) end end) + -- SECONDARY INTERACTIONS -- ======================