From e25ca27db3ce4ed437bae81b7277cc7526c68434 Mon Sep 17 00:00:00 2001 From: chrox Date: Sun, 1 Feb 2015 22:50:08 +0800 Subject: [PATCH] auto expand the parent TOC node of current page and fix current item of item not updated when in the last node This should fix #1396. --- frontend/apps/reader/modules/readertoc.lua | 44 +++++++++++++++++++--- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/frontend/apps/reader/modules/readertoc.lua b/frontend/apps/reader/modules/readertoc.lua index a244b7f3b..d3438d082 100644 --- a/frontend/apps/reader/modules/readertoc.lua +++ b/frontend/apps/reader/modules/readertoc.lua @@ -77,21 +77,30 @@ function ReaderToc:fillToc() self.toc = self.ui.document:getToc() end -function ReaderToc:getTocTitleByPage(pn_or_xp) +function ReaderToc:getTocIndexByPage(pn_or_xp) self:fillToc() - if #self.toc == 0 then return "" end + if #self.toc == 0 then return end local pageno = pn_or_xp if type(pn_or_xp) == "string" then pageno = self.ui.document:getPageFromXPointer(pn_or_xp) end - local pre_entry = self.toc[1] + local pre_index = 1 for _k,_v in ipairs(self.toc) do if _v.page > pageno then break end - pre_entry = _v + pre_index = _k + end + return pre_index +end + +function ReaderToc:getTocTitleByPage(pn_or_xp) + local index = self:getTocIndexByPage(pn_or_xp) + if index then + return self:cleanUpTocTitle(self.toc[index].title) + else + return "" end - return self:cleanUpTocTitle(pre_entry.title) end function ReaderToc:getTocTitleOfCurrentPage() @@ -226,6 +235,19 @@ function ReaderToc:updateCurrentNode() for i, v in ipairs(self.collapsed_toc) do if v.page > self.pageno then self.collapsed_toc.current = i > 1 and i - 1 or 1 + return + end + end + self.collapsed_toc.current = #self.collapsed_toc + end +end + +function ReaderToc:expandCurrentNode() + local current_node_index = self:getTocIndexByPage(self.pageno) + if current_node_index then + for i = current_node_index - 1, 1, -1 do + if self.toc[i+1].depth > self.toc[i].depth then + self:expandToc(i) break end end @@ -326,6 +348,9 @@ function ReaderToc:onShowToc() self.toc_menu = toc_menu + -- auto expand the parent node of current page + self:expandCurrentNode() + UIManager:show(menu_container) return true @@ -333,6 +358,9 @@ end -- expand TOC node of index in raw toc table function ReaderToc:expandToc(index) + for k, v in ipairs(self.expanded_nodes) do + if v == index then return end + end table.insert(self.expanded_nodes, index) local cur_node = self.toc[index] local cur_depth = cur_node.depth @@ -364,6 +392,12 @@ end -- collapse TOC node of index in raw toc table function ReaderToc:collapseToc(index) + for k, v in ipairs(self.expanded_nodes) do + if v == index then + table.remove(self.expanded_nodes, k) + break + end + end local cur_node = self.toc[index] local cur_depth = cur_node.depth local i = 1