]> BookStack Code Mirror - bookstack/commitdiff
Merge branch 'development' into release
authorDan Brown <redacted>
Tue, 1 Mar 2022 22:45:12 +0000 (22:45 +0000)
committerDan Brown <redacted>
Tue, 1 Mar 2022 22:45:12 +0000 (22:45 +0000)
app/Entities/Tools/PageContent.php
resources/js/wysiwyg/config.js
resources/lang/it/editor.php
resources/sass/_blocks.scss
resources/sass/_layout.scss
resources/sass/_lists.scss
resources/sass/_pages.scss
tests/Entity/PageContentTest.php

index dbb62021cae18c18e5233bb9a04e27da0874c4e3..b1c750adbdd6a3a3645c75e91b0f44c9e940bc6c 100644 (file)
@@ -239,6 +239,9 @@ class PageContent
             $html .= $doc->saveHTML($childNode);
         }
 
+        // Perform required string-level tweaks
+        $html = str_replace(' ', '&nbsp;', $html);
+
         return $html;
     }
 
index 1b3b6e7b572053989cc4babebee20b6d4a4778d8..692c5bce647c2f64fa41be87ca04e88ab4f91af4 100644 (file)
@@ -221,11 +221,15 @@ export function build(options) {
     // Build toolbar content
     const {toolbar, groupButtons: toolBarGroupButtons} = buildToolbar(options);
 
+    // BookStack Version
+    const version = document.querySelector('script[src*="/dist/app.js"]').getAttribute('src').split('?version=')[1];
+
     // Return config object
     return {
         width: '100%',
         height: '100%',
         selector: '#html-editor',
+        cache_suffix: '?version=' + version,
         content_css: [
             window.baseUrl('/dist/styles.css'),
         ],
@@ -239,6 +243,7 @@ export function build(options) {
         remove_script_host: false,
         document_base_url: window.baseUrl('/'),
         end_container_on_empty_block: true,
+        remove_trailing_brs: false,
         statusbar: false,
         menubar: false,
         paste_data_images: false,
index 3e1a2c3499fb282e52619c7f47757502ac1370dc..937ff6f5de6c5ce18fcaec0498e4b56735ab2870 100644 (file)
@@ -131,12 +131,12 @@ return [
     'open_link' => 'Apri collegamento in...',
     'open_link_current' => 'Finestra corrente',
     'open_link_new' => 'Nuova finestra',
-    'insert_collapsible' => 'Insert collapsible block',
-    'collapsible_unwrap' => 'Unwrap',
-    'edit_label' => 'Edit label',
-    'toggle_open_closed' => 'Toggle open/closed',
-    'collapsible_edit' => 'Edit collapsible block',
-    'toggle_label' => 'Toggle label',
+    'insert_collapsible' => 'Inserisci blocco collassabile',
+    'collapsible_unwrap' => 'Espandi',
+    'edit_label' => 'Modifica etichetta',
+    'toggle_open_closed' => 'Espandi/Comprimi',
+    'collapsible_edit' => 'Modifica blocco collassabile',
+    'toggle_label' => 'Attiva/Disattiva etichetta',
 
     // About view
     'about_title' => 'Informazioni sull\'editor di WYSIWYG',
index 0a7a689f7dec53043ffbf576ba3c418f06eb6d43..7d408cd1b5f24fdcb41f42e18e8b680bf9baa899 100644 (file)
 }
 
 .fade-in-when-active {
-  opacity: 0.6;
+  @include lightDark(opacity, 0.6, 0.7);
   transition: opacity ease-in-out 120ms;
   &:hover, &:focus-within {
-    opacity: 1;
+    opacity: 1 !important;
   }
   @media (prefers-contrast: more) {
-    opacity: 1;
+    opacity: 1 !important;
   }
 }
 
index 783ccc8f9476cb455e71c6186c346e2695ba1b9e..69882d40deb4c5eafe551c8cd0835dfc066b3ad1 100644 (file)
@@ -361,16 +361,13 @@ body.flexbox {
     display: none;
   }
   .tri-layout-left-contents > *, .tri-layout-right-contents > * {
-    opacity: 0.6;
+    @include lightDark(opacity, 0.6, 0.7);
     transition: opacity ease-in-out 120ms;
-    &:hover {
-      opacity: 1;
-    }
-    &:focus-within {
-      opacity: 1;
+    &:hover, &:focus-within {
+      opacity: 1 !important;
     }
     @media (prefers-contrast: more) {
-      opacity: 1;
+      opacity: 1 !important;
     }
   }
 
index c46ac84f35e45f09ebd89cf31482fb12230af8ea..8febdcffcd4f681d4ba5b2b57ccc2ea37b56608c 100644 (file)
     }
   }
   .entity-list-item.selected {
-    background-color: rgba(0, 0, 0, 0.08);
+    @include lightDark(background-color, rgba(0, 0, 0, 0.08), rgba(255, 255, 255, 0.08));
   }
   .entity-list-item.no-hover {
     margin-top: -$-xs;
index af5bea0f1770822ceb3d22dfe9321cd59082bcb6..8103ca20d1c8ceb67b2626230ce79ae2c5b3664c 100755 (executable)
@@ -164,6 +164,10 @@ body.tox-fullscreen, body.markdown-fullscreen {
     clear: both;
   }
 
+  p:empty {
+    min-height: 1.6em;
+  }
+
   &.page-revision {
     pre code {
       white-space: pre-wrap;
index 20cde049a1938d46e4aa55fe48a6da33fd90bb80..b9680d23fc80598746bff0f096255b9083ceda1d 100644 (file)
@@ -692,35 +692,43 @@ class PageContentTest extends TestCase
 
     public function test_base64_images_within_markdown_blanked_if_not_supported_extension_for_extract()
     {
-        $this->asEditor();
         $page = Page::query()->first();
 
-        $this->put($page->getUrl(), [
+        $this->asEditor()->put($page->getUrl(), [
             'name'     => $page->name, 'summary' => '',
             'markdown' => 'test ![test](data:image/jiff;base64,' . $this->base64Jpeg . ')',
         ]);
 
-        $page->refresh();
-        $this->assertStringContainsString('<img src=""', $page->html);
+        $this->assertStringContainsString('<img src=""', $page->refresh()->html);
     }
 
     public function test_nested_headers_gets_assigned_an_id()
     {
-        $this->asEditor();
         $page = Page::query()->first();
 
         $content = '<table><tbody><tr><td><h5>Simple Test</h5></td></tr></tbody></table>';
-        $this->put($page->getUrl(), [
+        $this->asEditor()->put($page->getUrl(), [
             'name'    => $page->name,
             'html'    => $content,
-            'summary' => '',
         ]);
 
-        $updatedPage = Page::query()->where('id', '=', $page->id)->first();
-
         // The top level <table> node will get assign the bkmrk-simple-test id because the system will
         // take the node value of h5
         // So the h5 should get the bkmrk-simple-test-1 id
-        $this->assertStringContainsString('<h5 id="bkmrk-simple-test-1">Simple Test</h5>', $updatedPage->html);
+        $this->assertStringContainsString('<h5 id="bkmrk-simple-test-1">Simple Test</h5>', $page->refresh()->html);
+    }
+
+    public function test_non_breaking_spaces_are_preserved()
+    {
+        /** @var Page $page */
+        $page = Page::query()->first();
+
+        $content = '<p>&nbsp;</p>';
+        $this->asEditor()->put($page->getUrl(), [
+            'name'    => $page->name,
+            'html'    => $content,
+        ]);
+
+        $this->assertStringContainsString('<p id="bkmrk-%C2%A0">&nbsp;</p>', $page->refresh()->html);
     }
 }