[openstreetmap/openstreetmap-website] Add user preferences support to iD editor via server-side rendering (PR #6199)

Deeptanshu Sankhwar notifications at github.com
Wed Jul 16 05:29:16 UTC 2025


## Add User Preferences Support to iD Editor

### Summary
This PR implements server-side rendering of user preferences for the iD editor, making them accessible in the client-side JavaScript context.

### Technical Changes

**Server-side (`app/views/site/id.html.erb`):**
- Added user preference collection logic that fetches all preferences for the current user
- Converts preferences from ActiveRecord objects to a hash structure (`{key => value}`)
- Serializes preferences as JSON and includes them in the data attributes passed to the iD container

**Client-side (`app/assets/javascripts/id.js`):**
- Added preference parsing logic that extracts user preferences from the container's dataset
- Parses JSON-encoded preferences and makes them available globally via `window.OSM.userPreferences`
- Provides fallback to empty object for unauthenticated users or users without preferences

### Implementation Details
- Follows existing pattern used for other iD editor data (token, locale, asset_map)
- User preferences are fetched via `current_user.preferences.each_with_object({})` for efficient hash construction
- Data flow: Database → Ruby hash → JSON string → HTML data attribute → JavaScript object
- Preferences are only included when `current_user` exists (authenticated users)
- Client-side code gracefully handles missing or malformed preference data

### Use Case
This enables the iD editor to access user-specific preferences (such as display settings, editor configurations, etc.) that were previously only available through separate API calls, improving performance and reducing client-server round trips during editor initialization.

### Testing
- Verified with authenticated users having preferences
- Verified with authenticated users having no preferences  
- Verified with unauthenticated users
- Confirmed preferences are accessible via `window.OSM.userPreferences` in browser console
You can view, comment on, or merge this pull request online at:

  https://github.com/openstreetmap/openstreetmap-website/pull/6199

-- Commit Summary --

  * Add user preferences support to iD editor via server-side rendering

-- File Changes --

    M app/assets/javascripts/id.js (9)
    M app/views/site/id.html.erb (10)

-- Patch Links --

https://github.com/openstreetmap/openstreetmap-website/pull/6199.patch
https://github.com/openstreetmap/openstreetmap-website/pull/6199.diff

-- 
Reply to this email directly or view it on GitHub:
https://github.com/openstreetmap/openstreetmap-website/pull/6199
You are receiving this because you are subscribed to this thread.

Message ID: <openstreetmap/openstreetmap-website/pull/6199 at github.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstreetmap.org/pipermail/rails-dev/attachments/20250715/3ac73cef/attachment-0001.htm>


More information about the rails-dev mailing list