Add an event to open reply dialog

This will allow inner components or plugins to
open reply dialog when needed.

Change-Id: I0bef453e83899c9e519f5c1a017f6240b8928de4
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js
index ddaf82d..1cd9f3f 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js
@@ -476,6 +476,9 @@
 
     this.addEventListener('diff-comments-modified',
         () => this._handleReloadCommentThreads());
+
+    this.addEventListener('open-reply-dialog',
+        e => this._openReplyDialog());
   }
 
   /** @override */
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.js b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.js
index 6bb15c5..ff8cbac 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.js
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.js
@@ -1726,6 +1726,20 @@
           })));
     });
 
+    test('show reply dialog on open-reply-dialog event', done => {
+      sinon.stub(element, '_openReplyDialog');
+      element.dispatchEvent(
+          new CustomEvent('open-reply-dialog', {
+            composed: true,
+            bubbles: true,
+            detail: {},
+          }));
+      flush(() => {
+        assert.isTrue(element._openReplyDialog.calledOnce);
+        done();
+      });
+    });
+
     test('reply from comment adds quote text', () => {
       const e = {detail: {message: {message: 'quote text'}}};
       element._handleMessageReply(e);