jupyter-book / mystmd

Command line tools for working with MyST Markdown.
https://mystmd.org/guide
MIT License
194 stars 61 forks source link

Support folder hierarchies and nested files in URLs without flattening them #670

Open nthiery opened 11 months ago

nthiery commented 11 months ago

When building a web site, nested file names are flattened and replaced with slugs:

https://mystmd.org/guide/table-of-contents#nesting-of-files-in-urls

While I can see the value for the end-user (simple urls), there are use cases where this is detrimental, as the nested file name actually carries semantic.

For example, in my course, the name of a document, says /Solutions/Semaine3/foo.html tells that this is a solution for notebook foo of week 3. While Devoirs/Semaine3/foo.html is the original assignment. This also helps the user match the pages on the web with the notebooks that they have dowloaded separately.

Proposal

Provide a configuration option flatten_filename=true/false, with true as default value, to enable or disable flattening of file names.

Provide a configuration option 'transform_filename=true/false, withtrue` as default value, to enable or disable file name transformation.

When both options are set to false, one recovers JupyterBook's behavior.

nthiery commented 9 months ago

I believe this is my last blocker for migrating my course notes to myst :-)

Next in line: a course starting in January:

https://nicolas.thiery.name/Enseignement/IntroScienceDonnees/

Thanks in advance!

choldgraf commented 4 months ago

Could I signal-boost this one? Is it a particularly complicated one to implement?

I ask because I think fixing this would be quite valuable: I think it is one of the only remaining "hard blockers" for any pre-existing users of Jupyter Book or Sphinx, given that currently, switching to MyST will break everybody's URLs.

agoose77 commented 1 week ago

Talking to @choldgraf, another point to consider is the ability to preserve existing links. If we implement a jb1 slug scheme, then we could easily ensure that no links break.

However this is not necessarily a requirement.

rowanc1 commented 1 week ago

That is links in the table of contents?

I have talked to @fwkoch and we are going to do some planning on this this week, and ideally get it over the line next week.

agoose77 commented 1 week ago

I mean that should a user have some uri to foo/bar.md, we should maybe have a mode for preserving that (which goes beyond supporting folders to ensuring that the entire url for a page is identical).

Maybe it should be a configurable setting.

choldgraf commented 1 week ago

As a few driving examples:

The concerns @agoose77 is voicing are that:

And the two potential solutions we discussed being:

  1. Add the ability to generate JB-style slugs (either html or dirhtml)
  2. Generate re-directs automatically (like foo.html to foo/index.html)

But there might be other solutions to explore too!

agoose77 commented 1 week ago

We also might want to do a pass in adding explicit '.html' to our static file urls - right now we leave that to the file server (so python's http server doesn't work)