BookStackApp / BookStack

A platform to create documentation/wiki content built with PHP & Laravel
https://www.bookstackapp.com/
MIT License
15.14k stars 1.89k forks source link

[Feature Request]: Code block line wrap support #3272

Open SmokingCrop opened 2 years ago

SmokingCrop commented 2 years ago

Describe the feature you'd like

I would like to have the ability to make a 'block code' format but without horizontal scrollbars. Basically word wrapping that is used in many text editors.

The line-numbering should be empty on lines that are wrapped.

Describe the benefits this feature would bring to BookStack users

This makes the ease of use much higher for readers to view the entire code in one go without having to manually scroll horizontally to view every part of the code/text.

Additional context

Example of word-wrapping in another program: image

techauthoruk commented 2 years ago

I think this would be a really good addition if it is possible within the current framework

bloomt commented 2 years ago

+1 for this feature

hambern commented 1 year ago

I need this too

hambern commented 1 year ago

This script in the head makes it work:

<script>
  window.onload = function() {
    let codemirror = document.createElement('script');
    codemirror.src = 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.48.2/codemirror.min.js';
    document.head.appendChild(codemirror);

    codemirror.onload = function() {
        let codemirrors = document.querySelectorAll('.CodeMirror');
        codemirrors.forEach(function(codemirror) {
            codemirror.CodeMirror.setOption('lineWrapping', true);
            codemirror.CodeMirror.setOption('wordWrap', true);
        });
    };
  }
</script>

Don't thank me... Thank Open AI ;)

jenny787 commented 1 year ago

This script in the head makes it work:

<script>
  window.onload = function() {
    let codemirror = document.createElement('script');
  codemirror.src = 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.48.2/codemirror.min.js';
  document.head.appendChild(codemirror);

  codemirror.onload = function() {
      let codemirrors = document.querySelectorAll('.CodeMirror');
      codemirrors.forEach(function(codemirror) {
          codemirror.CodeMirror.setOption('lineWrapping', true);
          codemirror.CodeMirror.setOption('wordWrap', true);
      });
  };
  }
</script>

Don't thank me... Thank Open AI ;)

This is not working anymore, it seems.

JavaDogWebDesign commented 1 year ago

Seems like a good feature.

Some code is just so long and goes off-screen making it harder to read the code.

ssddanbrown commented 11 months ago

Within #4639 I've exposed the newer CodeMirror (code block) instances to allow a route of customization/hacking. As of BookStack v23.10.1 (once released) it should be possible to enable line wrapping via adding this to your "Custom HTML Head Content" customizating setting:

<script>
window.addEventListener('library-cm6::pre-init', event => {
    const detail = event.detail;
    const config = detail.editorViewConfig;
    const EditorView = detail.libEditorView;

    if (detail.usage === 'content-code-block') {
        config.extensions.push(EditorView.lineWrapping);
    }
});
</script>
ZAck1387 commented 9 months ago

Within #4639 I've exposed the newer CodeMirror (code block) instances to allow a route of customization/hacking. As of BookStack v23.10.1 (once released) it should be possible to enable line wrapping via adding this to your "Custom HTML Head Content" customizating setting:

<script>
window.addEventListener('library-cm6::pre-init', event => {
    const detail = event.detail;
    const config = detail.editorViewConfig;
    const EditorView = detail.libEditorView;

    if (detail.usage === 'content-code-block') {
        config.extensions.push(EditorView.lineWrapping);
    }
});
</script>

thank you, this works great! (tested with v23.12), highly appreciated!

AMDHome commented 3 days ago

Is there a way to wrap conditionally based on language?

For instance I only want to wrap the text if no language syntax is specified, but if we specify any code language (bash, php, C, js, etc) I dont want text wrapping.

I couldn't find any language item in the event data list. So I thought I'd ask in case i missed it.