diff --git a/app/Entities/Tools/PageContent.php b/app/Entities/Tools/PageContent.php index dbb62021c..b1c750adb 100644 --- a/app/Entities/Tools/PageContent.php +++ b/app/Entities/Tools/PageContent.php @@ -239,6 +239,9 @@ class PageContent $html .= $doc->saveHTML($childNode); } + // Perform required string-level tweaks + $html = str_replace(' ', ' ', $html); + return $html; } diff --git a/resources/js/wysiwyg/config.js b/resources/js/wysiwyg/config.js index 1b3b6e7b5..692c5bce6 100644 --- a/resources/js/wysiwyg/config.js +++ b/resources/js/wysiwyg/config.js @@ -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, diff --git a/resources/lang/it/editor.php b/resources/lang/it/editor.php index 3e1a2c349..937ff6f5d 100644 --- a/resources/lang/it/editor.php +++ b/resources/lang/it/editor.php @@ -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', diff --git a/resources/sass/_blocks.scss b/resources/sass/_blocks.scss index 0a7a689f7..7d408cd1b 100644 --- a/resources/sass/_blocks.scss +++ b/resources/sass/_blocks.scss @@ -238,13 +238,13 @@ } .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; } } diff --git a/resources/sass/_layout.scss b/resources/sass/_layout.scss index 783ccc8f9..69882d40d 100644 --- a/resources/sass/_layout.scss +++ b/resources/sass/_layout.scss @@ -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; } } diff --git a/resources/sass/_lists.scss b/resources/sass/_lists.scss index c46ac84f3..8febdcffc 100644 --- a/resources/sass/_lists.scss +++ b/resources/sass/_lists.scss @@ -193,7 +193,7 @@ } } .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; diff --git a/resources/sass/_pages.scss b/resources/sass/_pages.scss index af5bea0f1..8103ca20d 100755 --- a/resources/sass/_pages.scss +++ b/resources/sass/_pages.scss @@ -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; diff --git a/tests/Entity/PageContentTest.php b/tests/Entity/PageContentTest.php index 20cde049a..b9680d23f 100644 --- a/tests/Entity/PageContentTest.php +++ b/tests/Entity/PageContentTest.php @@ -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('html); + $this->assertStringContainsString('refresh()->html); } public function test_nested_headers_gets_assigned_an_id() { - $this->asEditor(); $page = Page::query()->first(); $content = '
Simple Test
'; - $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 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('
Simple Test
', $updatedPage->html); + $this->assertStringContainsString('
Simple Test
', $page->refresh()->html); + } + + public function test_non_breaking_spaces_are_preserved() + { + /** @var Page $page */ + $page = Page::query()->first(); + + $content = '

 

'; + $this->asEditor()->put($page->getUrl(), [ + 'name' => $page->name, + 'html' => $content, + ]); + + $this->assertStringContainsString('

 

', $page->refresh()->html); } }