From 4513718a2a0f8a906ca72874c4f3e92252662c88 Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Sun, 20 Aug 2017 20:48:17 +0200 Subject: [PATCH] [fix] MenuSorter: ignore separator as first item See https://github.com/koreader/koreader/pull/3107#issuecomment-323581851 --- frontend/ui/menusorter.lua | 5 ++++- spec/unit/menusorter_spec.lua | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/frontend/ui/menusorter.lua b/frontend/ui/menusorter.lua index 563f65d93..d0966cc39 100644 --- a/frontend/ui/menusorter.lua +++ b/frontend/ui/menusorter.lua @@ -86,7 +86,10 @@ function MenuSorter:sort(item_table, order) if v then if v.id == separator_id then new_index = new_index - 1 - menu_table[order_id][new_index].separator = true + -- ignore separator if the menu starts with it + if new_index > 0 then + menu_table[order_id][new_index].separator = true + end else -- fix the index menu_table[order_id][new_index] = tmp_menu_table[i] diff --git a/spec/unit/menusorter_spec.lua b/spec/unit/menusorter_spec.lua index 05381c618..edfee0f47 100644 --- a/spec/unit/menusorter_spec.lua +++ b/spec/unit/menusorter_spec.lua @@ -124,6 +124,28 @@ describe("MenuSorter module", function() assert.is_true(test_menu[1][2].separator == true) assert.is_true(test_menu[1][3].id == "third2") end) + it("should ignore separator as first item", function() + local menu_items = { + ["KOMenu:menu_buttons"] = {}, + first = {}, + second = {}, + third1 = {}, + third2 = {}, + } + local order = { + ["KOMenu:menu_buttons"] = {"first",}, + first = {"----------------------------", "second", "third1", "----------------------------", "third2"}, + } + + local test_menu = MenuSorter:sort(menu_items, order) + + assert.is_true(test_menu[1].id == "first") + assert.is_true(test_menu[1][1].id == "second") + assert.is_nil(test_menu[1][1].separator) + assert.is_true(test_menu[1][2].id == "third1") + assert.is_true(test_menu[1][2].separator == true) + assert.is_true(test_menu[1][3].id == "third2") + end) it("should compress menus when items from order are missing", function() local menu_items = { ["KOMenu:menu_buttons"] = {},