diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index aa9a099c0..5c8734fd6 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -35,6 +35,15 @@ body: description: Provide any additional context and screenshots here to help us solve this issue validations: required: false + - type: input + id: browserdetails + attributes: + label: Browser Details + description: | + If this is an issue that occurs when using the BookStack interface, please provide details of the browser used which presents the reported issue. + placeholder: (eg. Firefox 97 (64-bit) on Windows 11) + validations: + required: false - type: input id: bsversion attributes: diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 4826cc5ea..fb1e0b3b0 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -33,8 +33,7 @@ body: attributes: label: Have you searched for an existing open/closed issue? description: | - To help us keep these issues under control, please ensure you have first [searched our issue list](https://github.com/BookStackApp/BookStack/issues?q=is%3Aissue) - for any existing issues that cover the fundemental benefit/goal of your request. + To help us keep these issues under control, please ensure you have first [searched our issue list](https://github.com/BookStackApp/BookStack/issues?q=is%3Aissue) for any existing issues that cover the fundemental benefit/goal of your request. options: - label: I have searched for existing issues and none cover my fundemental request required: true diff --git a/readme.md b/readme.md index 6bc34256a..25c840a62 100644 --- a/readme.md +++ b/readme.md @@ -63,7 +63,7 @@ Below is a high-level road map view for BookStack to provide a sense of directio - **Platform REST API** - *(Most actions implemented, maturing)* - *A REST API covering, at minimum, control of core content models (Books, Chapters, Pages) for automation and platform extension.* -- **Editor Alignment & Review** - *(Started)* +- **Editor Alignment & Review** - *(In Progress)* - *Review the page editors with goal of achieving increased interoperability & feature parity while also considering collaborative editing potential.* - **Permission System Review** - *Improvement in how permissions are applied and a review of the efficiency of the permission & roles system.* diff --git a/resources/js/components/code-editor.js b/resources/js/components/code-editor.js index a8a2c0c6f..f44de813d 100644 --- a/resources/js/components/code-editor.js +++ b/resources/js/components/code-editor.js @@ -59,12 +59,10 @@ class CodeEditor { this.languageInput.value = language; this.callback = callback; - this.show(); - this.updateEditorMode(language); - - window.importVersioned('code').then(Code => { - Code.setContent(this.editor, code); - }); + this.show() + .then(() => this.updateEditorMode(language)) + .then(() => window.importVersioned('code')) + .then(Code => Code.setContent(this.editor, code)); } async show() { diff --git a/resources/js/wysiwyg/plugin-codeeditor.js b/resources/js/wysiwyg/plugin-codeeditor.js index 12b2c25fb..b0640a450 100644 --- a/resources/js/wysiwyg/plugin-codeeditor.js +++ b/resources/js/wysiwyg/plugin-codeeditor.js @@ -91,15 +91,35 @@ function defineCodeBlockCustomElement(editor) { } connectedCallback() { + const connectedTime = Date.now(); if (this.cm) { return; } + this.cleanChildContent(); + const container = this.shadowRoot.querySelector('.CodeMirrorContainer'); - importVersioned('code').then(Code => { + const renderCodeMirror = (Code) => { this.cm = Code.wysiwygView(container, this.getContent(), this.getLanguage()); + Code.updateLayout(this.cm); + }; + + window.importVersioned('code').then((Code) => { + const timeout = (Date.now() - connectedTime < 20) ? 20 : 0; + setTimeout(() => renderCodeMirror(Code), timeout); }); } + + cleanChildContent() { + const pre = this.querySelector('pre'); + if (!pre) return; + + for (const preChild of pre.childNodes) { + if (preChild.nodeName === '#text' && preChild.textContent === '') { + preChild.remove(); + } + } + } } win.customElements.define('code-block', CodeBlockElement); @@ -130,15 +150,13 @@ function register(editor, url) { } else { const textContent = editor.selection.getContent({format: 'text'}); showPopup(editor, textContent, '', (newCode, newLang) => { - const wrap = doc.createElement('code-block'); const pre = doc.createElement('pre'); const code = doc.createElement('code'); code.classList.add(`language-${newLang}`); code.innerText = newCode; pre.append(code); - wrap.append(pre); - editor.insertContent(wrap.outerHTML); + editor.insertContent(pre.outerHTML); }); } }); @@ -168,7 +186,7 @@ function register(editor, url) { editor.parser.addNodeFilter('code-block', function(elms) { for (const el of elms) { - el.attr('content-editable', 'false'); + el.attr('contenteditable', 'false'); } }); diff --git a/resources/lang/zh_CN/editor.php b/resources/lang/zh_CN/editor.php index 4fefa3f1a..5a6fbc708 100644 --- a/resources/lang/zh_CN/editor.php +++ b/resources/lang/zh_CN/editor.php @@ -57,7 +57,7 @@ return [ 'list_numbered' => '有序列表', 'indent_increase' => '增加缩进', 'indent_decrease' => '减少缩进', - 'table' => '表', + 'table' => '表格', 'insert_image' => '插入图片', 'insert_image_title' => '插入/编辑图片', 'insert_link' => '插入/编辑链接', diff --git a/resources/views/pages/edit.blade.php b/resources/views/pages/edit.blade.php index 6d2c3d484..30158e852 100644 --- a/resources/views/pages/edit.blade.php +++ b/resources/views/pages/edit.blade.php @@ -1,7 +1,7 @@ @extends('layouts.base') @section('head') - + @stop @section('body-class', 'flexbox')