-
Notifications
You must be signed in to change notification settings - Fork 809
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
handling notebook_loaded.Notebook
events correctly
#885
Comments
I tested hide_input and I can confirm that it does not handle the refresh properly on a large notebooks. |
Could you elaborate a little bit more on that? I don't exactly understand what I need to fix. |
So, I may have misunderstood, but I think the code which attaches the resize handler (in scroll_down/main.js#L47-L54 attaches it to any elements with class I'd suggest that the solution is either to catch Does that make sense? |
Let's remove the stale history and read-only extensions. Btw. in the notebook 5.0 there will be |
Could this be why my hidden input cells are not hidden on reload (have a large notebook)? |
@soamaven if you're still using an older version, perhaps. However, also possibel is that the large notebook causes the nbextension loading to take too long, and so it gets abandoned by requirejs, as in #822. Do you see any log messages in the |
Using the latest version on conda, I don't see anything obvious, maybe the script error for 'typo/typo' near the end? |
Hmm, yeah nothing obvious in the console logs, certainly. I think we've already fixed hide_input to handle the events correctly, but perhaps there's some interaction with another extension... do you still see the same behaviour with all other nbextensions disabled? |
Hey thanks that worked! Most of the extensions play nice, looks like |
oh, weird, I've no idea why that should be interacting there 😕 |
As discussed in #879, sometimes (particularly with big notebooks, slow connections, etc), nbextensions get loaded before the notebook has finished loading. In other cases, the notebook may have fully loaded before the nbextension gets loaded, so the nbextension will miss the
notebook_loaded.Notebook
event. Finally, the event is fired again as part of loading checkpoints, so it's not necessarily a one-time-only event! Nbextension code should be able to deal with any of these three scenarios.The best way to approach this and still get any initialization which needs to be applied to the whole notebook performed correctly seems to be:
notebook_loaded.Notebook
event, so that it gets re-initialized correctly whenever the notebook is (re)loadedload_ipython_extension
function used to load the nbextension, check ifJupyter.notebook._fully_loaded === true
, which indicates we missed the firstnotebook_loaded.Notebook
event. If this is true, call the initialization function(s) mentioned in 1 directlyI've had a quick skim through our nbextensions looking for ones which may need their loading behaviour altered, and come up with the following lists:
The following need updates to handle loading correctly:
execute_time
- handled in make execute_time robust to loading before notebook finishes loading #883freeze
- handled in Freeze Update #884hide_input
Fix/timings #886hide_input_all
Fix/timings #886ruler
Fix/timings #886scroll_down
-ok but needs update to handler for new '.output' instancessplitcell
Fix/timings #886These I'm uncertain about:
python-markdown
- does some running of things onkernel_ready.Kernel
, but I'm not sure whether this needs special handling Test if notebook is loaded during initialization. #898runtools
- has some odd dummy require thing going on to combat race conditions. I'm not immediately sure what's going on there Fix runtools initialization #897table_beautifier
- probably ok (relies on catchingkernel_ready.Kernel
), but I'm not certainhighlighter/highlighter.old.js
- do we even need to keep this file?! [highlighter] Minor typo update + cleaning #899These seem to run at least some code without
load_ipython_extension
being called, which I don't think is supposed to happen, so perhaps need a bit
of reworking:
codefolding
handle notebook_loaded for codefolding #888exercise
Modularity - don't run things beforeload_ipython_extension
is called #895exercise2
Modularity - don't run things beforeload_ipython_extension
is called #895highlighter/highlighter.js
Modularity - don't run things beforeload_ipython_extension
is called #895move_selected_cells
Modularity - don't run things beforeload_ipython_extension
is called #895skip-traceback
Modularity - don't run things beforeload_ipython_extension
is called #895splitcell
Fix/timings #886These haven't even been updated to notebook
4.x
, so should either be updated or removed:read-only
Remove stale read-only extensions. #890history
Remove stale history extensions #889cellstate
Remove stale extension #978search
remove stale nbextensions #891slidemode/slidemode2
remove stale nbextensions #891swc
remove stale nbextensions #891These already use the correct approach:
autoscroll
collapsible_headings
init_cell
nbTranslate
toc2
And these don't need notebook loaded to initialize:
addbefore
autosavetime
chrome-clipboard
code_font_size
code_prettify
comment-uncomment
contrib_nbextensions_help_item
css_selector
datestamper
dragdrop
equation-numbering
gist_it
help_panel
hide_header
hinterland
keyboard_shortcut_editor
limit_output
navigation-hotkeys
nbTranslate
nbviewer_theme
no_exec_dunder
notify
printview
qtconsole
rubberband
runtools
scratchpad
search-replace
select_keymap
skill
snippets_menu
snippets
spellchecker
toc2
toggle_all_line_numbers
tree-filter
zenmode
The text was updated successfully, but these errors were encountered: