{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":529027653,"defaultBranch":"trunk","name":"wordpress-playground","ownerLogin":"WordPress","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2022-08-25T21:46:08.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/276006?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1717239563.0","currentOid":""},"activityList":{"items":[{"before":"bd9798e0e371e097a6316f0dc214a19e880cf605","after":"4a3ee49bc3543fe18b5b14490fa75650bf90125d","ref":"refs/heads/trunk","pushedAt":"2024-06-01T10:59:23.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"adamziel","name":"Adam Zieliński","path":"/adamziel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/205419?s=80&v=4"},"commit":{"message":"Web: Support mounting OPFS at arbitrary paths in Playground (#1479)\n\n## Motivation for the change, related issues\r\n\r\nWe're hacking on a Markdown editor, and it can only be useful if there's\r\na way of editing local Markdown files. This PR provides just that.\r\n\r\n## Implementation details\r\n\r\n### `startPlaygroundWeb()` now accepts an `onBeforeBlueprint` callback\r\n\r\nTo mount the markdown files before the Blueprint runs, we added a way to\r\nawait user input in the flow. It's an async callback that\r\n`startPlaygroundWeb()` will await before running the Blueprint. It's\r\nused like this:\r\n\r\n```ts\r\nstartPlaygroundWeb({\r\n\t// ... options\r\n\tasync onBeforeBlueprint() {\r\n\t\tif(!usingDirectoryHandle) return;\r\n\t\tconst directoryHandle = await handleFromUserInput;\r\n\t\tawait playground.bindOpfs({\r\n\t\t\topfs: directoryHandle,\r\n\t\t\tmountpoint: '/wordpress/wp-content/markdown'\r\n\t\t});\r\n\t}\r\n});\r\n```\r\n\r\n### Accepting a mountpoint in `playground.bindOpfs()`\r\n\r\nIt is now possible to pass an arbitrary mountpoint when binding a\r\nDirectoryHandle to Playground's virtual filesystem. For example:\r\n\r\n```ts\r\nawait playground.bindOpfs({\r\n\topfs: markdownDirectory,\r\n\tmountpoint: '/wordpress/wp-content/markdown',\r\n\tinitialSyncDirection: 'opfs-to-memfs',\r\n};\r\n``` \r\n\r\nHere's the how the `bindOpfs` signature changed:\r\n\r\n**Before:**\r\n\r\n```ts\r\nasync bindOpfs(\r\n\topfs: FileSystemDirectoryHandle,\r\n\tonProgress?: SyncProgressCallback\r\n)\r\n```\r\n\r\n**After:**\r\n\r\n```ts\r\nasync bindOpfs(\r\n\toptions: BindOpfsOptions,\r\n\tonProgress?: SyncProgressCallback\r\n)\r\n``` \r\n\r\nYou might wonder why is onProgress not a part of `options`. Great\r\nquestion! That's because the `.bindOpfs` call is done in a top-level\r\npage that embeds `remote.html` via an iframe and the arguments are\r\nserialized and passed by the Comlink.js library. We do have handlers for\r\nserializing functions, but not for serializing functions that are object\r\nproperties. This could be improved in the future, but for now onProgress\r\nwill remain a separate argument.\r\n\r\n### Markdown modal\r\n\r\n![CleanShot 2024-06-01 at 12 25\r\n15@2x](https://github.com/WordPress/wordpress-playground/assets/205419/e7f7b378-71fa-426a-a262-52d7edd2e43b)\r\n\r\n\r\n### Internal changes in Playground website\r\n\r\nPart of the state is now managed using redux instead of React context.\r\nThere's still some context left to refactor, that would make a great\r\nfollow-up PR.\r\n\r\n## Testing Instructions (or ideally a Blueprint)\r\n\r\n* Go to Playground settings, select storage type device, select an empty\r\ndirectory, confirm WordPress got copied there without any issues. Then\r\nmake some changes in WordPress, reload the page, confirm your changes\r\nare still there.\r\n* Go to the Markdown modal flow at\r\nhttp://localhost:5400/website-server/?modal=mount-markdown-directory,\r\nselect a non-empty directory, confirm it's now mounted by running this\r\nin your devtools and inspecting the resulting list:\r\n\r\n```js\r\nawait playground.listFiles('/wordpress/wp-content/markdown');\r\n```\r\n\r\n---------\r\n\r\nCo-authored-by: bgrgicak ","shortMessageHtmlLink":"Web: Support mounting OPFS at arbitrary paths in Playground (#1479)"}},{"before":"4b3ddb75b9c8c2150376bac6e8f386db883e1061","after":null,"ref":"refs/heads/markdown-modal","pushedAt":"2024-06-01T10:59:23.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"adamziel","name":"Adam Zieliński","path":"/adamziel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/205419?s=80&v=4"}},{"before":"6c25c178faefc30c3ae768eca7f80622bdc47164","after":"4b3ddb75b9c8c2150376bac6e8f386db883e1061","ref":"refs/heads/markdown-modal","pushedAt":"2024-06-01T10:45:55.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"adamziel","name":"Adam Zieliński","path":"/adamziel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/205419?s=80&v=4"},"commit":{"message":"Remove handleCloseWhenIDontWantALocalDirectory – it actually annoyed me more than the repeated modal","shortMessageHtmlLink":"Remove handleCloseWhenIDontWantALocalDirectory – it actually annoyed …"}},{"before":"dfb98f2c113adef3e33107ad71e6f2ddeca749a8","after":"6c25c178faefc30c3ae768eca7f80622bdc47164","ref":"refs/heads/markdown-modal","pushedAt":"2024-06-01T10:44:05.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"adamziel","name":"Adam Zieliński","path":"/adamziel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/205419?s=80&v=4"},"commit":{"message":"Only directoryHandleResolve when hiding a particular modal","shortMessageHtmlLink":"Only directoryHandleResolve when hiding a particular modal"}},{"before":"e1a0bdb6f5cc18287f400c6900f38e034757e984","after":"dfb98f2c113adef3e33107ad71e6f2ddeca749a8","ref":"refs/heads/markdown-modal","pushedAt":"2024-06-01T10:42:32.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"adamziel","name":"Adam Zieliński","path":"/adamziel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/205419?s=80&v=4"},"commit":{"message":"Update packages/playground/website/src/lib/use-boot-playground.ts\n\nCo-authored-by: Bero ","shortMessageHtmlLink":"Update packages/playground/website/src/lib/use-boot-playground.ts"}},{"before":"eeb92d0ffc327084aa610e9665d816d4f3f608bc","after":"e1a0bdb6f5cc18287f400c6900f38e034757e984","ref":"refs/heads/markdown-modal","pushedAt":"2024-06-01T10:42:28.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"adamziel","name":"Adam Zieliński","path":"/adamziel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/205419?s=80&v=4"},"commit":{"message":"Update packages/playground/website/src/lib/use-boot-playground.ts\n\nCo-authored-by: Bero ","shortMessageHtmlLink":"Update packages/playground/website/src/lib/use-boot-playground.ts"}},{"before":"2a3c601fcfb9d83386c839352f2138e3cd303c2f","after":"eeb92d0ffc327084aa610e9665d816d4f3f608bc","ref":"refs/heads/markdown-modal","pushedAt":"2024-06-01T10:42:10.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"adamziel","name":"Adam Zieliński","path":"/adamziel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/205419?s=80&v=4"},"commit":{"message":"Delete style.module.css","shortMessageHtmlLink":"Delete style.module.css"}},{"before":"83ad6ac7c994fde08bad5d73d26d28658d431653","after":"2a3c601fcfb9d83386c839352f2138e3cd303c2f","ref":"refs/heads/markdown-modal","pushedAt":"2024-06-01T10:37:46.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"adamziel","name":"Adam Zieliński","path":"/adamziel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/205419?s=80&v=4"},"commit":{"message":"Avoid duplicate SyncProgress in rollup","shortMessageHtmlLink":"Avoid duplicate SyncProgress in rollup"}},{"before":"ff6b6c30614ec485f0e35dc2f3498fc0de239ca0","after":"83ad6ac7c994fde08bad5d73d26d28658d431653","ref":"refs/heads/markdown-modal","pushedAt":"2024-06-01T10:10:46.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"adamziel","name":"Adam Zieliński","path":"/adamziel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/205419?s=80&v=4"},"commit":{"message":"Fix typecheck","shortMessageHtmlLink":"Fix typecheck"}},{"before":"f96408850efd4c15f81cf8d53611a42a09691787","after":"ff6b6c30614ec485f0e35dc2f3498fc0de239ca0","ref":"refs/heads/markdown-modal","pushedAt":"2024-06-01T10:09:05.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"adamziel","name":"Adam Zieliński","path":"/adamziel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/205419?s=80&v=4"},"commit":{"message":"Fix linting","shortMessageHtmlLink":"Fix linting"}},{"before":"213e256adbf70d6e64b0e37daf998a845af0cc2e","after":"bd9798e0e371e097a6316f0dc214a19e880cf605","ref":"refs/heads/trunk","pushedAt":"2024-06-01T09:06:37.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"adamziel","name":"Adam Zieliński","path":"/adamziel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/205419?s=80&v=4"},"commit":{"message":"Refresh SQLite integration plugin","shortMessageHtmlLink":"Refresh SQLite integration plugin"}},{"before":"50ddaff84c509038387902261bc7efd39e155021","after":"213e256adbf70d6e64b0e37daf998a845af0cc2e","ref":"refs/heads/trunk","pushedAt":"2024-06-01T08:08:14.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"adamziel","name":"Adam Zieliński","path":"/adamziel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/205419?s=80&v=4"},"commit":{"message":"Refresh WordPress Nightly","shortMessageHtmlLink":"Refresh WordPress Nightly"}},{"before":"abd0ee331d51e38332e4014db8a44427ba7ebf2e","after":"f96408850efd4c15f81cf8d53611a42a09691787","ref":"refs/heads/markdown-modal","pushedAt":"2024-05-31T22:35:48.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"adamziel","name":"Adam Zieliński","path":"/adamziel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/205419?s=80&v=4"},"commit":{"message":"pass onProgress as a second argument so Comlink transfers it correctly","shortMessageHtmlLink":"pass onProgress as a second argument so Comlink transfers it correctly"}},{"before":"aa8e69ac5132560d5010ccf768e783ba0226c574","after":"abd0ee331d51e38332e4014db8a44427ba7ebf2e","ref":"refs/heads/markdown-modal","pushedAt":"2024-05-31T22:27:23.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"adamziel","name":"Adam Zieliński","path":"/adamziel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/205419?s=80&v=4"},"commit":{"message":"Set directory handle to null instead of rejecting the promise to avoid unhandled rejections","shortMessageHtmlLink":"Set directory handle to null instead of rejecting the promise to avoi…"}},{"before":"c3727a57d8b92fef45c79bcad0ae497a35af5739","after":"aa8e69ac5132560d5010ccf768e783ba0226c574","ref":"refs/heads/markdown-modal","pushedAt":"2024-05-31T22:11:14.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"adamziel","name":"Adam Zieliński","path":"/adamziel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/205419?s=80&v=4"},"commit":{"message":"Mount at /wordpress/wp-content/markdown and always go opfs->memfs","shortMessageHtmlLink":"Mount at /wordpress/wp-content/markdown and always go opfs->memfs"}},{"before":"d65b85851d67af32221ab9cd7cf6f70b8ecd1c26","after":"c3727a57d8b92fef45c79bcad0ae497a35af5739","ref":"refs/heads/markdown-modal","pushedAt":"2024-05-31T21:58:06.000Z","pushType":"push","commitsCount":12,"pusher":{"login":"adamziel","name":"Adam Zieliński","path":"/adamziel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/205419?s=80&v=4"},"commit":{"message":"Merge branch 'trunk' into markdown-modal","shortMessageHtmlLink":"Merge branch 'trunk' into markdown-modal"}},{"before":"e28724504f25624042220f37580292a09c3bd280","after":"d65b85851d67af32221ab9cd7cf6f70b8ecd1c26","ref":"refs/heads/markdown-modal","pushedAt":"2024-05-31T19:28:11.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"bgrgicak","name":"Bero","path":"/bgrgicak","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1199991?s=80&v=4"},"commit":{"message":"Add no modal TODO","shortMessageHtmlLink":"Add no modal TODO"}},{"before":"141a2ba8e4976ca0cd1594bb4ff498b26969e2dc","after":"e28724504f25624042220f37580292a09c3bd280","ref":"refs/heads/markdown-modal","pushedAt":"2024-05-31T19:23:43.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"bgrgicak","name":"Bero","path":"/bgrgicak","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1199991?s=80&v=4"},"commit":{"message":"Mount local folder TODO mount local files to OPFS only and fix errors","shortMessageHtmlLink":"Mount local folder TODO mount local files to OPFS only and fix errors"}},{"before":"92d212db2f5210398a0945f4b06932fe47cdada5","after":"141a2ba8e4976ca0cd1594bb4ff498b26969e2dc","ref":"refs/heads/markdown-modal","pushedAt":"2024-05-31T14:55:36.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"adamziel","name":"Adam Zieliński","path":"/adamziel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/205419?s=80&v=4"},"commit":{"message":"Use Redux","shortMessageHtmlLink":"Use Redux"}},{"before":null,"after":"c1c22df279fc7f09cd61389ea6f5b47a463dff63","ref":"refs/heads/update-query-api-docs","pushedAt":"2024-05-31T14:46:00.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"ndiego","name":"Nick Diego","path":"/ndiego","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4832319?s=80&v=4"},"commit":{"message":"Update the available options table in the Query API doc.","shortMessageHtmlLink":"Update the available options table in the Query API doc."}},{"before":null,"after":"92d212db2f5210398a0945f4b06932fe47cdada5","ref":"refs/heads/markdown-modal","pushedAt":"2024-05-31T12:24:08.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"adamziel","name":"Adam Zieliński","path":"/adamziel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/205419?s=80&v=4"},"commit":{"message":"Merge two playground contexts into a single top-level one, add a MountMarkdownModal","shortMessageHtmlLink":"Merge two playground contexts into a single top-level one, add a Moun…"}},{"before":"3455a3b6851b64cac523ddeaf3dbeca9c5288645","after":"50ddaff84c509038387902261bc7efd39e155021","ref":"refs/heads/trunk","pushedAt":"2024-05-31T11:22:33.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"adamziel","name":"Adam Zieliński","path":"/adamziel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/205419?s=80&v=4"},"commit":{"message":"Iterate on PULL_REQUEST_TEMPLATE.md","shortMessageHtmlLink":"Iterate on PULL_REQUEST_TEMPLATE.md"}},{"before":"a55f191cb2d29608c1c08d39586a05acd9f65a2c","after":null,"ref":"refs/heads/update/store-multiple-sites-in-browser","pushedAt":"2024-05-31T11:15:59.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"bgrgicak","name":"Bero","path":"/bgrgicak","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1199991?s=80&v=4"}},{"before":"05e3e7232dcf85d582a6a884804298a72129fc51","after":"3455a3b6851b64cac523ddeaf3dbeca9c5288645","ref":"refs/heads/trunk","pushedAt":"2024-05-31T11:15:58.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"bgrgicak","name":"Bero","path":"/bgrgicak","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1199991?s=80&v=4"},"commit":{"message":"Support mutliple sites when using browser storage (#1472)\n\n## What is this PR doing?\r\n\r\nIt adds support for storing multiple sites in browser storage.\r\n\r\nUp until this PR only one site could be stored in a browser. If you\r\nwanted to add another site, you would need to overwrite the first one.\r\nWith this PR you are able to add more sites without affecting existing\r\nsites.\r\n\r\n## What problem is it solving?\r\n\r\nThere is no way to run multiple Playground sites with browser storage\r\nenabled because sites override each other.\r\n\r\n## How is the problem addressed?\r\n\r\nBy adding a `site-slug` query argument that allows users to specify\r\nwhich site to load.\r\n\r\n## Testing Instructions\r\n\r\n- Checkout this PR\r\n- Open this URL http://localhost:5400/website-server/?storage=browser\r\n- Make changes to the site\r\n- Open this URL\r\nhttp://localhost:5400/website-server/?storage=browser&site-slug=test\r\n- Confirm that it's a new site\r\n- Make changes\r\n- Refresh and confirm the changes are still there\r\n- Go back to the first URL and confirm it still has the original changes\r\n\r\n---------\r\n\r\nCo-authored-by: Adam Zieliński ","shortMessageHtmlLink":"Support mutliple sites when using browser storage (#1472)"}},{"before":"77dfbf847fd03412a1e6cf2ea77ec0ae03bff2f3","after":"a55f191cb2d29608c1c08d39586a05acd9f65a2c","ref":"refs/heads/update/store-multiple-sites-in-browser","pushedAt":"2024-05-31T10:49:05.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"bgrgicak","name":"Bero","path":"/bgrgicak","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1199991?s=80&v=4"},"commit":{"message":"Fix test","shortMessageHtmlLink":"Fix test"}},{"before":"86897f34c344d2308a03afce1e45bf5a33f6f02c","after":"77dfbf847fd03412a1e6cf2ea77ec0ae03bff2f3","ref":"refs/heads/update/store-multiple-sites-in-browser","pushedAt":"2024-05-31T09:38:27.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"bgrgicak","name":"Bero","path":"/bgrgicak","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1199991?s=80&v=4"},"commit":{"message":"Fix test","shortMessageHtmlLink":"Fix test"}},{"before":"b35b882031aad7663c1e90b89702cb923d84df90","after":"05e3e7232dcf85d582a6a884804298a72129fc51","ref":"refs/heads/trunk","pushedAt":"2024-05-31T08:08:24.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"adamziel","name":"Adam Zieliński","path":"/adamziel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/205419?s=80&v=4"},"commit":{"message":"Refresh WordPress Nightly","shortMessageHtmlLink":"Refresh WordPress Nightly"}},{"before":null,"after":"94ea1362339fa31569baff322640ae33a3134d0b","ref":"refs/heads/try/1446-import-correct-user","pushedAt":"2024-05-31T05:32:07.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"dd32","name":"Dion Hulse","path":"/dd32","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/767313?s=80&v=4"},"commit":{"message":"WXR Import: Import posts as correct user","shortMessageHtmlLink":"WXR Import: Import posts as correct user"}},{"before":"f7e4d53436c32cf965df3d1c1f18a6d4b16684f6","after":"66583932306824dd8e875fbc1a619c60bc5feed9","ref":"refs/heads/try/wxr-fix-image-import","pushedAt":"2024-05-31T05:26:09.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"dd32","name":"Dion Hulse","path":"/dd32","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/767313?s=80&v=4"},"commit":{"message":"Include the right file.","shortMessageHtmlLink":"Include the right file."}},{"before":null,"after":"f7e4d53436c32cf965df3d1c1f18a6d4b16684f6","ref":"refs/heads/try/wxr-fix-image-import","pushedAt":"2024-05-31T05:22:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"dd32","name":"Dion Hulse","path":"/dd32","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/767313?s=80&v=4"},"commit":{"message":"Include the admin kitchen sink for import","shortMessageHtmlLink":"Include the admin kitchen sink for import"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEWa8iowA","startCursor":null,"endCursor":null}},"title":"Activity · WordPress/wordpress-playground"}