{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":319370263,"defaultBranch":"main","name":"turbo","ownerLogin":"hotwired","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2020-12-07T15:58:18.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/75388917?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1711656746.0","currentOid":""},"activityList":{"items":[{"before":null,"after":"8884c1e7ba4f5ec1e9c9f3af4e9b8a2a7f5034a7","ref":"refs/heads/dependabot/npm_and_yarn/express-4.19.2","pushedAt":"2024-03-28T20:12:26.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"},"commit":{"message":"Bump express from 4.18.2 to 4.19.2\n\nBumps [express](https://github.com/expressjs/express) from 4.18.2 to 4.19.2.\n- [Release notes](https://github.com/expressjs/express/releases)\n- [Changelog](https://github.com/expressjs/express/blob/master/History.md)\n- [Commits](https://github.com/expressjs/express/compare/4.18.2...4.19.2)\n\n---\nupdated-dependencies:\n- dependency-name: express\n dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] ","shortMessageHtmlLink":"Bump express from 4.18.2 to 4.19.2"}},{"before":"600203edf6a7fdba328bfbc9ca8c62354c7d3a27","after":"9fb05e3ed3ebb15fe7b13f52941f25df425e3d15","ref":"refs/heads/main","pushedAt":"2024-03-28T18:30:50.000Z","pushType":"pr_merge","commitsCount":4,"pusher":{"login":"jorgemanrubia","name":"Jorge Manrubia","path":"/jorgemanrubia","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/129938?s=80&v=4"},"commit":{"message":"Merge pull request #1225 from hcdeng/bugfix/enable-turbo-stream-morph-on-text\n\nBugfix/enable turbo stream morph on text","shortMessageHtmlLink":"Merge pull request #1225 from hcdeng/bugfix/enable-turbo-stream-morph…"}},{"before":"1cd62711847511c7d1cf3c66ea0f6fc142466247","after":"600203edf6a7fdba328bfbc9ca8c62354c7d3a27","ref":"refs/heads/main","pushedAt":"2024-03-14T17:23:06.000Z","pushType":"pr_merge","commitsCount":5,"pusher":{"login":"jorgemanrubia","name":"Jorge Manrubia","path":"/jorgemanrubia","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/129938?s=80&v=4"},"commit":{"message":"Merge pull request #1185 from omarluq/omarluq/turbo-stream-morph-action\n\nAdd Turbo stream morph action","shortMessageHtmlLink":"Merge pull request #1185 from omarluq/omarluq/turbo-stream-morph-action"}},{"before":"8c668612b3715cdae0b291abd2ce61baf5813c71","after":"1cd62711847511c7d1cf3c66ea0f6fc142466247","ref":"refs/heads/main","pushedAt":"2024-03-08T14:30:02.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"},"commit":{"message":"Turbo v8.0.4","shortMessageHtmlLink":"Turbo v8.0.4"}},{"before":"f0beef3db4a787b58fa5002557a5da5dec837d87","after":"8c668612b3715cdae0b291abd2ce61baf5813c71","ref":"refs/heads/main","pushedAt":"2024-03-05T10:39:17.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"},"commit":{"message":"Use Playwright assertions for autofocus (#1219)\n\nCloses [#1154][]\r\n\r\nReplace bespoke CSS selector-based assertions with Playwright's built-in\r\n[toBeFocused](https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-be-focused)\r\nassertion.\r\n\r\nLike other assertions, `toBeFocused` will wait and retry for a period of\r\ntime, which makes `nextBeat` calls unnecessary.\r\n\r\n[#1154]: https://github.com/hotwired/turbo/issues/1154","shortMessageHtmlLink":"Use Playwright assertions for autofocus (#1219)"}},{"before":"00527e50ed1a4298ce52f968f2a007f6cfd30776","after":"f0beef3db4a787b58fa5002557a5da5dec837d87","ref":"refs/heads/main","pushedAt":"2024-03-04T11:10:43.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jorgemanrubia","name":"Jorge Manrubia","path":"/jorgemanrubia","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/129938?s=80&v=4"},"commit":{"message":"Merge pull request #1175 from Intrepidd/fix-frame-morph-unexpected-reloading\n\nMorphing + complete frame issue : Stop reloading turbo frames when complete attribute changes","shortMessageHtmlLink":"Merge pull request #1175 from Intrepidd/fix-frame-morph-unexpected-re…"}},{"before":"b6ece378465fbdfa5dcd71e1199ea683bb805020","after":null,"ref":"refs/heads/dependabot/npm_and_yarn/ip-1.1.9","pushedAt":"2024-02-22T10:22:20.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"}},{"before":"861fcca4eed3b2d97240284e99eafeb43d55fca5","after":"00527e50ed1a4298ce52f968f2a007f6cfd30776","ref":"refs/heads/main","pushedAt":"2024-02-22T10:22:19.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"},"commit":{"message":"Bump ip from 1.1.8 to 1.1.9 (#1197)\n\nBumps [ip](https://github.com/indutny/node-ip) from 1.1.8 to 1.1.9.\r\n- [Commits](https://github.com/indutny/node-ip/compare/v1.1.8...v1.1.9)\r\n\r\n---\r\nupdated-dependencies:\r\n- dependency-name: ip\r\n dependency-type: indirect\r\n...\r\n\r\nSigned-off-by: dependabot[bot] \r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>","shortMessageHtmlLink":"Bump ip from 1.1.8 to 1.1.9 (#1197)"}},{"before":null,"after":"b6ece378465fbdfa5dcd71e1199ea683bb805020","ref":"refs/heads/dependabot/npm_and_yarn/ip-1.1.9","pushedAt":"2024-02-21T16:17:53.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"},"commit":{"message":"Bump ip from 1.1.8 to 1.1.9\n\nBumps [ip](https://github.com/indutny/node-ip) from 1.1.8 to 1.1.9.\n- [Commits](https://github.com/indutny/node-ip/compare/v1.1.8...v1.1.9)\n\n---\nupdated-dependencies:\n- dependency-name: ip\n dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] ","shortMessageHtmlLink":"Bump ip from 1.1.8 to 1.1.9"}},{"before":"cdd30795402b47d3772b3dc2315b57f73007a4af","after":"861fcca4eed3b2d97240284e99eafeb43d55fca5","ref":"refs/heads/main","pushedAt":"2024-02-21T16:16:58.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"},"commit":{"message":"Turbo v8.0.3","shortMessageHtmlLink":"Turbo v8.0.3"}},{"before":"3a8e2d93a59e94fba98b435f4abb9e8944eeff4e","after":"cdd30795402b47d3772b3dc2315b57f73007a4af","ref":"refs/heads/main","pushedAt":"2024-02-21T16:12:12.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"},"commit":{"message":"Ensure that page refreshes do not trigger a snapshot cache (#1196)\n\nFixes a bug introduced in https://github.com/hotwired/turbo/pull/1146\r\n\r\n`exemptPageFromPreview()` adds a `` tag to the `` setting\r\n`turbo-cache-control` to `no-preview`. However, since the MorphRenderer\r\nnow inherits from the PageRenderer, it can update meta tags in the head\r\nand remove the `turbo-cache-control` tag. This means that the snapshot\r\ncache will be used for the next visit, which is not what we want.\r\n\r\nSpecifying `shouldCacheSnapshot: false` in the `visit` options ensures\r\nthat the snapshot cache is not used for the refresh visit.","shortMessageHtmlLink":"Ensure that page refreshes do not trigger a snapshot cache (#1196)"}},{"before":"53537c09a3578eb51bdc317864f13a2eb2fdd507","after":null,"ref":"refs/heads/dont-cache-refreshes","pushedAt":"2024-02-21T16:12:12.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"}},{"before":"fccb3a4e5b2a47e63b50efe8333ec7a3265006c1","after":"3a8e2d93a59e94fba98b435f4abb9e8944eeff4e","ref":"refs/heads/main","pushedAt":"2024-02-21T15:08:23.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jorgemanrubia","name":"Jorge Manrubia","path":"/jorgemanrubia","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/129938?s=80&v=4"},"commit":{"message":"Merge pull request #1195 from seanpdoyle/rollback-1141\n\nOmit `ignoreActiveValue: true` Morph option","shortMessageHtmlLink":"Merge pull request #1195 from seanpdoyle/rollback-1141"}},{"before":null,"after":"53537c09a3578eb51bdc317864f13a2eb2fdd507","ref":"refs/heads/dont-cache-refreshes","pushedAt":"2024-02-21T14:58:57.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"},"commit":{"message":"Ensure that page refreshes do not trigger a snapshot cache\n\nFixes a bug introduced in https://github.com/hotwired/turbo/pull/1146\n\n`exemptPageFromPreview()` adds a `` tag to the `` setting\n`turbo-cache-control` to `no-preview`. However, since the MorphRenderer\nnow inherits from the PageRenderer, it can update meta tags in the head\nand remove the `turbo-cache-control` tag. This means that the snapshot\ncache will be used for the next visit, which is not what we want.\n\nSpecifying `shouldCacheSnapshot: false` in the `visit` options ensures\nthat the snapshot cache is not used for the refresh visit.","shortMessageHtmlLink":"Ensure that page refreshes do not trigger a snapshot cache"}},{"before":"38e7bd27f26b50377faecf218eab862c35efffb7","after":"fccb3a4e5b2a47e63b50efe8333ec7a3265006c1","ref":"refs/heads/main","pushedAt":"2024-02-09T09:38:23.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"},"commit":{"message":"Turbo v8.0.2","shortMessageHtmlLink":"Turbo v8.0.2"}},{"before":"cbb77b847ae1e5cacc29b6a6de036833d8760563","after":null,"ref":"refs/heads/more-prefetch-conditions","pushedAt":"2024-02-09T09:28:08.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"}},{"before":"e2e5782776e565e80358c5ecd34e05c3b3bcf28c","after":"38e7bd27f26b50377faecf218eab862c35efffb7","ref":"refs/heads/main","pushedAt":"2024-02-09T09:28:08.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"},"commit":{"message":"Add more prefetch conditions (#1178)\n\n* Clean up method to decide if a link is prefetchable\r\n\r\n* Add more conditions where a link is not considered safe to prefetch\r\n\r\nExclude links with data-turbo-stream or associated with UJS behavior.\r\n\r\n* We no longer preload data-turbo-stream links\r\n\r\n* Update test\r\n\r\n* Add some more test cases","shortMessageHtmlLink":"Add more prefetch conditions (#1178)"}},{"before":null,"after":"cbb77b847ae1e5cacc29b6a6de036833d8760563","ref":"refs/heads/more-prefetch-conditions","pushedAt":"2024-02-08T16:51:39.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"},"commit":{"message":"Add some more test cases","shortMessageHtmlLink":"Add some more test cases"}},{"before":"b815594ee9b072478d9fbf25ca056f2d5c5a0774","after":"e2e5782776e565e80358c5ecd34e05c3b3bcf28c","ref":"refs/heads/main","pushedAt":"2024-02-08T10:12:15.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"},"commit":{"message":"Turbo v8.0.1","shortMessageHtmlLink":"Turbo v8.0.1"}},{"before":"aef1abd63b9d5b044614dd9cfd9b1c713d28c834","after":"b815594ee9b072478d9fbf25ca056f2d5c5a0774","ref":"refs/heads/main","pushedAt":"2024-02-07T14:44:58.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"},"commit":{"message":"Fix progress bar persisting when following a redirect (#1168)","shortMessageHtmlLink":"Fix progress bar persisting when following a redirect (#1168)"}},{"before":"52c8533c83bf02b428ddab6140ddfb663208cb06","after":"aef1abd63b9d5b044614dd9cfd9b1c713d28c834","ref":"refs/heads/main","pushedAt":"2024-02-07T10:08:59.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"},"commit":{"message":"Turbo v8.0.0 🎉","shortMessageHtmlLink":"Turbo v8.0.0 🎉"}},{"before":"a9ec60d8e80462acb8862d8253492e2923bf6a7a","after":null,"ref":"refs/heads/instantclick-no-touch-events","pushedAt":"2024-02-06T20:17:35.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"}},{"before":"3c3eeb8471cf7ac6be3240dc5ee36722137f844f","after":"52c8533c83bf02b428ddab6140ddfb663208cb06","ref":"refs/heads/main","pushedAt":"2024-02-06T20:17:34.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"},"commit":{"message":"Disable InstantClick for touch events (#1167)\n\n* Check if prefetch request is still valid on mouseleave and touchend events\r\n\r\nIf it's not and the prefetch delay is not over, we cancel the prefetch\r\nrequest.\r\n\r\n* Disable InstantClick on touch devices\r\n\r\nAfter testing this on iPhone, it seems it can lead to duplicated requests\r\non touch devices. The culprit seems a `mouseenter` that Safari fires\r\nafter a `touchend` event for compatibility reasons.\r\n\r\nAccording to ChatGPT:\r\n\r\n> Some browsers may synthesize mouse events (including mouseenter) after\r\n> touch events to ensure compatibility with web content not designed for\r\n> touch interfaces. This means that a mouseenter event might be fired on\r\n> a touch device, usually after a touchend event, as part of the sequence\r\n> to simulate mouse interaction. This behavior can vary between browsers\r\n> and might not always be consistent.\r\n\r\nCo-Authored-By: Sean Doyle \r\n\r\n* Remove obsolete tests\r\n\r\n* Rename method\r\n\r\n---------\r\n\r\nCo-authored-by: Sean Doyle ","shortMessageHtmlLink":"Disable InstantClick for touch events (#1167)"}},{"before":"209fbffa882a8c8a369e824526ab86a98c3bbd62","after":"a9ec60d8e80462acb8862d8253492e2923bf6a7a","ref":"refs/heads/instantclick-no-touch-events","pushedAt":"2024-02-06T18:40:28.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"},"commit":{"message":"Rename method","shortMessageHtmlLink":"Rename method"}},{"before":"7a4beacbb39f6fabc96e0cb80340159a0bdf4024","after":"209fbffa882a8c8a369e824526ab86a98c3bbd62","ref":"refs/heads/instantclick-no-touch-events","pushedAt":"2024-02-06T18:34:45.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"},"commit":{"message":"Remove obsolete tests","shortMessageHtmlLink":"Remove obsolete tests"}},{"before":null,"after":"7a4beacbb39f6fabc96e0cb80340159a0bdf4024","ref":"refs/heads/instantclick-no-touch-events","pushedAt":"2024-02-06T17:42:03.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"},"commit":{"message":"Disable InstantClick on touch devices\n\nAfter testing this on iPhone, it seems it can lead to duplicated requests\non touch devices. The culprit seems a `mouseenter` that Safari fires\nafter a `touchend` event for compatibility reasons.\n\nAccording to ChatGPT:\n\n> Some browsers may synthesize mouse events (including mouseenter) after\n> touch events to ensure compatibility with web content not designed for\n> touch interfaces. This means that a mouseenter event might be fired on\n> a touch device, usually after a touchend event, as part of the sequence\n> to simulate mouse interaction. This behavior can vary between browsers\n> and might not always be consistent.\n\nCo-Authored-By: Sean Doyle ","shortMessageHtmlLink":"Disable InstantClick on touch devices"}},{"before":"cdf158f304e5db0bca684429a1a67be365bf9b8a","after":"3c3eeb8471cf7ac6be3240dc5ee36722137f844f","ref":"refs/heads/main","pushedAt":"2024-02-06T10:36:16.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"},"commit":{"message":"Turbo v8.0.0-rc.3","shortMessageHtmlLink":"Turbo v8.0.0-rc.3"}},{"before":"7327a955ea93ef885ea157977acaeb96068f80ba","after":null,"ref":"refs/heads/instaclick-by-default","pushedAt":"2024-02-06T09:54:40.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"}},{"before":"f4bbb77442fb2deb917851124ac825578da50cbe","after":"cdf158f304e5db0bca684429a1a67be365bf9b8a","ref":"refs/heads/main","pushedAt":"2024-02-06T09:54:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"},"commit":{"message":"Enable InstaClick by default (#1162)\n\n* Enable InstaClick by default\r\n\r\nIt will be the new default for Turbo 8. You can always opt out by setting\r\n`` in the head of your HTML.\r\n\r\n* Don't prefetch any anchor links\r\n\r\n* Don't prefetch UJS links\r\n\r\nFor compatibility with older apps that use UJS, we should not prefetch\r\nlinks that have `data-remote`, `data-behavior`, `data-method`, or\r\n`data-confirm` attributes.\r\n\r\nAll of these behaviors are now usually implemented as buttons, but\r\nthere are still some apps that use them on links.\r\n\r\n* Allow to customize check to opt out of prefetched links\r\n\r\n* Tweak documentation\r\n\r\n* Introduce `turbo:before-prefetch` event\r\n\r\nTo allow for more fine-grained control over when Turbo should prefetch\r\nlinks. This change introduces a new event that can be used to cancel\r\nprefetch requests based on custom logic.\r\n\r\nFor example, if you want to prevent Turbo from prefetching links that\r\ninclude UJS attributes, you can do so by adding an event listener for\r\nthe `turbo:before-prefetch` event and calling `preventDefault` on the\r\nevent object when the link should not be prefetched.\r\n\r\n```javascript\r\ndocument.body.addEventListener(\"turbo:before-prefetch\", (event) => {\r\n if (isUJSLink(event.target)) event.preventDefault()\r\n})\r\n\r\nfunction isUJSLink(link) {\r\n return link.hasAttribute(\"data-remote\") || link.hasAttribute(\"data-behavior\") || link.hasAttribute(\"data-method\") || link.hasAttribute(\"data-confirm\")\r\n}\r\n```","shortMessageHtmlLink":"Enable InstaClick by default (#1162)"}},{"before":"5b866dba8e571fe4eb0a2ef3d076255514d29ce1","after":"7327a955ea93ef885ea157977acaeb96068f80ba","ref":"refs/heads/instaclick-by-default","pushedAt":"2024-02-05T21:37:36.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"afcapel","name":"Alberto Fernández-Capel","path":"/afcapel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/150107?s=80&v=4"},"commit":{"message":"Introduce `turbo:before-prefetch` event\n\nTo allow for more fine-grained control over when Turbo should prefetch\nlinks. This change introduces a new event that can be used to cancel\nprefetch requests based on custom logic.\n\nFor example, if you want to prevent Turbo from prefetching links that\ninclude UJS attributes, you can do so by adding an event listener for\nthe `turbo:before-prefetch` event and calling `preventDefault` on the\nevent object when the link should not be prefetched.\n\n```javascript\ndocument.body.addEventListener(\"turbo:before-prefetch\", (event) => {\n if (isUJSLink(event.target)) event.preventDefault()\n})\n\nfunction isUJSLink(link) {\n return link.hasAttribute(\"data-remote\") || link.hasAttribute(\"data-behavior\") || link.hasAttribute(\"data-method\") || link.hasAttribute(\"data-confirm\")\n}\n```","shortMessageHtmlLink":"Introduce turbo:before-prefetch event"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEIiH2NwA","startCursor":null,"endCursor":null}},"title":"Activity · hotwired/turbo"}