meta icon indicating copy to clipboard operation
meta copied to clipboard

Including JS in specific pages in Sphinx

Open chrisjsewell opened this issue 5 years ago • 9 comments

In a number of our packages (sphinx-tabs, sphinx-togglebuttons, sphinx-copybutton, ..) we load JavaScript into the page to achieve something.

Depending on the JS payload, this slow down page loads, which is never ideal. Writing a website from scratch, you would only include script in your page when they are needed, but in the Sphinx this does not seem possible in a trivial manner.

So what is the best way to achieve this in Sphinx? Is there a way that does not involve delving into the depths of sphinx, or is there a PR that could be made to sphinx to help this?

Basically in a particular extension you can note which docs the JS is required in, by adding an attribute to the env (e.g. during a Directive.run), but its how to utilise this later down the line, during the HTML build phase.

chrisjsewell avatar Aug 31 '20 08:08 chrisjsewell

Isn't this done by Domains right now?

akhmerov avatar Aug 31 '20 09:08 akhmerov

Isn't this done by Domains right now?

🤷 Do you have an example?

I know that mathjax checks if there is math in any of the pages (via the math domain), and only includes the JS if there is. But this still adds the JS to every page, even if you only have one math directive on a single page.

chrisjsewell avatar Aug 31 '20 09:08 chrisjsewell

My bad, you're right. I thought mathjax works on a per page basis.

I'm +:100: on this. Would be great to not embed 50 copies of plotly in a document (and/or not load plotly with each docs page).

I hope this could be somehow done by properly using the sphinx machinery though: as time goes, we're breaking the sphinx pipeline more and more.

akhmerov avatar Aug 31 '20 09:08 akhmerov

Coincidentally a highly relevant post in sphinx discussions: https://groups.google.com/g/sphinx-users/c/c4iV3vlsrWk

akhmerov avatar Aug 31 '20 10:08 akhmerov

Not coincidental lol, this who I was talking to before opening this issue

chrisjsewell avatar Aug 31 '20 11:08 chrisjsewell

https://github.com/executablebooks/sphinx-panels/issues/28#issuecomment-683748518

I totally did not post my comment on the wrong issue earlier. :P

pradyunsg avatar Aug 31 '20 12:08 pradyunsg

Wherever it is, I think it's a very viable solution 😀

chrisjsewell avatar Aug 31 '20 12:08 chrisjsewell

Coincidentally a highly relevant post in sphinx discussions: https://groups.google.com/g/sphinx-users/c/c4iV3vlsrWk

I don't believe in coincidences... :blush: I just forgot to mention it here

stefanodavid avatar Aug 31 '20 12:08 stefanodavid

Another relevant recent discussion with more replies: https://groups.google.com/g/sphinx-users/c/Z-wcktOhIAc (and more familiar faces)

akhmerov avatar Sep 02 '20 11:09 akhmerov