1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
doc = {}
doc.VERSION = {}
doc.VERSION.MAJOR = 0
doc.VERSION.MINOR = 1
doc.VERSION.PATCH = 0
doc.VERSION.STRING = "0.1.0"
doc.data = {}
doc.data.categories = {}
function doc.new_category(id, def)
if doc.data.categories[id] == nil and id ~= nil then
doc.data.categories[id] = {}
doc.data.categories[id].entries = {}
doc.data.categories[id].def = def
return true
else
return false
end
end
doc.new_category("one", {name="One"})
doc.new_category("two", {name="Two"})
doc.new_category("three", {name="Three"})
function doc.new_entry(category_id, entry_id, def)
if doc.data.categories[category_id] ~= nil then
doc.data.categories[category_id].entries[entry_id] = def
return true
else
return false
end
end
doc.new_entry("one", "o1", {name="O1"})
doc.new_entry("one", "o2", {name="O2"})
doc.new_entry("one", "o3", {name="O3"})
function doc.show_doc(playername)
local formspec = doc.formspec_core()..doc.formspec_main()
minetest.show_formspec(playername, "doc:main", formspec)
end
function doc.formspec_core(tab)
if tab == nil then tab = 1 else tab = tostring(tab) end
return "size[12,9]tabheader[0,0;doc_header;Main,Category,Entry;"..tab..";true;false]"
end
function doc.formspec_main()
local y = 1
local formstring = "label[0,0;Available help topics:]"
for id,data in pairs(doc.data.categories) do
local button = "button[0,"..y..";3,1;doc_button_category_"..id..";"..data.def.name.."]"
formstring = formstring .. button
y = y + 1
end
return formstring
end
function doc.formspec_category(id)
local formstring
if id == nil then
formstring = "label[0,0;You haven't selected a help topic yet. Please select one in the category list first.]"
formstring = formstring .. "button[0,1;3,1;doc_button_goto_main;Go to category list]"
else
formstring = "label[0,0;Current help topic: "..doc.data.categories[id].def.name.."]"
formstring = formstring .. "label[0,0.5;Available entries:]"
formstring = formstring .. "textlist[0,1;11,7;doc_catlist;"
for eid,entry in pairs(doc.data.categories[id].entries) do
formstring = formstring .. entry.name .. ","
end
formstring = string.sub(formstring, 1, #formstring-1)
formstring = formstring .. "]"
formstring = formstring .. "button[0,8;3,1;doc_button_goto_entry;Show entry]"
end
return formstring
end
function doc.formspec_entry()
return "label[0,1;Entry]"
end
function doc.process_form(player,formname,fields)
local playername = player:get_player_name()
--[[ process clicks on the tab header ]]
if(formname == "doc:main" or formname == "doc:category" or formname == "doc:entry") then
if fields.doc_header ~= nil then
local tab = tonumber(fields.doc_header)
local formspec, subformname, contents
if(tab==1) then
contents = doc.formspec_main()
subformname = "main"
elseif(tab==2) then
contents = doc.formspec_category("one")
subformname = "category"
elseif(tab==3) then
contents = doc.formspec_entry()
subformname = "entry"
end
formspec = doc.formspec_core(tab)..contents
minetest.show_formspec(playername, "doc:" .. subformname, formspec)
return
end
end
end
minetest.register_on_player_receive_fields(doc.process_form)
minetest.register_chatcommand("doc", {
params = "",
description = "Show in-game documentation system.",
privs = {},
func = function(playername, param)
doc.show_doc(playername)
end,
}
)
|