diff options
Diffstat (limited to 'init.lua')
-rw-r--r-- | init.lua | 55 |
1 files changed, 41 insertions, 14 deletions
@@ -268,8 +268,9 @@ function doc.show_entry(playername, category_id, entry_id, ignore_hidden) doc.generate_entry_list(category_id, playername) playerdata.catsel = playerdata.catsel_list[entry_id] + playerdata.galidx = 1 - local formspec = doc.formspec_core(3)..doc.formspec_entry(category_id, entry_id) + local formspec = doc.formspec_core(3)..doc.formspec_entry(category_id, entry_id, playername) minetest.show_formspec(playername, "doc:entry", formspec) else minetest.show_formspec(playername, "doc:error_hidden", doc.formspec_error_hidden(category_id, entry_id)) @@ -510,13 +511,19 @@ doc.widgets.text = function(data, x, y, width, height) end -- Image gallery -doc.widgets.gallery = function(imagedata, x, y, aspect_ratio, width, rows, imageindex) +doc.widgets.gallery = function(imagedata, playername, x, y, aspect_ratio, width, rows) + if playername == nil then return nil end -- emergency exit + local formstring = "" - if rows == nil then rows = 3 end + + -- Defaults if x == nil then x = doc.FORMSPEC.ENTRY_START_X end if y == nil then y = doc.FORMSPEC.ENTRY_START_Y end if width == nil then width = doc.FORMSPEC.ENTRY_WIDTH end - if imageindex == nil then imageindex = 1 end + if rows == nil then rows = 3 end + + local imageindex = doc.data.players[playername].galidx + if aspect_ratio == nil then aspect_ratio = (2/3) end local pos = 0 local totalimagewidth, iw, ih @@ -526,9 +533,9 @@ doc.widgets.gallery = function(imagedata, x, y, aspect_ratio, width, rows, image totalimagewidth = width - bw*2 iw = totalimagewidth / rows ih = iw * aspect_ratio - formstring = formstring .. "button["..x..","..y..";"..bw..","..ih..";doc_gallery_prev;"..F("<").."]" + formstring = formstring .. "button["..x..","..y..";"..bw..","..ih..";doc_button_gallery_prev;"..F("<").."]" local rightx = buttonoffset + (x + rows * iw) - formstring = formstring .. "button["..rightx..","..y..";"..bw..","..ih..";doc_gallery_next;"..F(">").."]" + formstring = formstring .. "button["..rightx..","..y..";"..bw..","..ih..";doc_button_gallery_next;"..F(">").."]" buttonoffset = bw else totalimagewidth = width @@ -543,7 +550,7 @@ doc.widgets.gallery = function(imagedata, x, y, aspect_ratio, width, rows, image local bw, bh -- TODO: Use different identifiers - return formstring, "doc_gallery_prev", "doc_gallery_next" + return formstring, "doc_button_gallery_prev", "doc_button_gallery_next" end -- Direct formspec @@ -865,7 +872,7 @@ function doc.formspec_entry_navigation(category_id, entry_id) return formstring end -function doc.formspec_entry(category_id, entry_id) +function doc.formspec_entry(category_id, entry_id, playername) local formstring if category_id == nil then formstring = "label[0,0;"..F("Help > (No Category)") .. "]" @@ -889,7 +896,7 @@ function doc.formspec_entry(category_id, entry_id) ename = string.format(S("Nameless entry (%s)"), entry_id) end formstring = "label[0,0;"..minetest.formspec_escape(string.format(S("Help > %s > %s"), category.def.name, ename)).."]" - formstring = formstring .. category.def.build_formspec(entry.data) + formstring = formstring .. category.def.build_formspec(entry.data, playername) formstring = formstring .. doc.formspec_entry_navigation(category_id, entry_id) end return formstring @@ -912,7 +919,8 @@ function doc.process_form(player,formname,fields) contents = doc.formspec_category(cid, playername) subformname = "category" elseif(tab==3) then - contents = doc.formspec_entry(cid, eid) + doc.data.players[playername].galidx = 1 + contents = doc.formspec_entry(cid, eid, playername) if cid ~= nil and eid ~= nil then doc.mark_entry_as_viewed(playername, cid, eid) end @@ -971,7 +979,8 @@ function doc.process_form(player,formname,fields) if eids ~= nil and catsel ~= nil then eid = eids[catsel] end - local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, eid) + doc.data.players[playername].galidx = 1 + local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, eid, playername) minetest.show_formspec(playername, "doc:entry", formspec) doc.mark_entry_as_viewed(playername, cid, eid) end @@ -995,7 +1004,8 @@ function doc.process_form(player,formname,fields) end doc.mark_entry_as_viewed(playername, cid, eid) doc.data.players[playername].entry_textlist_needs_updating = true - local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, eid) + doc.data.players[playername].galidx = 1 + local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, eid, playername) minetest.show_formspec(playername, "doc:entry", formspec) end end @@ -1016,7 +1026,8 @@ function doc.process_form(player,formname,fields) doc.mark_entry_as_viewed(playername, cid, new_eid) doc.data.players[playername].catsel = new_catsel doc.data.players[playername].entry = new_eid - local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, new_eid) + doc.data.players[playername].galidx = 1 + local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, new_eid, playername) minetest.show_formspec(playername, "doc:entry", formspec) end elseif fields["doc_button_goto_prev"] then @@ -1029,9 +1040,23 @@ function doc.process_form(player,formname,fields) doc.mark_entry_as_viewed(playername, cid, new_eid) doc.data.players[playername].catsel = new_catsel doc.data.players[playername].entry = new_eid - local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, new_eid) + doc.data.players[playername].galidx = 1 + local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, new_eid, playername) minetest.show_formspec(playername, "doc:entry", formspec) end + elseif fields["doc_button_gallery_prev"] then + local cid, eid = doc.get_selection(playername) + doc.data.players[playername].galidx = doc.data.players[playername].galidx - 1 + if doc.data.players[playername].galidx <= 0 then + doc.data.players[playername].galidx = 1 + end + local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, eid, playername) + minetest.show_formspec(playername, "doc:entry", formspec) + elseif fields["doc_button_gallery_next"] then + local cid, eid = doc.get_selection(playername) + doc.data.players[playername].galidx = doc.data.players[playername].galidx + 1 + local formspec = doc.formspec_core(3)..doc.formspec_entry(cid, eid, playername) + minetest.show_formspec(playername, "doc:entry", formspec) end end end @@ -1055,6 +1080,8 @@ minetest.register_on_joinplayer(function(player) -- Initialize player data doc.data.players[playername] = {} playerdata = doc.data.players[playername] + -- Gallery index, stores current index of first displayed image in a gallery + playerdata.galidx = 1 -- Table for persistant data playerdata.stored_data = {} -- Contains viewed entries |