]> BookStack Code Mirror - bookstack/commitdiff
Comments: Fixed tab focus change & button placement on form usage
authorDan Brown <redacted>
Wed, 28 May 2025 21:00:24 +0000 (22:00 +0100)
committerDan Brown <redacted>
Wed, 28 May 2025 21:00:24 +0000 (22:00 +0100)
Fixes issue of tabs jumping back to active comments when stopping a
reply to an archived comment.
Fixes button placement looking odd due to wrong location and differing
styles depending on interaction path.

resources/js/components/page-comments.ts
resources/views/comments/comments.blade.php

index 94f5ab3bb8e73ead67de167cb1381623e14fa260..5c1cd014c54d8a67a7012e85a693ec0825f9c690 100644 (file)
@@ -16,6 +16,7 @@ export class PageComments extends Component {
     private archivedTab!: HTMLElement;
     private addButtonContainer!: HTMLElement;
     private archiveContainer!: HTMLElement;
+    private activeContainer!: HTMLElement;
     private replyToRow!: HTMLElement;
     private referenceRow!: HTMLElement;
     private formContainer!: HTMLElement;
@@ -48,6 +49,7 @@ export class PageComments extends Component {
         this.archivedTab = this.$refs.archivedTab;
         this.addButtonContainer = this.$refs.addButtonContainer;
         this.archiveContainer = this.$refs.archiveContainer;
+        this.activeContainer = this.$refs.activeContainer;
         this.replyToRow = this.$refs.replyToRow;
         this.referenceRow = this.$refs.referenceRow;
         this.formContainer = this.$refs.formContainer;
@@ -76,8 +78,10 @@ export class PageComments extends Component {
 
     protected setupListeners(): void {
         this.elem.addEventListener('page-comment-delete', () => {
-            setTimeout(() => this.updateCount(), 1);
-            this.hideForm();
+            setTimeout(() => {
+                this.updateCount();
+                this.hideForm();
+            }, 1);
         });
 
         this.elem.addEventListener('page-comment-reply', ((event: CustomEvent<PageCommentReplyEventData>) => {
@@ -154,8 +158,10 @@ export class PageComments extends Component {
     protected resetForm(): void {
         this.removeEditor();
         this.formInput.value = '';
+        this.parentId = null;
+        this.replyToRow.toggleAttribute('hidden', true);
+        this.container.append(this.formContainer);
         this.setContentReference('');
-        this.removeReplyTo();
     }
 
     protected showForm(): void {
@@ -165,9 +171,9 @@ export class PageComments extends Component {
         this.formContainer.scrollIntoView({behavior: 'smooth', block: 'nearest'});
         this.loadEditor();
 
-        // Ensure the active comments tab is displaying
+        // Ensure the active comments tab is displaying if that's where we're showing the form
         const tabs = window.$components.firstOnElement(this.elem, 'tabs');
-        if (tabs instanceof Tabs) {
+        if (tabs instanceof Tabs && this.formContainer.closest('#comment-tab-panel-active')) {
             tabs.show('comment-tab-panel-active');
         }
     }
@@ -176,7 +182,7 @@ export class PageComments extends Component {
         this.resetForm();
         this.formContainer.toggleAttribute('hidden', true);
         if (this.getActiveThreadCount() > 0) {
-            this.elem.append(this.addButtonContainer);
+            this.activeContainer.append(this.addButtonContainer);
         } else {
             this.commentCountBar.append(this.addButtonContainer);
         }
@@ -239,7 +245,8 @@ export class PageComments extends Component {
     }
 
     public startNewComment(contentReference: string): void {
-        this.removeReplyTo();
+        this.resetForm();
+        this.showForm();
         this.setContentReference(contentReference);
     }
 
index 51c08d69a851f8c80238eeb324fc9ebfacfc72ae..f27127e9732c1970d4ff0d977ac3e3c91198a9da 100644 (file)
                     aria-selected="false">{{ trans_choice('entities.comment_archived_count', count($commentTree->getArchived())) }}</button>
         </div>
         @if ($commentTree->empty() && userCan('comment-create-all'))
-            <div class="ml-m" refs="page-comments@add-button-container">
+            <div refs="page-comments@add-button-container" class="ml-m flex-container-row" >
                 <button type="button"
                         refs="page-comments@add-comment-button"
-                        class="button outline mb-m">{{ trans('entities.comment_add') }}</button>
+                        class="button outline mb-m ml-auto">{{ trans('entities.comment_add') }}</button>
             </div>
         @endif
     </div>
 
     <div id="comment-tab-panel-active"
+         refs="page-comments@active-container"
          tabindex="0"
          role="tabpanel"
          aria-labelledby="comment-tab-active"
         @if(userCan('comment-create-all'))
             @include('comments.create')
             @if (!$commentTree->empty())
-                <div refs="page-comments@addButtonContainer" class="flex-container-row">
+                <div refs="page-comments@addButtonContainer" class="ml-m flex-container-row">
                     <button type="button"
                             refs="page-comments@add-comment-button"
-                            class="button outline ml-auto">{{ trans('entities.comment_add') }}</button>
+                            class="button outline mb-m ml-auto">{{ trans('entities.comment_add') }}</button>
                 </div>
             @endif
         @endif
Morty Proxy This is a proxified and sanitized view of the page, visit original site.