acrule / janus Goto Github PK
View Code? Open in Web Editor NEWJupyter Notebook Extension that assists with notebook cleaning
License: BSD 3-Clause "New" or "Revised" License
Jupyter Notebook Extension that assists with notebook cleaning
License: BSD 3-Clause "New" or "Revised" License
Enable users to show and hide all sidebar elements at once
Update the gif once we are ready for a formal 0.1 release, (i.e., for the pilot test).
There should be only one version id for each unique content for each cell.
Enable users to leave short notes in the Jupyter interface about bugs or interesting behaviors. We should also be able to see what comments they have left right from the interface too, that way it is easy to pull up when we are doing their interview.
Highlight which cells are added, deleted, or just updated after each change.
For the deployment, we may want to get information from users about their notebook, without actually getting the content of their notebook. We could do this by duplicating the database, calculating multiple new columns in the cell
table based on the cell content, and then deleting the content column. For example, we may want to know:
Currently Notebook level metadata related to this extension is all at the top level of Jupyter.notebook.metadata. Add another layer so it is all under Jupyter.notebook.metadata.janus
Currently we look for changes to unexecuted cells every time the code-mirrior changes. This is so we can track changes in the notebook to cells that were never executed. However, these changes only matter if the notebook is saved, so we should probably wait until a save event to look for changes to unexecuted cells that we should track.
The list of potential cell versions can get quite long. We likely want to show only the last few versions (say 5) and have a summary marker (e.g. "+6") to show when there are more versions to be viewed.
Minimap hovering should be consistent across all hidden content markers
May simply need to rewrite code so that every selected cell is highlighted.
When cell versions are initially shown, a random (or just the first?) version is selected that may not reflect the version of the cell that is actually being shown in the notebook.
Right now it is hard to use the scrollbar if you want to look at changes that occur near the end of the notebook. We could float the scrollbar so users can look at a later part of the notebook but still have the scrollbar be visible so they can scroll back and forth to see the changes there
To be consistent with how the notebook labels input/output windows
I think we want to track
For consistency, only use "hide" or "show", not indent or fold. This should be true both in the UI and in the codebase.
Hi,
I've been trying to run Janus but there seems to be some dependency issue.
I've followed the README to install Janus.
TypeError: Jupyter.notebook.metadata.janus is undefined Stack trace: updateHistoryUI@http://localhost:8888/nbextensions/janus/history.js?v=20180301162051:158:13 renderJanusButtons@http://localhost:8888/nbextensions/janus/ui.js?v=20180301162051:206:9 renderJanusUI@http://localhost:8888/nbextensions/janus/ui.js?v=20180301162051:216:9 loadExtension@http://localhost:8888/nbextensions/janus/main.js?v=20180301162051:56:9 load_extension/</<@http://localhost:8888/static/notebook/js/main.min.js?v=6a166b31c5a20f809e44ec2d50e40412:12408:41 execCb@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:1690:24 check@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:865:43 enable/</<@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:1140:29 bind/<@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:131:20 emit/<@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:1190:21 each@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:56:31 emit@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:1189:17 check@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:940:25 enable/</<@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:1140:29 bind/<@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:131:20 emit/<@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:1190:21 each@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:56:31 emit@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:1189:17 check@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:940:25 enable/</<@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:1140:29 bind/<@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:131:20 emit/<@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:1190:21 each@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:56:31 emit@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:1189:17 check@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:940:25 enable/</<@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:1140:29 bind/<@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:131:20 emit/<@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:1190:21 each@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:56:31 emit@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:1189:17 check@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:940:25 enable@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:1177:17 init@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:783:21 callGetModule@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:1204:17 completeLoad@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:1583:21 onScriptLoad@http://localhost:8888/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce:1711:21 require.js:900:37
Reproduce: Hide bottom output cell, hover over to peek, jittering overlay ensues.
This will be a significant rewrite, but we should consider letting users have multiple sidebars open at once. Imagine an interaction similar to Google Docs Comments where we can stack each of the sidebars and move them up or down based on what the user selects. Users should be able to:
If a user is looking at different versions and has collapsed the output of a cell, the hidden output marker and the version markers overlap.
Two potential solutions:
HIdden cells can be selected if a user presses the up or down arrow after selecting a visible cell just above or bellow a hidden cell. We should signify that the hidden cell is selected in some way.
It would be nice to track the names users assign to their groups of hidden cells so that we can show these names in the History Viewer, but this will take additional tracking code, so may not be a top priority.
Right now the history viewer does not reflect which cells are hidden in the notebook. We should be able to run the same code we use in the main notebook to create "placeholders" for hidden cells, and even enable hidden cell preview using a detailed tooltip, but I don't think we want users to be able to click these placeholders to open the cells in an embedded sidebar.
Currently it says "View Notebook History" but we could change this to say something like "Last edit 35 min ago"
Currently the markers are the same color as the background so they don't show.
We often (if not always) need to recalculate markerPosition based on marker type. This occurs just as we show or move the sidebar to ensure it is positioned correctly. We may just be better off calculating all positioning based on Sidebar.marker rather than trying to pass the markerPosition variable around.
Put an example notebook in the repository so users can more easily see the benefit of using Janus.
Some saved cell versions seem to have the exact same source and outputs, making them equivalent for our purposes. These should not be saved as separate versions. Perhaps it is an issue with the timing of the saving of the cell, either before or after cell execution when changes have or have not taken place because the execution yet.
We can use the marker to:
New icon that better represents the collapsing/folding of a cell
Do we want to toggle the Menu UI text so that it reads "Hide Cells" or "Show Cells" depending on the visibility of the selected cell?
We could similarly update the UI buttons to either have different icons or (more consistently) just to change color.
Probably want to use the Font Awesome arrow icon instead.
We don't show the history of items being hidden or shown. We could likely include a couple new columns in the cell database table that track cell hidden, output hidden, and input hidden. We could then use these to reconstruct each visible state of the notebook.
Ensure that the minimap x positioning never places the minimap off the right edge of the window.
Encountered a bug where if all the versions are named (and thus showing) there is still an "extra versions" marker that shows
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.