Mercurial > prosody-modules
comparison mod_adhoc_dataforms_demo/mod_adhoc_dataforms_demo.lua @ 3558:22587eb2d87c
mod_adhoc_dataforms_demo: Add a multi-step command demo
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 06 Apr 2019 18:32:24 +0200 |
parents | 54b4b020de4c |
children | f5caacd475c4 |
comparison
equal
deleted
inserted
replaced
3557:54b4b020de4c | 3558:22587eb2d87c |
---|---|
119 | 119 |
120 module:provides("adhoc", | 120 module:provides("adhoc", |
121 adhoc_new("Dataforms Demo", | 121 adhoc_new("Dataforms Demo", |
122 "xmpp:zash.se/mod_adhoc_dataforms_demo#form", | 122 "xmpp:zash.se/mod_adhoc_dataforms_demo#form", |
123 adhoc_util.new_simple_form(form, handler))); | 123 adhoc_util.new_simple_form(form, handler))); |
124 | |
125 | |
126 local function multi_step_command(_, data, state) | |
127 | |
128 if data.action == "cancel" then | |
129 return { status = "canceled" }; | |
130 elseif data.action == "complete" then | |
131 return { | |
132 status = "completed", | |
133 info = "State was:\n" | |
134 .. serialization.serialize(state, { fatal = false }), | |
135 }; | |
136 end | |
137 state = state or { step = 1, forms = { } }; | |
138 | |
139 if data.action == "next" then | |
140 state.step = state.step + 1; | |
141 elseif data.action == "prev" then | |
142 state.step = math.max(state.step - 1, 1); | |
143 end | |
144 | |
145 local current_form = state.forms[state.step] | |
146 if not current_form then | |
147 current_form = { | |
148 title = string.format("Step %d", state.step); | |
149 instructions = state.step == 1 and "Here's a form." or "Here's another form."; | |
150 }; | |
151 local already_selected = {}; | |
152 for _ = 1, math.random(1, 5) do | |
153 local random | |
154 repeat | |
155 random = math.random(2, #form); | |
156 until not already_selected[random] | |
157 table.insert(current_form, form[random]); | |
158 end | |
159 state.forms[state.step] = dataforms.new(current_form); | |
160 end | |
161 | |
162 local next_step = { | |
163 status = "executing", | |
164 form = current_form, | |
165 actions = { | |
166 "next", "complete" | |
167 }, | |
168 }; | |
169 if state.step > 1 then | |
170 table.insert(next_step.actions, 1, "prev"); | |
171 end | |
172 return next_step, state; | |
173 end | |
174 | |
175 module:provides("adhoc", | |
176 adhoc_new("Multi-step command demo", | |
177 "xmpp:zash.se/mod_adhoc_dataforms_demo#multi", | |
178 multi_step_command)); | |
179 |