{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":611982597,"defaultBranch":"main","name":"parking-lot-map","ownerLogin":"ParkingReformNetwork","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2023-03-10T00:14:46.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/127456301?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1704847900.0","currentOid":""},"activityList":{"items":[{"before":"b2fb03d8014d0c188c4122cb1c649d676c4c8a47","after":"2a75408b6fb8e6a2da275d935676228e5227a5be","ref":"refs/heads/main","pushedAt":"2024-08-31T17:38:40.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Revert \"Upgrade to Choices.js 11 (#273)\" (#274)\n\nThis reverts commit b2fb03d8014d0c188c4122cb1c649d676c4c8a47.\r\n\r\nThe deploy to staging failed because I think the CSS loading is broken.\r\n\r\n\"Screenshot","shortMessageHtmlLink":"Revert \"Upgrade to Choices.js 11 (#273)\" (#274)"}},{"before":"94d46cb091295fa0c729aa65e8e7fbca5df34927","after":"b2fb03d8014d0c188c4122cb1c649d676c4c8a47","ref":"refs/heads/main","pushedAt":"2024-08-31T17:13:46.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Upgrade to Choices.js 11 (#273)\n\nThey fixed a CSS bug we had a workaround for.","shortMessageHtmlLink":"Upgrade to Choices.js 11 (#273)"}},{"before":"1622c3be8d611d5f3ebccfb60f73fcd1602d894f","after":"94d46cb091295fa0c729aa65e8e7fbca5df34927","ref":"refs/heads/main","pushedAt":"2024-08-20T01:53:07.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Add hover to icons (#271)","shortMessageHtmlLink":"Add hover to icons (#271)"}},{"before":"bfb791d345c27ff7751a04c49a58349ab245d311","after":"1622c3be8d611d5f3ebccfb60f73fcd1602d894f","ref":"refs/heads/main","pushedAt":"2024-08-19T12:52:05.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Add hover color for buttons (#270)\n\nWe already had this for the zoom controls. Now the map layer and the\r\nscorecard accordion have it.","shortMessageHtmlLink":"Add hover color for buttons (#270)"}},{"before":"ce6ced5b1ebdc2d95a98aff860ac8ad25721e842","after":"bfb791d345c27ff7751a04c49a58349ab245d311","ref":"refs/heads/main","pushedAt":"2024-08-02T13:02:07.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Scorecard link opens in new tab (#269)\n\nMissed it in\r\nhttps://github.com/ParkingReformNetwork/parking-lot-map/pull/268","shortMessageHtmlLink":"Scorecard link opens in new tab (#269)"}},{"before":"725cb58b4750b014073b68ba44627473e7d86888","after":"ce6ced5b1ebdc2d95a98aff860ac8ad25721e842","ref":"refs/heads/main","pushedAt":"2024-08-02T12:54:03.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Open all links in a new tab (#268)\n\nThe app is usually accessed via an iframe. If you click links currently,\r\nthe new page is in the iframe itself. This is really confusing. We could\r\nuse `target=_top` to replace the current page, but Tony has said in the\r\npast that we should go to a new tab.\r\n\r\nWe now consistently use the up-right arrow icon with every external link\r\nto make more explicit that the links go to a new tab.\r\n\r\n\"Screenshot","shortMessageHtmlLink":"Open all links in a new tab (#268)"}},{"before":"28b9c4b1f3d26e594801d3d404368d72d7a936f7","after":"725cb58b4750b014073b68ba44627473e7d86888","ref":"refs/heads/main","pushedAt":"2024-08-02T02:58:53.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Limit minimum zoom (#267)","shortMessageHtmlLink":"Limit minimum zoom (#267)"}},{"before":"74d8673c2ea7eda55cee9a2ceed4cbc060466873","after":"28b9c4b1f3d26e594801d3d404368d72d7a936f7","ref":"refs/heads/main","pushedAt":"2024-07-31T03:57:56.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Use min-height for search entries (#266)\n\nThis fixes the styling if any entry is too long to fit on one line.","shortMessageHtmlLink":"Use min-height for search entries (#266)"}},{"before":"f998d38d95b87b1e2e296881c3010caa7f5e81fb","after":"74d8673c2ea7eda55cee9a2ceed4cbc060466873","ref":"refs/heads/main","pushedAt":"2024-07-27T17:26:57.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Describe reactive pattern in README (#265)","shortMessageHtmlLink":"Describe reactive pattern in README (#265)"}},{"before":"df10c02e03d90622e8cd3177f959040139e7f474","after":"f998d38d95b87b1e2e296881c3010caa7f5e81fb","ref":"refs/heads/main","pushedAt":"2024-07-27T17:07:18.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Reorganize files (#264)","shortMessageHtmlLink":"Reorganize files (#264)"}},{"before":"854c2d67463c759d18b07a65d35e1062f80ec1ae","after":"df10c02e03d90622e8cd3177f959040139e7f474","ref":"refs/heads/main","pushedAt":"2024-07-27T16:34:47.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Dropdown always opens below header (#263)\n\nCloses\r\nhttps://github.com/ParkingReformNetwork/parking-lot-map/issues/185.\r\nOtherwise, when the viewport is too short, the search would open above\r\nthe select element.","shortMessageHtmlLink":"Dropdown always opens below header (#263)"}},{"before":"be5998ac6db4fa6cb07d04e1b04c78b124512177","after":"854c2d67463c759d18b07a65d35e1062f80ec1ae","ref":"refs/heads/main","pushedAt":"2024-07-27T16:24:27.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Improve names of scorecard types and variables (#262)","shortMessageHtmlLink":"Improve names of scorecard types and variables (#262)"}},{"before":"5c284884d3055f96d50c2d93e174f53f59ead738","after":"be5998ac6db4fa6cb07d04e1b04c78b124512177","ref":"refs/heads/main","pushedAt":"2024-07-27T15:44:06.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Improve names and export style (#261)","shortMessageHtmlLink":"Improve names and export style (#261)"}},{"before":"df7c316216a9abdc9763523dcdbd09e188fb3bca","after":"5c284884d3055f96d50c2d93e174f53f59ead738","ref":"refs/heads/main","pushedAt":"2024-07-27T15:25:40.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Upgrade to Prettier 3.3 (#260)","shortMessageHtmlLink":"Upgrade to Prettier 3.3 (#260)"}},{"before":"4be9069f3f41b7a1acce6d8fddb1d9ed4deb4b96","after":"df7c316216a9abdc9763523dcdbd09e188fb3bca","ref":"refs/heads/main","pushedAt":"2024-07-27T15:23:07.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Move parking lot layer code into ParkingLotLoader.ts (#259)\n\nThe layer only needs to be used by ParkingLotLoader, so it's best to\r\nencapsulate it in the class.","shortMessageHtmlLink":"Move parking lot layer code into ParkingLotLoader.ts (#259)"}},{"before":"564c68bbcfe27cce95ee85b998a9af241c7f4288","after":"4be9069f3f41b7a1acce6d8fddb1d9ed4deb4b96","ref":"refs/heads/main","pushedAt":"2024-07-27T14:44:11.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Use reactive pattern for city selection state (#258)\n\nAs explained in\r\nhttps://github.com/ParkingReformNetwork/parking-lot-map/pull/254, this\r\nseparates out state management from how to render the UI.\r\n\r\nThis PR adds `CitySelectionState`:\r\n\r\n```typescript\r\ntype CitySelectionState = {\r\n cityId: CityId;\r\n shouldSnapMap: boolean;\r\n};\r\n```\r\n\r\n- 5 of our UI elements depend on `CitySelectionState`\r\n- There are 3 ways to update `CitySelectionState`: the dropdown, moving\r\nthe map position, and clicking a city boundary","shortMessageHtmlLink":"Use reactive pattern for city selection state (#258)"}},{"before":"d247a9f8b6c090fabf1124d1169536362dc7e6da","after":"564c68bbcfe27cce95ee85b998a9af241c7f4288","ref":"refs/heads/main","pushedAt":"2024-07-27T14:12:23.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Fix lot data double loading (#257)\n\nBefore, it was possible to load parking lot data multiple times due to\r\nrace conditions. If we had >1 event triggering a map load, then we'd\r\nhave two requests concurrently.\r\n\r\nWe need a thread-safe way to only load the data once, i.e. something\r\nthat keeps track of in-flight requests. We can do that with a\r\n`Map`, which makes sure we never have more than one\r\n`Promise` for a given city. Once the Promise is complete, we then add\r\nthe city to `ParkingLotLoader.loadedCities`.","shortMessageHtmlLink":"Fix lot data double loading (#257)"}},{"before":"0be2306c7d89acf9189479d2d3385b408b4744ef","after":"d247a9f8b6c090fabf1124d1169536362dc7e6da","ref":"refs/heads/main","pushedAt":"2024-07-27T11:19:24.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Update caniuse (#256)","shortMessageHtmlLink":"Update caniuse (#256)"}},{"before":"5b6912d94d5f895a63af9a40c0d490389fbd426c","after":"0be2306c7d89acf9189479d2d3385b408b4744ef","ref":"refs/heads/main","pushedAt":"2024-07-27T03:02:15.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Add `Observable.initialize()` (#255)\n\nBefore, you had to explicitly call every subscriber with the initial\r\nstate. Now, you can call `myObservable.initialize()` to do that.\r\n\r\nBeyond DRY, this is helpful to encapsulate who the subscribers are. For\r\nexample, for the selectedCity observable, we'll have subscribers from\r\nseveral files and we don't want to have to couple them all together.","shortMessageHtmlLink":"Add Observable.initialize() (#255)"}},{"before":"012713b3d898ebca85820a3d7747103bd17af5e3","after":"5b6912d94d5f895a63af9a40c0d490389fbd426c","ref":"refs/heads/main","pushedAt":"2024-07-27T02:16:15.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Use reactive pattern for about and scorecard (#254)\n\nThis PR splits out state management from how to display the UI/DOM. Now,\r\nfor the scorecard accordion and about popup, we have two distinct\r\nfunctions:\r\n\r\n- how to display the UI element given a boolean state\r\n- how to update the boolean state via event listeners, and what the\r\ninitial value is\r\n\r\nThose two functions no longer have tight coupling, which makes them much\r\neasier to understand.\r\n\r\nSpecifically, we use the \"Observable\" design pattern (aka pub-sub). I\r\nalso considered switching to Svelte, which has reactivity built-in, but\r\nI wanted to start with this simpler approach.\r\n\r\nA follow up will use this pattern for the rest of the app.","shortMessageHtmlLink":"Use reactive pattern for about and scorecard (#254)"}},{"before":"c4c03b80744999bfa9122f33a44b410f3499333d","after":"012713b3d898ebca85820a3d7747103bd17af5e3","ref":"refs/heads/main","pushedAt":"2024-07-27T01:01:28.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Use function rather than anonymous funtions (#253)\n\nI don't have a very good reason why we weren't using `function` to begin\r\nwith. `function` is more intuitive and beginner-friendly.","shortMessageHtmlLink":"Use function rather than anonymous funtions (#253)"}},{"before":"73cd67d7e9d6d0c08f2991802dd5ca9afb8a99bc","after":"c4c03b80744999bfa9122f33a44b410f3499333d","ref":"refs/heads/main","pushedAt":"2024-07-27T00:42:42.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Use type hints more clearly with DOM (#252)","shortMessageHtmlLink":"Use type hints more clearly with DOM (#252)"}},{"before":"f44689be24b87f885246556946507a6ab7014d47","after":"73cd67d7e9d6d0c08f2991802dd5ca9afb8a99bc","ref":"refs/heads/main","pushedAt":"2024-07-26T12:29:06.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Remove subgraph (#251)","shortMessageHtmlLink":"Remove subgraph (#251)"}},{"before":"adad290b23fa35459a61ea983943dda017a05ab2","after":"f44689be24b87f885246556946507a6ab7014d47","ref":"refs/heads/main","pushedAt":"2024-07-26T12:21:54.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Add state diagram for fullscreen icon & map changing what's loaded (#250)\n\nI forgot two important features:\r\n\r\n* The fullscreen icon uses the URL of the current city\r\n* When scrolling around the map, we load all cities in view. If it's the\r\nmost-central city, we load it\r\n* When zoomed in enough, clicking inside a city boundary chooses that\r\ncity and snaps the map to it","shortMessageHtmlLink":"Add state diagram for fullscreen icon & map changing what's loaded (#250"}},{"before":"a21b799910f0d04eadec5315f10d967850aa4508","after":"adad290b23fa35459a61ea983943dda017a05ab2","ref":"refs/heads/main","pushedAt":"2024-07-26T11:50:59.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Use null rather than empty string (#249)\n\nThis is more explicit modeling.","shortMessageHtmlLink":"Use null rather than empty string (#249)"}},{"before":"b9f6e7e71d0ec41cad60018c97788cbc1699ade4","after":"a21b799910f0d04eadec5315f10d967850aa4508","ref":"refs/heads/main","pushedAt":"2024-07-26T00:43:18.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Make Mermaid diagram more readable (#248)\n\nSeparates out the node definitions from the relationships. The end\r\nresult is the same.","shortMessageHtmlLink":"Make Mermaid diagram more readable (#248)"}},{"before":"fe8eaccbaaf6abf65c7c1978bf8983a9ecc0532a","after":"b9f6e7e71d0ec41cad60018c97788cbc1699ade4","ref":"refs/heads/main","pushedAt":"2024-07-25T11:46:06.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Add missing state diagram interactions (#247)\n\nAlso fixes bad style for the zoom controls I didn't realize we had.","shortMessageHtmlLink":"Add missing state diagram interactions (#247)"}},{"before":"d139660b80013b7faef74103d3fb25ae724b608e","after":"fe8eaccbaaf6abf65c7c1978bf8983a9ecc0532a","ref":"refs/heads/main","pushedAt":"2024-07-25T03:14:53.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Add state diagram (#246)\n\nTo help decide if we use Svelte or generally improve our state\r\nmanagement approach.","shortMessageHtmlLink":"Add state diagram (#246)"}},{"before":"be2917e388c437c553211833f0ea4f07f82a82ca","after":"d139660b80013b7faef74103d3fb25ae724b608e","ref":"refs/heads/main","pushedAt":"2024-07-23T02:59:46.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Make about popup close icon smaller on mobile (#245)","shortMessageHtmlLink":"Make about popup close icon smaller on mobile (#245)"}},{"before":"3fd6816c89699eafee8e5ff3de08cc354361fd07","after":"be2917e388c437c553211833f0ea4f07f82a82ca","ref":"refs/heads/main","pushedAt":"2024-07-22T02:45:45.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Eric-Arellano","name":"Eric Arellano","path":"/Eric-Arellano","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14852634?s=80&v=4"},"commit":{"message":"Remove unnecessary scorecard title rules (#244)\n\nThis was leftover from when the link icon used to be in the scorecard.","shortMessageHtmlLink":"Remove unnecessary scorecard title rules (#244)"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEqXolZQA","startCursor":null,"endCursor":null}},"title":"Activity · ParkingReformNetwork/parking-lot-map"}