{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":72311002,"defaultBranch":"master","name":"kaitai_struct_webide","ownerLogin":"kaitai-io","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2016-10-29T21:42:35.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/17322584?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1708608596.0","currentOid":""},"activityList":{"items":[{"before":"b8c359f18e0e66e847778a6e74c4d2be9ec48f36","after":"f53caf2514c17f37d683f224020decd3b3547677","ref":"refs/heads/master","pushedAt":"2024-04-15T19:54:23.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"},"commit":{"message":"Remove Google Analytics\n\nSee https://github.com/kaitai-io/kaitai_struct_webide/issues/23","shortMessageHtmlLink":"Remove Google Analytics"}},{"before":"7121a7b0313bb5121182407d63bae456a913f655","after":null,"ref":"refs/heads/partial-parsing-tree","pushedAt":"2024-02-22T13:29:56.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"}},{"before":"db130c9a1221dac47186507ca75d330c641aabfc","after":"b8c359f18e0e66e847778a6e74c4d2be9ec48f36","ref":"refs/heads/master","pushedAt":"2024-02-22T13:07:09.000Z","pushType":"pr_merge","commitsCount":11,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"},"commit":{"message":"Merge pull request #170 from kaitai-io/partial-parsing-tree\n\nDisplay a partial object tree if a parsing error occurred, indicate errors","shortMessageHtmlLink":"Merge pull request #170 from kaitai-io/partial-parsing-tree"}},{"before":"940d5ef978c2bea92150cd09eb98b3e69574845d","after":"7121a7b0313bb5121182407d63bae456a913f655","ref":"refs/heads/partial-parsing-tree","pushedAt":"2024-02-21T16:03:55.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"},"commit":{"message":"Show full error when selecting an instance or invalid field","shortMessageHtmlLink":"Show full error when selecting an instance or invalid field"}},{"before":"12d40368b581645281b63bc20e5068fd3710f82e","after":null,"ref":"refs/heads/fix-fresh-and-circular-imports","pushedAt":"2024-02-21T15:57:39.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"}},{"before":"00c6083ddb37fd6a9cee4f67d923431d70ec2873","after":"db130c9a1221dac47186507ca75d330c641aabfc","ref":"refs/heads/master","pushedAt":"2024-02-21T15:51:06.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"},"commit":{"message":"Merge pull request #169 from kaitai-io/fix-fresh-and-circular-imports\n\nFix temporary error when imports are used, support circular imports","shortMessageHtmlLink":"Merge pull request #169 from kaitai-io/fix-fresh-and-circular-imports"}},{"before":"1082485e7e2be3a2c53a3984204e89c25b73419d","after":"12d40368b581645281b63bc20e5068fd3710f82e","ref":"refs/heads/fix-fresh-and-circular-imports","pushedAt":"2024-02-21T15:44:38.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"},"commit":{"message":"Fix temporary error when imports are used, support circular imports\n\nFixes https://github.com/kaitai-io/kaitai_struct_webide/issues/59\n\nFixes https://github.com/kaitai-io/kaitai_struct_webide/issues/159 -\nthis is a particularly notable instance of the bug, since `TypeError:\nDosDatetime is not a constructor` is an error that initially everyone\ngets when they open the Web IDE in a fresh browser (this is because\n`zip.ksy` is selected by default, and it is affected by the bug since it\ncontains an import).\n\nSee https://github.com/kaitai-io/kaitai_struct/issues/1074 and\nhttps://github.com/kaitai-io/kaitai_struct_compiler/pull/264 - the\nactual fix was done in the KSC-generated JS code, which was changed to\nallow interdependent format modules to be loaded (and added to the\nglobal context in the case of the Web IDE) in any order. However, this\nwas a backwards-incompatible change, so this set of Web IDE changes just\nupdates our code to work with the new compiler.","shortMessageHtmlLink":"Fix temporary error when imports are used, support circular imports"}},{"before":null,"after":"940d5ef978c2bea92150cd09eb98b3e69574845d","ref":"refs/heads/partial-parsing-tree","pushedAt":"2024-02-21T09:28:53.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"},"commit":{"message":"Show full error when selecting an instance or invalid field","shortMessageHtmlLink":"Show full error when selecting an instance or invalid field"}},{"before":"bd9c288c86b8e288243a7553028a5ae97cc0262c","after":"00c6083ddb37fd6a9cee4f67d923431d70ec2873","ref":"refs/heads/master","pushedAt":"2024-02-20T23:24:00.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"},"commit":{"message":"Fix mistyped closing `` tag (was ``)","shortMessageHtmlLink":"Fix mistyped closing </span> tag (was <span>)"}},{"before":null,"after":"1082485e7e2be3a2c53a3984204e89c25b73419d","ref":"refs/heads/fix-fresh-and-circular-imports","pushedAt":"2024-02-15T22:09:38.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"},"commit":{"message":"Fix temporary error when imports are used, support circular imports\n\nFixes https://github.com/kaitai-io/kaitai_struct_webide/issues/59\n\nFixes https://github.com/kaitai-io/kaitai_struct_webide/issues/159 -\nthis is a particularly notable instance of the bug, since `TypeError:\nDosDatetime is not a constructor` is an error that initially everyone\ngets when they open the Web IDE in a fresh browser (this is because\n`zip.ksy` is selected by default, and it is affected by the bug since it\ncontains an import).\n\nSee https://github.com/kaitai-io/kaitai_struct/issues/1074 and\nhttps://github.com/kaitai-io/kaitai_struct_compiler/pull/264 - the\nactual fix was done in the KSC-generated JS code, which was changed to\nallow interdependent format modules to be loaded (and added to the\nglobal context in the case of the Web IDE) in any order. However, this\nwas a backwards-incompatible change, so this set of Web IDE changes just\nupdates our code to work with the new compiler.","shortMessageHtmlLink":"Fix temporary error when imports are used, support circular imports"}},{"before":"dcfdca6f6a21532253e4f3898e966018de322713","after":null,"ref":"refs/heads/use-jstree-state-plugin","pushedAt":"2024-02-15T22:05:58.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"}},{"before":"5de330d076e00f13063453d1eece9092a19549f5","after":"bd9c288c86b8e288243a7553028a5ae97cc0262c","ref":"refs/heads/master","pushedAt":"2024-02-15T22:05:48.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"},"commit":{"message":"Merge pull request #162 from kaitai-io/use-jstree-state-plugin\n\nUse jsTree's state plugin to persist object tree state","shortMessageHtmlLink":"Merge pull request #162 from kaitai-io/use-jstree-state-plugin"}},{"before":"ba671868d7d0643a964bf412da68766297af9e86","after":"dcfdca6f6a21532253e4f3898e966018de322713","ref":"refs/heads/use-jstree-state-plugin","pushedAt":"2024-02-15T22:01:13.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"},"commit":{"message":"Use jsTree's state plugin to persist object tree state\n\n... instead of a poor custom reimplementation of the same. This change\nfixes several bugs of the existing implementation and improves the\noverall user experience when interacting with the object tree:\n\n1. It fixes one annoying bug I've encountered many times: if you had\n expanded a certain node in the tree and then changed the .ksy spec so\n that a node under the same path still existed in the tree but was no\n longer openable (in our case, only non-empty arrays and user type\n objects are openable, so either it has become empty or its type has\n changed to a primitive type, for example), then our naive code would\n still try to open it and asynchronously wait for it to be opened,\n which wouldn't happen. In that case, the code was stuck on an\n unfulfilled promise at every reparsing (because the promise\n fulfillment happened only after all required nodes were opened),\n which in practice had several implications:\n\n - selecting a node in the object tree didn't highlight the\n corresponding interval in the hex dump,\n - opening or closing nodes in the tree was abrupt (without a smooth\n transition as usual),\n - changes to the set of opened nodes weren't persisted to the local\n storage,\n - an open \"Errors\" pane didn't disappear, even if the error has been\n already fixed.\n\n So this change also fixes\n https://github.com/kaitai-io/kaitai_struct_webide/issues/61 - this\n is an issue which reported this exact problem, but was closed\n because nobody knew how to reproduce it. The remark in\n https://github.com/kaitai-io/kaitai_struct_webide/issues/61#issuecomment-365416726\n by @DarkShadow44 confirms my suspicions that it is the same thing:\n\n > After I cleared the local storage data, I can't reproduce it\n > either.\n\n Basically the only way I know to resolve the promise was to open a\n few random nodes in the tree (or pick one and repeatedly close and\n open it again). The opening code would (mis)interpret these events as\n if the nodes it requested to open were finally opened, and then\n resolve the promise. But you had to do this after every reparsing,\n which was annoying.\n\n2. Thanks to the default behavior of the jsTree's state plugin, the\n scroll position and the selected node are now persisted as well.\n Previously, only the set of opened nodes and the selection range in\n the hex viewer was preserved (the saved hex viewer selection\n sometimes resulted to selecting the right node and scrolling to it,\n but this indirect approach is not as good as actually saving the\n scroll offset and the selected node).\n\n Currently, the events that trigger the saving of the tree state are\n left at default `changed.jstree open_node.jstree close_node.jstree`\n (see https://www.jstree.com/api/#/?f=$.jstree.defaults.state.events),\n meaning that the state is only saved when opening, closing or\n selecting a node. This means that if you only scroll in the jsTree\n and don't interact with the tree after that, the new scroll position\n won't be persisted - but this is just a minor inconvenience. We can\n further improve this in the future.\n\n3. A tree node is now selected as soon as it's focused. This in practice\n means that a node is selected upon \"mousedown\" (i.e. when the button\n is pressed, but not necessarily released yet), not only after a full\n cycle of pressing and releasing the mouse button. Likewise, when\n navigating in the tree using the keyboard (for example using the\n arrow keys), a new node is selected already on \"keydown\", not\n \"keyup\".\n\n4. Both the first time after page load (after restoring the selected\n node from local storage) and after clicking on an interval in the hex\n dump, the jsTree's stored \"active node\" is updated to the selected\n node. This ensures that when the object tree pane regains focus (and\n no node has been moused over since the event that changed the\n selected node), jsTree will focus the selected node.\n\nA notable difference in state persistence is that the old version kept\npaths of all nodes ever opened in the local storage, whereas the\njsTree's state plugin always rewrites the local storage with the\n*current* state. This means that if you have some nodes open and switch\nto a different spec, the information about the open nodes from the\noriginal spec is lost unless the open nodes' paths also exist in the new\nspec. In the previous version, all open nodes would survive switching\nbetween specs like that.\n\nThis might not be ideal, but it can be fixed in the future simply by\nstoring states for different specs under different keys (see\nhttps://www.jstree.com/api/#/?f=$.jstree.defaults.state.key).","shortMessageHtmlLink":"Use jsTree's state plugin to persist object tree state"}},{"before":"c58d39e6b2e140c991e554d5dd465bc69f1a8050","after":"ba671868d7d0643a964bf412da68766297af9e86","ref":"refs/heads/use-jstree-state-plugin","pushedAt":"2024-02-10T23:46:31.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"},"commit":{"message":"Use jsTree's state plugin to persist object tree state\n\n... instead of a poor custom reimplementation of the same. This change\nfixes several bugs of the existing implementation and improves the\noverall user experience when interacting with the object tree:\n\n1. It fixes one annoying bug I've encountered many times: if you had\n expanded a certain node in the tree and then changed the .ksy spec so\n that a node under the same path still existed in the tree but was no\n longer openable (in our case, only non-empty arrays and user type\n objects are openable, so either it has become empty or its type has\n changed to a primitive type, for example), then our naive code would\n still try to open it and asynchronously wait for it to be opened,\n which wouldn't happen. In that case, the code was stuck on an\n unfulfilled promise at every reparsing (because the promise\n fulfillment happened only after all required nodes were opened),\n which in practice had several implications:\n\n - selecting a node in the object tree didn't highlight the\n corresponding interval in the hex dump,\n - opening or closing nodes in the tree was abrupt (without a smooth\n transition as usual),\n - changes to the set of opened nodes weren't persisted to the local\n storage,\n - an open \"Errors\" pane didn't disappear, even if the error has been\n already fixed.\n\n Basically the only way I know to resolve the promise was to open a\n few random nodes in the tree (or pick one and repeatedly close and\n open it again). The opening code would (mis)interpret these events as\n if the nodes it requested to open were finally opened, and then\n resolve the promise. But you had to do this after every reparsing,\n which was annoying.\n\n2. Thanks to the default behavior of the jsTree's state plugin, the\n scroll position and the selected node are now persisted as well.\n Previously, only the set of opened nodes and the selection range in\n the hex viewer was preserved (the saved hex viewer selection\n sometimes resulted to selecting the right node and scrolling to it,\n but this indirect approach is not as good as actually saving the\n scroll offset and the selected node).\n\n Currently, the events that trigger the saving of the tree state are\n left at default `changed.jstree open_node.jstree close_node.jstree`\n (see https://www.jstree.com/api/#/?f=$.jstree.defaults.state.events),\n meaning that the state is only saved when opening, closing or\n selecting a node. This means that if you only scroll in the jsTree\n and don't interact with the tree after that, the new scroll position\n won't be persisted - but this is just a minor inconvenience. We can\n further improve this in the future.\n\n3. A tree node is now selected as soon as it's focused. This in practice\n means that a node is selected upon \"mousedown\" (i.e. when the button\n is pressed, but not necessarily released yet), not only after a full\n cycle of pressing and releasing the mouse button. Likewise, when\n navigating in the tree using the keyboard (for example using the\n arrow keys), a new node is selected already on \"keydown\", not\n \"keyup\".\n\n4. Both the first time after page load (after restoring the selected\n node from local storage) and after clicking on an interval in the hex\n dump, the jsTree's stored \"active node\" is updated to the selected\n node. This ensures that when the object tree pane regains focus (and\n no node has been moused over since the event that changed the\n selected node), jsTree will focus the selected node.\n\nA notable difference in state persistence is that the old version kept\npaths of all nodes ever opened in the local storage, whereas the\njsTree's state plugin always rewrites the local storage with the\n*current* state. This means that if you have some nodes open and switch\nto a different spec, the information about the open nodes from the\noriginal spec is lost unless the open nodes' paths also exist in the new\nspec. In the previous version, all open nodes would survive switching\nbetween specs like that.\n\nThis might not be ideal, but it can be fixed in the future simply by\nstoring states for different specs under different keys (see\nhttps://www.jstree.com/api/#/?f=$.jstree.defaults.state.key).","shortMessageHtmlLink":"Use jsTree's state plugin to persist object tree state"}},{"before":"d1a7ddd79e7ea5fa09390f02a2337967bf48e532","after":null,"ref":"refs/heads/switch-to-js-yaml","pushedAt":"2024-02-10T23:25:34.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"}},{"before":"80c94b13a7c9671bbb33b90a1a49a7f56ce766ce","after":"5de330d076e00f13063453d1eece9092a19549f5","ref":"refs/heads/master","pushedAt":"2024-02-10T23:25:26.000Z","pushType":"pr_merge","commitsCount":5,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"},"commit":{"message":"Merge pull request #166 from kaitai-io/switch-to-js-yaml\n\nUse js-yaml (instead of yaml.js) for YAML parsing","shortMessageHtmlLink":"Merge pull request #166 from kaitai-io/switch-to-js-yaml"}},{"before":"debb5eb7accd063d2e8745636f8bf79811b4016a","after":"d1a7ddd79e7ea5fa09390f02a2337967bf48e532","ref":"refs/heads/switch-to-js-yaml","pushedAt":"2024-02-10T23:21:48.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"},"commit":{"message":"vendor.yaml: add FIXME comment \"remove yaml.js when possible\"\n\nSee https://github.com/kaitai-io/kaitai_struct_webide/issues/168","shortMessageHtmlLink":"vendor.yaml: add FIXME comment \"remove yaml.js when possible\""}},{"before":"e26e1497a13a674071332a070f84786519b04a64","after":"debb5eb7accd063d2e8745636f8bf79811b4016a","ref":"refs/heads/switch-to-js-yaml","pushedAt":"2024-02-10T22:12:29.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"},"commit":{"message":"vendor.yaml: add FIXME comment \"remove yaml.js when possible\"","shortMessageHtmlLink":"vendor.yaml: add FIXME comment \"remove yaml.js when possible\""}},{"before":null,"after":"e26e1497a13a674071332a070f84786519b04a64","ref":"refs/heads/switch-to-js-yaml","pushedAt":"2024-02-04T18:07:05.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"},"commit":{"message":"vendor.yaml: add FIXME comment \"remove yaml.js when possible\"","shortMessageHtmlLink":"vendor.yaml: add FIXME comment \"remove yaml.js when possible\""}},{"before":"6bb6f91692b7b104bd9d4d4aeb241008c8169466","after":"80c94b13a7c9671bbb33b90a1a49a7f56ce766ce","ref":"refs/heads/master","pushedAt":"2024-01-21T13:15:42.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"},"commit":{"message":"Update `npm` deps, notably `ace-builds` to 1.32.3 (was 1.15.0)\n\nAlso fixes the error printed in the DevTools console since\na2496ac8ee7065be89df92d922bcd45a5a8ebba9, which updated `ace-builds` to\n1.15.0 (from 1.4.12), but did not update the list of files to copy into\nthe `lib/_npm/` folder for the new version:\n\n```\nUncaught DOMException: Failed to execute 'importScripts' on 'WorkerGlobalScope':\n The script at 'https://ide.kaitai.io/devel/lib/_npm/ace/worker-yaml.js' failed to load.\n```","shortMessageHtmlLink":"Update npm deps, notably ace-builds to 1.32.3 (was 1.15.0)"}},{"before":"ba385f75832ceed1c10151a617b55ff01d3e05af","after":"6bb6f91692b7b104bd9d4d4aeb241008c8169466","ref":"refs/heads/master","pushedAt":"2024-01-21T13:07:27.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"},"commit":{"message":"GH Actions: upgrade to Node.js 20 (was 16)","shortMessageHtmlLink":"GH Actions: upgrade to Node.js 20 (was 16)"}},{"before":"92ee05b46147a577e1182099756a47396b7315bd","after":"ba385f75832ceed1c10151a617b55ff01d3e05af","ref":"refs/heads/master","pushedAt":"2024-01-21T12:51:56.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"},"commit":{"message":"GH Actions: use `npm ci` instead of `npm update`\n\nIt is generally recommended to use `npm ci` in CI, see for example:\n\n- https://docs.npmjs.com/cli/v10/commands/npm-ci#description\n- https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs#example-using-npm\n- https://support.deploybot.com/article/131-why-developers-should-use-npm-ci-instead-of-npm-install-and-its-benefits","shortMessageHtmlLink":"GH Actions: use npm ci instead of npm update"}},{"before":"89269abb020b61c923932f8e90a58fc40cc76f57","after":"c58d39e6b2e140c991e554d5dd465bc69f1a8050","ref":"refs/heads/use-jstree-state-plugin","pushedAt":"2024-01-21T12:15:00.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"},"commit":{"message":"Use jsTree's state plugin to persist object tree state\n\n... instead of a poor custom reimplementation of the same. This change\nfixes several bugs of the existing implementation and improves the\noverall user experience when interacting with the object tree:\n\n1. It fixes one annoying bug I've encountered many times: if you had\n expanded a certain node in the tree and then changed the .ksy spec so\n that a node under the same path still existed in the tree but was no\n longer openable (in our case, only non-empty arrays and user type\n objects are openable, so either it has become empty or its type has\n changed to a primitive type, for example), then our naive code would\n still try to open it and asynchronously wait for it to be opened,\n which wouldn't happen. In that case, the code was stuck on an\n unfulfilled promise at every reparsing (because the promise\n fulfillment happened only after all required nodes were opened),\n which in practice had several implications:\n\n - selecting a node in the object tree didn't highlight the\n corresponding interval in the hex dump,\n - opening or closing nodes in the tree was abrupt (without a smooth\n transition as usual),\n - changes to the set of opened nodes weren't persisted to the local\n storage,\n - an open \"Errors\" pane didn't disappear, even if the error has been\n already fixed.\n\n Basically the only way I know to resolve the promise was to open a\n few random nodes in the tree (or pick one and repeatedly close and\n open it again). The opening code would (mis)interpret these events as\n if the nodes it requested to open were finally opened, and then\n resolve the promise. But you had to do this after every reparsing,\n which was annoying.\n\n2. Thanks to the default behavior of the jsTree's state plugin, the\n scroll position and the selected node are now persisted as well.\n Previously, only the set of opened nodes and the selection range in\n the hex viewer was preserved (the saved hex viewer selection\n sometimes resulted to selecting the right node and scrolling to it,\n but this indirect approach is not as good as actually saving the\n scroll offset and the selected node).\n\n Currently, the events that trigger the saving of the tree state are\n left at default `changed.jstree open_node.jstree close_node.jstree`\n (see https://www.jstree.com/api/#/?f=$.jstree.defaults.state.events),\n meaning that the state is only saved when opening, closing or\n selecting a node. This means that if you only scroll in the jsTree\n and don't interact with the tree after that, the new scroll position\n won't be persisted - but this is just a minor inconvenience. We can\n further improve this in the future.\n\n3. A tree node is now selected as soon as it's focused. This in practice\n means that a node is selected upon \"mousedown\" (i.e. when the button\n is pressed, but not necessarily released yet), not only after a full\n cycle of pressing and releasing the mouse button. Likewise, when\n navigating in the tree using the keyboard (for example using the\n arrow keys), a new node is selected already on \"keydown\", not\n \"keyup\".\n\n4. Both the first time after page load (after restoring the selected\n node from local storage) and after clicking on an interval in the hex\n dump, the jsTree's stored \"active node\" is updated to the selected\n node. This ensures that when the object tree pane regains focus (and\n no node has been moused over since the event that changed the\n selected node), jsTree will focus the selected node.\n\nA notable difference in state persistence is that the old version kept\npaths of all nodes ever opened in the local storage, whereas the\njsTree's state plugin always rewrites the local storage with the\n*current* state. This means that if you have some nodes open and switch\nto a different spec, the information about the open nodes from the\noriginal spec is lost unless the open nodes' paths also exist in the new\nspec. In the previous version, all open nodes would survive switching\nbetween specs like that.\n\nThis might not be ideal, but it can be fixed in the future simply by\nstoring states for different specs under different keys (see\nhttps://www.jstree.com/api/#/?f=$.jstree.defaults.state.key).","shortMessageHtmlLink":"Use jsTree's state plugin to persist object tree state"}},{"before":"dd2d0ced11e6a4fc9f35d286a08c5a5923066b37","after":null,"ref":"refs/heads/webide-repr-on-imported","pushedAt":"2024-01-21T12:10:17.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"}},{"before":"7dc1e117435bef48759860c1c70450cbf79e55b3","after":"92ee05b46147a577e1182099756a47396b7315bd","ref":"refs/heads/master","pushedAt":"2024-01-21T12:09:31.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"},"commit":{"message":"Merge pull request #163 from kaitai-io/webide-repr-on-imported\n\nFix -webide-representation on imported types","shortMessageHtmlLink":"Merge pull request #163 from kaitai-io/webide-repr-on-imported"}},{"before":"0089b4b038dcd980f7e92f223aa55be7c32a8d5f","after":"dd2d0ced11e6a4fc9f35d286a08c5a5923066b37","ref":"refs/heads/webide-repr-on-imported","pushedAt":"2024-01-21T12:04:13.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"},"commit":{"message":"Fix -webide-representation on imported types\n\nResolves https://github.com/kaitai-io/kaitai_struct_webide/issues/144\n\nSupersedes https://github.com/kaitai-io/kaitai_struct_webide/pull/122 -\nthis commit supports not only relative imports as #122 did, but also\nabsolute imports and indirect imports (i.e. imports of imports).","shortMessageHtmlLink":"Fix -webide-representation on imported types"}},{"before":"7338f1be63cf25bea711bc696b6c21bd8d2f6ada","after":null,"ref":"refs/heads/better-import-errors","pushedAt":"2024-01-21T11:52:18.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"}},{"before":"44e8329272b5430bd602b2b63ef5580b081b6fad","after":"7dc1e117435bef48759860c1c70450cbf79e55b3","ref":"refs/heads/master","pushedAt":"2024-01-21T11:51:59.000Z","pushType":"pr_merge","commitsCount":5,"pusher":{"login":"generalmimon","name":"Petr Pučil","path":"/generalmimon","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/47499687?s=80&v=4"},"commit":{"message":"Merge pull request #161 from kaitai-io/better-import-errors\n\nBetter error messages when importing an unavailable .ksy","shortMessageHtmlLink":"Merge pull request #161 from kaitai-io/better-import-errors"}},{"before":"44e8329272b5430bd602b2b63ef5580b081b6fad","after":"56cf9bd16503e37da73ac25267f778fefa13649c","ref":"refs/heads/snyk-fix-78115a352a8ef940845c189ebc14ea0a","pushedAt":"2023-12-31T16:14:47.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"koczkatamas","name":"Tamás Koczka","path":"/koczkatamas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2608082?s=80&v=4"},"commit":{"message":"fix: package.json & package-lock.json to reduce vulnerabilities\n\nThe following vulnerabilities are fixed with an upgrade:\n- https://snyk.io/vuln/SNYK-JS-POSTCSS-5926692","shortMessageHtmlLink":"fix: package.json & package-lock.json to reduce vulnerabilities"}},{"before":null,"after":"44e8329272b5430bd602b2b63ef5580b081b6fad","ref":"refs/heads/snyk-fix-78115a352a8ef940845c189ebc14ea0a","pushedAt":"2023-12-31T16:14:46.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"koczkatamas","name":"Tamás Koczka","path":"/koczkatamas","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2608082?s=80&v=4"},"commit":{"message":"GH Actions: rename to main.yml workflow, job 'build'","shortMessageHtmlLink":"GH Actions: rename to main.yml workflow, job 'build'"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEMU8K7QA","startCursor":null,"endCursor":null}},"title":"Activity · kaitai-io/kaitai_struct_webide"}