diff --git a/docs/PARENSCRIPT-EXPERIMENT.org b/docs/PARENSCRIPT-EXPERIMENT.org index fbd5ff5..a1bf84f 100644 --- a/docs/PARENSCRIPT-EXPERIMENT.org +++ b/docs/PARENSCRIPT-EXPERIMENT.org @@ -32,8 +32,8 @@ This branch experiments with converting all JavaScript files to ParenScript, all ** Phase 2: Convert Simple Files First - [X] Convert =auth-ui.js= (smallest, simplest) - COMPLETE ✅ - [X] Convert =front-page.js= (stream quality, now playing, pop-out, frameset) - COMPLETE ✅ -- [ ] Convert =profile.js= -- [ ] Convert =users.js= +- [X] Convert =profile.js= (user profile, stats, history) - COMPLETE ✅ +- [X] Convert =users.js= (user management, admin) - COMPLETE ✅ ** Phase 3: Convert Complex Files - [ ] Convert =player.js= (audio player logic) @@ -128,6 +128,8 @@ If successful, we can merge incrementally, one file at a time. ** Conversion Progress - *auth-ui.js* (2025-11-06): Successfully converted. 1386 chars. All functionality working. - *front-page.js* (2025-11-06): Successfully converted. 6900 chars. Stream quality, now playing, pop-out player, frameset mode all working. +- *profile.js* (2025-11-06): Successfully converted. Profile data, listening stats, recent tracks, top artists, password change all working. +- *users.js* (2025-11-06): Successfully converted. User stats, user list, role changes, activate/deactivate, create user all working. ** front-page.js Conversion Notes @@ -166,3 +168,50 @@ All features tested and working: - Pop-out player functionality works - Frameset mode toggle works - Auto-reconnect on stream errors works + +** profile.js and users.js Conversion Notes + +*** Modulo Operator +ParenScript doesn't support =%= for modulo. Use =rem= (remainder) instead: +#+BEGIN_EXAMPLE +;; WRONG: +(% seconds 3600) + +;; CORRECT: +(rem seconds 3600) +#+END_EXAMPLE + +*** Property Access with Hyphens +For properties with hyphens (like ="last-login"=), use =ps:getprop=: +#+BEGIN_EXAMPLE +(ps:getprop user "last-login") +;; Instead of (ps:@ user last-login) +#+END_EXAMPLE + +*** Template Literals in HTML Generation +Build HTML strings with =+= concatenation: +#+BEGIN_EXAMPLE +(+ "