Commit Graph

19 Commits

Author SHA1 Message Date
Kantine Wrapper
8960a7f0b3 feat: Enhance layout density and responsiveness with tighter spacing and flex-wrap, and resolve scrolling conflicts in the bookmarklet. 2026-03-11 10:49:37 +01:00
Kantine Wrapper
9fddf74eb2 feat: implement internationalization for UI text, refactor localStorage keys, and add input validation for state setters. 2026-03-11 10:14:59 +01:00
google-labs-jules[bot]
856f0dc2be Fix Cross-Site Scripting (XSS) via innerHTML assignment in renderHistory
Co-authored-by: TauNeutrino <1600410+TauNeutrino@users.noreply.github.com>
2026-03-10 16:51:23 +00:00
Kantine Wrapper
d05812dbb2 feat: Add manual refresh for flagged items triggered by the alarm bell, including UI feedback and toast notifications. 2026-03-10 15:49:38 +01:00
Michael
0b5eb1406d Merge pull request #10 from TauNeutrino/perf-optimization-ui-helpers-15631658617322624464
 Optimize tag and badge concatenation loops
2026-03-10 15:20:52 +01:00
google-labs-jules[bot]
6129b3fb13 Optimize UI render loops with reduce in ui_helpers.js
Co-authored-by: TauNeutrino <1600410+TauNeutrino@users.noreply.github.com>
2026-03-10 14:17:20 +00:00
Michael
029bcf012c Merge pull request #9 from TauNeutrino/performance-optimization-2237739564462318710
 optimize menu data load to fetch concurrently
2026-03-10 15:06:18 +01:00
google-labs-jules[bot]
d365b71ee6 performance optimization: batch fetch availableDates
Removed the 100ms artificial delay in `loadMenuDataFromAPI` and switched from sequentially awaiting fetch requests to concurrently awaiting requests in batches of 5 using `Promise.all`. Preserved original chronological ordering of array elements.

Co-authored-by: TauNeutrino <1600410+TauNeutrino@users.noreply.github.com>
2026-03-10 14:00:03 +00:00
Michael
1eb2034c61 Merge pull request #8 from TauNeutrino/fix-alarm-bell-polling-time-1222270318181314730
Fix alarm bell tooltip showing overall refresh time instead of polling time
2026-03-10 14:47:09 +01:00
google-labs-jules[bot]
e1cad2ffd8 Fix alarm bell tooltip showing overall refresh time instead of polling time
Co-authored-by: TauNeutrino <1600410+TauNeutrino@users.noreply.github.com>
2026-03-10 13:40:41 +00:00
google-labs-jules[bot]
b75d5f88a5 perf: optimize innerHTML with insertAdjacentHTML
Replaced an inefficient `.innerHTML +=` operation with `.insertAdjacentHTML('beforeend', ...)` in `src/ui_helpers.js`.

Co-authored-by: TauNeutrino <1600410+TauNeutrino@users.noreply.github.com>
2026-03-10 13:09:35 +00:00
Michael
dd1ab415d2 Merge pull request #6 from TauNeutrino/perf-optimize-tags-7950496920454073492
 Optimize tag badge generation with for...of
2026-03-10 13:52:12 +01:00
google-labs-jules[bot]
cbbb2f4073 perf: optimize tag badge generation in ui_helpers.js
Replaced redundant Array traversal (map().join('')) with a for...of loop
to construct the tagsHtml string. This avoids allocating a new array
for each item being rendered, reducing memory pressure and improving
rendering performance for menus with many tags.

Benchmark results (100,000 iterations):
- 0 tags: 13.3ms -> 4.0ms (~70% improvement)
- 1 tag: 60.9ms -> 46.7ms (~23% improvement)
- 10 tags: 489ms -> 411ms (~16% improvement)
- 50 tags: 2286ms -> 1942ms (~15% improvement)

Co-authored-by: TauNeutrino <1600410+TauNeutrino@users.noreply.github.com>
2026-03-10 12:51:57 +00:00
Michael
1e9cde0ce0 Merge pull request #5 from TauNeutrino/remove-console-logs-2603846512127419944
🧹 [code health] remove leftover console.log statements
2026-03-10 13:40:13 +01:00
google-labs-jules[bot]
f192de5feb chore: remove leftover console.log statements
Removed informational and debug console.log statements from src/index.js, src/actions.js, and src/ui_helpers.js to improve code health and user experience. Refactored src/index.js to avoid empty blocks.

Co-authored-by: TauNeutrino <1600410+TauNeutrino@users.noreply.github.com>
2026-03-10 12:39:59 +00:00
google-labs-jules[bot]
a2b2ec227f security: escape dynamic content in innerHTML to prevent XSS
This commit addresses several XSS vulnerabilities by ensuring that
dynamic data from external APIs (GitHub) and error messages are
properly escaped before being rendered via innerHTML.

Affected areas:
- openVersionMenu error handling and version list
- showErrorModal title and button text
- showToast message content

All changes were verified with a reproduction test case.

Co-authored-by: TauNeutrino <1600410+TauNeutrino@users.noreply.github.com>
2026-03-10 12:37:54 +00:00
google-labs-jules[bot]
2f08a951b4 Refactor kantine.js into modular ES6 structure
Moved `kantine.js` into a `src/` directory with multiple modularized files:
- `api.js`: All API calls and constants
- `state.js`: State management (auth, cache, theme, tags, etc.)
- `utils.js`: Helpers for UI and Date formatting
- `ui.js`: DOM manipulation logic
- `events.js`: Initial DOM event listeners and logic hooks
- `actions.js`: Data fetching actions, local processing logic
- `ui_helpers.js`: UI helper functions (rendering modals, handling DOM injections)

Updated the `build-bookmarklet.sh` to compile with Webpack via newly created `webpack.config.js`. Updated all relevant test scripts to use the new output `dist/kantine.bundle.js` and modified logic to work within Webpack scopes.

Co-authored-by: TauNeutrino <1600410+TauNeutrino@users.noreply.github.com>
2026-03-10 11:55:36 +00:00
5f961403d0 feat: complete bookmarklet implementation (v1.7.0) 2026-02-12 10:06:42 +01:00
bc98a19fc6 feat: server-based version with menu flagging, distributed polling, and SSE
Complete implementation including:
- Express server with Bessa API proxy
- Puppeteer scraper for menu data
- Flag storage (file-based persistence)
- SSE manager for real-time updates
- Polling orchestrator for distributed polling
- Frontend with weekly view, ordering, and flagging UI
- Yellow/green glow indicators for flagged items
2026-02-12 08:36:05 +01:00