juniper icon indicating copy to clipboard operation
juniper copied to clipboard

install requirements on page open

Open erohmensing opened this issue 4 years ago • 2 comments

@ines thanks so much for this repo, it's really helpful for interactive documentation!

Is it possible to specify a parameter that will launch the container and download the requirements on page open, instead of when the runnable is first clicked? Our requirements take some time to install, so if we could do this in the background while they're reading content instead of making users wait ~a minute for everything to start up when they want to run the code, that would be ideal.

If its not possible, consider it a feature request 🙂

erohmensing avatar Mar 24 '20 08:03 erohmensing

Hi @erohmensing! Not sure if you are still interested in this, but I agree a background load is a generally useful idea. I couldn't find any "built-in" parameters, but one (imperfect) solution could be to add a function like this to your HTML file. It's basically Juniper's execute function, but without the "execute" part:

function startKernel(juniperInstance) {
    juniperInstance._event('requesting-kernel');
    if (juniperInstance._kernel && juniperInstance.isolateCells) {
        juniperInstance._kernel.restart();
    }
    new Promise((resolve, reject) =>
    juniperInstance.getKernel().then(resolve).catch(reject))
    .then(kernel => {
        juniperInstance._kernel = kernel;
    })
    .catch(() => {
        juniperInstance._event('failed');
        juniperInstance._kernel = null;
        if (juniperInstance.useStorage && typeof window !== 'undefined') {
            juniperInstance._fromStorage = false;
            window.localStorage.removeItem(juniperInstance.storageKey);
        }
    })
}

Then you can initialize your Juniper and start its kernel whenever you want (e.g. on document.ready):

$( document ).ready(function() {
    const juniper = new Juniper({
        your_juniper_settings
    });
    startKernel(juniper);
});

N.B. you might also wish to dispatch some messages to the console in order to convince yourself that anything is actually happening. In case you want to trigger something when your kernel is ready to go:

document.addEventListener('juniper', event => {
    if (event.detail.status == 'ready') {
        // You're all set! Do whatever you want here.
        }
    }
})

Hope this helps!

ashtonmv avatar Oct 06 '20 15:10 ashtonmv

Much appreciated! Thanks!

erohmensing avatar Oct 06 '20 15:10 erohmensing