[openstreetmap/openstreetmap-website] load iD as npm package (PR #6565)

Martin Raifer notifications at github.com
Tue Nov 25 16:11:15 UTC 2025


Instead of including static builds of iD thin this repository for every release of iD, this loads the specified build of iD from npm [`@openstreetmap/id`](https://www.npmjs.com/@openstreetmap/id). In the future, updating iD will only require bumping the version number in the `package.json` file and a `yarn install` on the deployment.

As this is including the exact same version of iD as the one that is currently deployed, this PR should not change anything for the user of iD on the website.

One thing that I think is not very elegant is how I ported over that one postprocessing step which was previously done in the Vendorfile: The URLs of iD's cursors are defined in the CSS and need to be rewritten to use the correct respective `asset_path`.[^1] I don't know enough about rails to say whether my solution below makes any sense at all, but my gut feeling says there must be something a bit less hacky. Please let me know if you have suggestions for that. Potentially, I would also looking into maybe addressing this on the iD side in one of the upcoming releases (e.g. by replacing the cursor URLs with static inline data-URLs during iD's own build scripts).

[^1]: unfortunately, in the current version of iD, those URLs are kind of hardcoded and not affected by iD's mechanism to be able to read the `assetMap()` to resolve the asset URLs dynamically at runtime.

PS: Thanks @pablobm for helping me navigating the rails asset pipeline. :relaxed: 
You can view, comment on, or merge this pull request online at:

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

-- Commit Summary --

  * load iD as npm package
  * replace asset URLs in iD's css with rails' respective asset_path

-- File Changes --

    M README.md (1)
    M Vendorfile (18)
    M app/assets/config/manifest.js (14)
    M app/assets/javascripts/id.js (4)
    D app/assets/stylesheets/id.css (12)
    A app/assets/stylesheets/id.css.erb (14)
    M app/views/site/id.html.erb (2)
    M lib/id.rb (2)
    M package.json (1)
    D vendor/assets/iD/iD.css.erb (9906)
    D vendor/assets/iD/iD.js (80024)
    D vendor/assets/iD/iD/data/address_formats.min.json (1)
    D vendor/assets/iD/iD/data/imagery.min.json (1)
    D vendor/assets/iD/iD/data/intro_graph.min.json (1)
    D vendor/assets/iD/iD/data/keepRight.min.json (1)
    D vendor/assets/iD/iD/data/languages.min.json (1)
    D vendor/assets/iD/iD/data/phone_formats.min.json (1)
    D vendor/assets/iD/iD/data/qa_data.min.json (1)
    D vendor/assets/iD/iD/data/shortcuts.min.json (1)
    D vendor/assets/iD/iD/data/territory_languages.min.json (1)
    D vendor/assets/iD/iD/img/arrow-icon.png (0)
    D vendor/assets/iD/iD/img/community-sprite.svg (1)
    D vendor/assets/iD/iD/img/cursor/draw-connect-line.png (0)
    D vendor/assets/iD/iD/img/cursor/draw-connect-line2x.png (0)
    D vendor/assets/iD/iD/img/cursor/draw-connect-vertex.png (0)
    D vendor/assets/iD/iD/img/cursor/draw-connect-vertex2x.png (0)
    D vendor/assets/iD/iD/img/cursor/draw.png (0)
    D vendor/assets/iD/iD/img/cursor/draw2x.png (0)
    D vendor/assets/iD/iD/img/cursor/grab.png (0)
    D vendor/assets/iD/iD/img/cursor/grab2x.png (0)
    D vendor/assets/iD/iD/img/cursor/grabbing.png (0)
    D vendor/assets/iD/iD/img/cursor/grabbing2x.png (0)
    D vendor/assets/iD/iD/img/cursor/pointing.png (0)
    D vendor/assets/iD/iD/img/cursor/pointing2x.png (0)
    D vendor/assets/iD/iD/img/cursor/select-acting.png (0)
    D vendor/assets/iD/iD/img/cursor/select-acting2x.png (0)
    D vendor/assets/iD/iD/img/cursor/select-add.png (0)
    D vendor/assets/iD/iD/img/cursor/select-add2x.png (0)
    D vendor/assets/iD/iD/img/cursor/select-area.png (0)
    D vendor/assets/iD/iD/img/cursor/select-area2x.png (0)
    D vendor/assets/iD/iD/img/cursor/select-line.png (0)
    D vendor/assets/iD/iD/img/cursor/select-line2x.png (0)
    D vendor/assets/iD/iD/img/cursor/select-mapillary.png (0)
    D vendor/assets/iD/iD/img/cursor/select-mapillary2x.png (0)
    D vendor/assets/iD/iD/img/cursor/select-point.png (0)
    D vendor/assets/iD/iD/img/cursor/select-point2x.png (0)
    D vendor/assets/iD/iD/img/cursor/select-remove.png (0)
    D vendor/assets/iD/iD/img/cursor/select-remove2x.png (0)
    D vendor/assets/iD/iD/img/cursor/select-split.png (0)
    D vendor/assets/iD/iD/img/cursor/select-split2x.png (0)
    D vendor/assets/iD/iD/img/cursor/select-vertex.png (0)
    D vendor/assets/iD/iD/img/cursor/select-vertex2x.png (0)
    D vendor/assets/iD/iD/img/fa-sprite.svg (1)
    D vendor/assets/iD/iD/img/iD-sprite.svg (1)
    D vendor/assets/iD/iD/img/loader-black.gif (0)
    D vendor/assets/iD/iD/img/loader-white.gif (0)
    D vendor/assets/iD/iD/img/loader_bg.gif (0)
    D vendor/assets/iD/iD/img/logo.png (0)
    D vendor/assets/iD/iD/img/maki-sprite.svg (1)
    D vendor/assets/iD/iD/img/mapillary-object-sprite.svg (1)
    D vendor/assets/iD/iD/img/mapillary-sprite.svg (1)
    D vendor/assets/iD/iD/img/mini-loader.gif (0)
    D vendor/assets/iD/iD/img/pattern/bushes.png (0)
    D vendor/assets/iD/iD/img/pattern/cemetery.png (0)
    D vendor/assets/iD/iD/img/pattern/cemetery_buddhist.png (0)
    D vendor/assets/iD/iD/img/pattern/cemetery_christian.png (0)
    D vendor/assets/iD/iD/img/pattern/cemetery_jewish.png (0)
    D vendor/assets/iD/iD/img/pattern/cemetery_muslim.png (0)
    D vendor/assets/iD/iD/img/pattern/construction.png (0)
    D vendor/assets/iD/iD/img/pattern/dots.png (0)
    D vendor/assets/iD/iD/img/pattern/farmland.png (0)
    D vendor/assets/iD/iD/img/pattern/farmyard.png (0)
    D vendor/assets/iD/iD/img/pattern/forest.png (0)
    D vendor/assets/iD/iD/img/pattern/forest_broadleaved.png (0)
    D vendor/assets/iD/iD/img/pattern/forest_leafless.png (0)
    D vendor/assets/iD/iD/img/pattern/forest_needleleaved.png (0)
    D vendor/assets/iD/iD/img/pattern/grass.png (0)
    D vendor/assets/iD/iD/img/pattern/landfill.png (0)
    D vendor/assets/iD/iD/img/pattern/lines.png (0)
    D vendor/assets/iD/iD/img/pattern/orchard.png (0)
    D vendor/assets/iD/iD/img/pattern/pond.png (0)
    D vendor/assets/iD/iD/img/pattern/quarry.png (0)
    D vendor/assets/iD/iD/img/pattern/vineyard.png (0)
    D vendor/assets/iD/iD/img/pattern/waves.png (0)
    D vendor/assets/iD/iD/img/pattern/wetland.png (0)
    D vendor/assets/iD/iD/img/pattern/wetland_bog.png (0)
    D vendor/assets/iD/iD/img/pattern/wetland_marsh.png (0)
    D vendor/assets/iD/iD/img/pattern/wetland_reedbed.png (0)
    D vendor/assets/iD/iD/img/pattern/wetland_swamp.png (0)
    D vendor/assets/iD/iD/img/roentgen-sprite.svg (1)
    D vendor/assets/iD/iD/img/temaki-sprite.svg (1)
    D vendor/assets/iD/iD/img/tr_inspect.gif (0)
    D vendor/assets/iD/iD/img/tr_modify.gif (0)
    D vendor/assets/iD/iD/locales/af.min.json (1)
    D vendor/assets/iD/iD/locales/am.min.json (1)
    D vendor/assets/iD/iD/locales/ar-AA.min.json (1)
    D vendor/assets/iD/iD/locales/ar.min.json (1)
    D vendor/assets/iD/iD/locales/as.min.json (1)
    D vendor/assets/iD/iD/locales/ast.min.json (1)
    D vendor/assets/iD/iD/locales/az.min.json (1)
    D vendor/assets/iD/iD/locales/ba.min.json (1)
    D vendor/assets/iD/iD/locales/be.min.json (1)
    D vendor/assets/iD/iD/locales/bg.min.json (1)
    D vendor/assets/iD/iD/locales/bn.min.json (1)
    D vendor/assets/iD/iD/locales/br.min.json (1)
    D vendor/assets/iD/iD/locales/bs.min.json (1)
    D vendor/assets/iD/iD/locales/ca.min.json (1)
    D vendor/assets/iD/iD/locales/ceb.min.json (1)
    D vendor/assets/iD/iD/locales/ckb.min.json (1)
    D vendor/assets/iD/iD/locales/cs.min.json (1)
    D vendor/assets/iD/iD/locales/cy.min.json (1)
    D vendor/assets/iD/iD/locales/da.min.json (1)
    D vendor/assets/iD/iD/locales/de-AT.min.json (1)
    D vendor/assets/iD/iD/locales/de-CH.min.json (1)
    D vendor/assets/iD/iD/locales/de.min.json (1)
    D vendor/assets/iD/iD/locales/dv.min.json (1)
    D vendor/assets/iD/iD/locales/el.min.json (1)
    D vendor/assets/iD/iD/locales/en-AU.min.json (1)
    D vendor/assets/iD/iD/locales/en-CA.min.json (1)
    D vendor/assets/iD/iD/locales/en-GB.min.json (1)
    D vendor/assets/iD/iD/locales/en-IE.min.json (1)
    D vendor/assets/iD/iD/locales/en-IN.min.json (1)
    D vendor/assets/iD/iD/locales/en-NZ.min.json (1)
    D vendor/assets/iD/iD/locales/en-PH.min.json (1)
    D vendor/assets/iD/iD/locales/en-US.min.json (1)
    D vendor/assets/iD/iD/locales/en.min.json (1)
    D vendor/assets/iD/iD/locales/eo.min.json (1)
    D vendor/assets/iD/iD/locales/es.min.json (1)
    D vendor/assets/iD/iD/locales/et.min.json (1)
    D vendor/assets/iD/iD/locales/eu.min.json (1)
    D vendor/assets/iD/iD/locales/fa-IR.min.json (1)
    D vendor/assets/iD/iD/locales/fa.min.json (1)
    D vendor/assets/iD/iD/locales/fi.min.json (1)
    D vendor/assets/iD/iD/locales/fil.min.json (1)
    D vendor/assets/iD/iD/locales/fr-FR.min.json (1)
    D vendor/assets/iD/iD/locales/fr.min.json (1)
    D vendor/assets/iD/iD/locales/fy.min.json (1)
    D vendor/assets/iD/iD/locales/ga.min.json (1)
    D vendor/assets/iD/iD/locales/gan.min.json (1)
    D vendor/assets/iD/iD/locales/gl.min.json (1)
    D vendor/assets/iD/iD/locales/gu.min.json (1)
    D vendor/assets/iD/iD/locales/he-IL.min.json (1)
    D vendor/assets/iD/iD/locales/he.min.json (1)
    D vendor/assets/iD/iD/locales/hi.min.json (1)
    D vendor/assets/iD/iD/locales/hr.min.json (1)
    D vendor/assets/iD/iD/locales/hu.min.json (1)
    D vendor/assets/iD/iD/locales/hy.min.json (1)
    D vendor/assets/iD/iD/locales/ia.min.json (1)
    D vendor/assets/iD/iD/locales/id.min.json (1)
    D vendor/assets/iD/iD/locales/ig.min.json (1)
    D vendor/assets/iD/iD/locales/ilo.min.json (1)
    D vendor/assets/iD/iD/locales/index.min.json (1)
    D vendor/assets/iD/iD/locales/is.min.json (1)
    D vendor/assets/iD/iD/locales/it.min.json (1)
    D vendor/assets/iD/iD/locales/ja.min.json (1)
    D vendor/assets/iD/iD/locales/jv.min.json (1)
    D vendor/assets/iD/iD/locales/ka.min.json (0)
    D vendor/assets/iD/iD/locales/kab.min.json (0)
    D vendor/assets/iD/iD/locales/ki.min.json (0)
    D vendor/assets/iD/iD/locales/km.min.json (0)
    D vendor/assets/iD/iD/locales/kn.min.json (0)
    D vendor/assets/iD/iD/locales/ko.min.json (0)
    D vendor/assets/iD/iD/locales/ku.min.json (0)
    D vendor/assets/iD/iD/locales/ky.min.json (0)
    D vendor/assets/iD/iD/locales/lb.min.json (0)
    D vendor/assets/iD/iD/locales/lg.min.json (0)
    D vendor/assets/iD/iD/locales/lij.min.json (0)
    D vendor/assets/iD/iD/locales/lo.min.json (0)
    D vendor/assets/iD/iD/locales/lt.min.json (0)
    D vendor/assets/iD/iD/locales/lv.min.json (0)
    D vendor/assets/iD/iD/locales/mg.min.json (0)
    D vendor/assets/iD/iD/locales/mi.min.json (0)
    D vendor/assets/iD/iD/locales/mk.min.json (0)
    D vendor/assets/iD/iD/locales/ml.min.json (0)
    D vendor/assets/iD/iD/locales/mn.min.json (0)
    D vendor/assets/iD/iD/locales/mr.min.json (0)
    D vendor/assets/iD/iD/locales/ms.min.json (0)
    D vendor/assets/iD/iD/locales/mt.min.json (0)
    D vendor/assets/iD/iD/locales/my.min.json (0)
    D vendor/assets/iD/iD/locales/nah.min.json (0)
    D vendor/assets/iD/iD/locales/nb.min.json (0)
    D vendor/assets/iD/iD/locales/ne.min.json (0)
    D vendor/assets/iD/iD/locales/nl-BE.min.json (0)
    D vendor/assets/iD/iD/locales/nl-NL.min.json (0)
    D vendor/assets/iD/iD/locales/nl.min.json (0)
    D vendor/assets/iD/iD/locales/nn.min.json (0)
    D vendor/assets/iD/iD/locales/no.min.json (0)
    D vendor/assets/iD/iD/locales/nv.min.json (0)
    D vendor/assets/iD/iD/locales/or.min.json (0)
    D vendor/assets/iD/iD/locales/pa-PK.min.json (0)
    D vendor/assets/iD/iD/locales/pa.min.json (0)
    D vendor/assets/iD/iD/locales/pap.min.json (0)
    D vendor/assets/iD/iD/locales/pl.min.json (0)
    D vendor/assets/iD/iD/locales/pt-BR.min.json (0)
    D vendor/assets/iD/iD/locales/pt.min.json (0)
    D vendor/assets/iD/iD/locales/rm.min.json (0)
    D vendor/assets/iD/iD/locales/ro.min.json (0)
    D vendor/assets/iD/iD/locales/ru.min.json (0)
    D vendor/assets/iD/iD/locales/sat.min.json (0)
    D vendor/assets/iD/iD/locales/sc.min.json (0)
    D vendor/assets/iD/iD/locales/si.min.json (0)
    D vendor/assets/iD/iD/locales/sk.min.json (0)
    D vendor/assets/iD/iD/locales/skr.min.json (0)
    D vendor/assets/iD/iD/locales/sl.min.json (0)
    D vendor/assets/iD/iD/locales/so.min.json (0)
    D vendor/assets/iD/iD/locales/sq.min.json (0)
    D vendor/assets/iD/iD/locales/sr.min.json (0)
    D vendor/assets/iD/iD/locales/sv.min.json (0)
    D vendor/assets/iD/iD/locales/sw.min.json (0)
    D vendor/assets/iD/iD/locales/ta.min.json (0)
    D vendor/assets/iD/iD/locales/te.min.json (0)
    D vendor/assets/iD/iD/locales/th.min.json (0)
    D vendor/assets/iD/iD/locales/ti.min.json (0)
    D vendor/assets/iD/iD/locales/tl.min.json (0)
    D vendor/assets/iD/iD/locales/tr.min.json (0)
    D vendor/assets/iD/iD/locales/uk.min.json (0)
    D vendor/assets/iD/iD/locales/ur.min.json (0)
    D vendor/assets/iD/iD/locales/uz.min.json (0)
    D vendor/assets/iD/iD/locales/vi.min.json (0)
    D vendor/assets/iD/iD/locales/yo.min.json (0)
    D vendor/assets/iD/iD/locales/yue.min.json (0)
    D vendor/assets/iD/iD/locales/zh-CN.min.json (0)
    D vendor/assets/iD/iD/locales/zh-HK.min.json (0)
    D vendor/assets/iD/iD/locales/zh-TW.min.json (0)
    D vendor/assets/iD/iD/locales/zh.min.json (0)
    D vendor/assets/iD/iD/mapillary-js/mapillary.css (0)
    D vendor/assets/iD/iD/mapillary-js/mapillary.d.ts (0)
    D vendor/assets/iD/iD/mapillary-js/mapillary.js (0)
    D vendor/assets/iD/iD/mapillary-js/mapillary.js.flow (0)
    D vendor/assets/iD/iD/mapillary-js/mapillary.js.map (0)
    D vendor/assets/iD/iD/mapillary-js/mapillary.module.js (0)
    D vendor/assets/iD/iD/mapillary-js/mapillary.module.js.flow (0)
    D vendor/assets/iD/iD/mapillary-js/mapillary.module.js.map (0)
    D vendor/assets/iD/iD/mapillary-js/mapillary.unminified.js (0)
    D vendor/assets/iD/iD/mapillary-js/mapillary.unminified.js.map (0)
    D vendor/assets/iD/iD/pannellum/pannellum.css (0)
    D vendor/assets/iD/iD/pannellum/pannellum.htm (0)
    D vendor/assets/iD/iD/pannellum/pannellum.js (0)
    M yarn.lock (0)

-- Patch Links --

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

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

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


More information about the rails-dev mailing list