Skip to content

Commit 9c8e8de

Browse files
Merge pull request #46 from justinpearson/feat-backward-stamp-navigation
Add backward navigation buttons for stamp rows and packs
2 parents 1279320 + f5763cd commit 9c8e8de

File tree

2 files changed

+146
-10
lines changed

2 files changed

+146
-10
lines changed

js/submenus/sprites.js

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -82,25 +82,43 @@ window.init_sprites_submenu = function init_sprites_submenu() {
8282
KiddoPaint.Submenu.sprites.push(individualSprite);
8383
}
8484

85+
// Row navigation (within current stamp pack)
8586
KiddoPaint.Submenu.sprites.push({
86-
name: "Next Page",
87-
emoji: "",
87+
name: "prev row",
88+
emoji: "",
8889
handler: function (e) {
89-
e.type == "contextmenu"
90-
? KiddoPaint.Sprite.prevPage()
91-
: KiddoPaint.Sprite.nextPage();
90+
KiddoPaint.Sprite.prevPage();
9291
init_sprites_submenu();
9392
show_generic_submenu("sprites");
9493
},
9594
});
9695

9796
KiddoPaint.Submenu.sprites.push({
98-
name: "Next Stamp Pack",
99-
emoji: "➡️",
97+
name: "next row",
98+
emoji: "",
10099
handler: function (e) {
101-
e.type == "contextmenu"
102-
? KiddoPaint.Sprite.prevSprite()
103-
: KiddoPaint.Sprite.nextSprite();
100+
KiddoPaint.Sprite.nextPage();
101+
init_sprites_submenu();
102+
show_generic_submenu("sprites");
103+
},
104+
});
105+
106+
// Stamp pack navigation (between sprite sheets)
107+
KiddoPaint.Submenu.sprites.push({
108+
name: "prev stamp pack",
109+
emoji: "⏮️",
110+
handler: function (e) {
111+
KiddoPaint.Sprite.prevSprite();
112+
init_sprites_submenu();
113+
show_generic_submenu("sprites");
114+
},
115+
});
116+
117+
KiddoPaint.Submenu.sprites.push({
118+
name: "next stamp pack",
119+
emoji: "⏭️",
120+
handler: function (e) {
121+
KiddoPaint.Sprite.nextSprite();
104122
init_sprites_submenu();
105123
show_generic_submenu("sprites");
106124
},

tests/e2e/stamps.spec.ts

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,122 @@ test.describe("Stamp Tool Tests", () => {
6262
}
6363
assertNoConsoleErrors(consoleErrors, "tool persistence");
6464
});
65+
66+
test("navigation buttons exist with correct labels", async ({ page }) => {
67+
const consoleErrors = setupConsoleErrorMonitoring(page);
68+
await selectTool(page, TOOL_ID);
69+
const subtoolButtons = await getSubtools(page);
70+
const subtoolCount = await subtoolButtons.count();
71+
72+
// Navigation buttons should be at the end (last 4 buttons)
73+
// Order: prev row, next row, prev stamp pack, next stamp pack
74+
const prevRowBtn = subtoolButtons.nth(subtoolCount - 4);
75+
const nextRowBtn = subtoolButtons.nth(subtoolCount - 3);
76+
const prevPackBtn = subtoolButtons.nth(subtoolCount - 2);
77+
const nextPackBtn = subtoolButtons.nth(subtoolCount - 1);
78+
79+
// Verify buttons exist and have correct titles
80+
await expect(prevRowBtn).toHaveAttribute("title", "prev row");
81+
await expect(nextRowBtn).toHaveAttribute("title", "next row");
82+
await expect(prevPackBtn).toHaveAttribute("title", "prev stamp pack");
83+
await expect(nextPackBtn).toHaveAttribute("title", "next stamp pack");
84+
85+
assertNoConsoleErrors(consoleErrors, "navigation buttons");
86+
});
87+
88+
test("next row navigation works", async ({ page }) => {
89+
const consoleErrors = setupConsoleErrorMonitoring(page);
90+
await selectTool(page, TOOL_ID);
91+
92+
// Get initial row from KiddoPaint.Sprite.page
93+
const initialRow = await page.evaluate(() => window.KiddoPaint.Sprite.page);
94+
95+
// Click next row button
96+
const subtoolButtons = await getSubtools(page);
97+
const subtoolCount = await subtoolButtons.count();
98+
const nextRowBtn = subtoolButtons.nth(subtoolCount - 3);
99+
await nextRowBtn.click();
100+
101+
// Verify row changed
102+
const newRow = await page.evaluate(() => window.KiddoPaint.Sprite.page);
103+
expect(newRow).toBe((initialRow + 1) % 8); // 8 rows total (0-7)
104+
105+
assertNoConsoleErrors(consoleErrors, "next row navigation");
106+
});
107+
108+
test("prev row navigation works", async ({ page }) => {
109+
const consoleErrors = setupConsoleErrorMonitoring(page);
110+
await selectTool(page, TOOL_ID);
111+
112+
// Get initial row from KiddoPaint.Sprite.page
113+
const initialRow = await page.evaluate(() => window.KiddoPaint.Sprite.page);
114+
115+
// Click prev row button
116+
const subtoolButtons = await getSubtools(page);
117+
const subtoolCount = await subtoolButtons.count();
118+
const prevRowBtn = subtoolButtons.nth(subtoolCount - 4);
119+
await prevRowBtn.click();
120+
121+
// Verify row changed
122+
const newRow = await page.evaluate(() => window.KiddoPaint.Sprite.page);
123+
const expectedRow = initialRow === 0 ? 7 : initialRow - 1;
124+
expect(newRow).toBe(expectedRow);
125+
126+
assertNoConsoleErrors(consoleErrors, "prev row navigation");
127+
});
128+
129+
test("next stamp pack navigation works", async ({ page }) => {
130+
const consoleErrors = setupConsoleErrorMonitoring(page);
131+
await selectTool(page, TOOL_ID);
132+
133+
// Get initial sheet from KiddoPaint.Sprite.sheetPage
134+
const initialSheet = await page.evaluate(
135+
() => window.KiddoPaint.Sprite.sheetPage,
136+
);
137+
138+
// Click next stamp pack button
139+
const subtoolButtons = await getSubtools(page);
140+
const subtoolCount = await subtoolButtons.count();
141+
const nextPackBtn = subtoolButtons.nth(subtoolCount - 1);
142+
await nextPackBtn.click();
143+
144+
// Verify sheet changed
145+
const newSheet = await page.evaluate(
146+
() => window.KiddoPaint.Sprite.sheetPage,
147+
);
148+
const sheetsLength = await page.evaluate(
149+
() => window.KiddoPaint.Sprite.sheets.length,
150+
);
151+
expect(newSheet).toBe((initialSheet + 1) % sheetsLength);
152+
153+
assertNoConsoleErrors(consoleErrors, "next stamp pack navigation");
154+
});
155+
156+
test("prev stamp pack navigation works", async ({ page }) => {
157+
const consoleErrors = setupConsoleErrorMonitoring(page);
158+
await selectTool(page, TOOL_ID);
159+
160+
// Get initial sheet from KiddoPaint.Sprite.sheetPage
161+
const initialSheet = await page.evaluate(
162+
() => window.KiddoPaint.Sprite.sheetPage,
163+
);
164+
165+
// Click prev stamp pack button
166+
const subtoolButtons = await getSubtools(page);
167+
const subtoolCount = await subtoolButtons.count();
168+
const prevPackBtn = subtoolButtons.nth(subtoolCount - 2);
169+
await prevPackBtn.click();
170+
171+
// Verify sheet changed
172+
const newSheet = await page.evaluate(
173+
() => window.KiddoPaint.Sprite.sheetPage,
174+
);
175+
const sheetsLength = await page.evaluate(
176+
() => window.KiddoPaint.Sprite.sheets.length,
177+
);
178+
const expectedSheet = initialSheet === 0 ? sheetsLength - 1 : initialSheet - 1;
179+
expect(newSheet).toBe(expectedSheet);
180+
181+
assertNoConsoleErrors(consoleErrors, "prev stamp pack navigation");
182+
});
65183
});

0 commit comments

Comments
 (0)