Add JavaScript extension point for comments

Plugins can register a JavaScript function that is invoked whenever a
DOM element that represents a comment is created. This DOM element is
passed as argument. This allows the plugin to manipulate the DOM
element, e.g. it can insert images for emoticons or render Markdown.

Change-Id: Ia4f689b0f39ec57ba6835fc4e6a0b32b11c26b07
Signed-off-by: Edwin Kempin <ekempin@google.com>
This commit is contained in:
Edwin Kempin 2015-12-22 16:22:44 +01:00 committed by Dave Borowitz
parent 023d79107f
commit daefed068f
5 changed files with 21 additions and 0 deletions

View File

@ -176,6 +176,13 @@ Supported events:
function must return true to allow the operation to continue, or
false to prevent it.
* `comment`: Invoked when a DOM element that represents a comment is
created. This DOM element is passed as argument. This DOM element
contains nested elements that Gerrit uses to format the comment. The
DOM structure may differ between comment types such as inline
comments, file-level comments and summary comments, and it may change
with new Gerrit versions.
[[self_onAction]]
=== self.onAction()
Register a JavaScript callback to be invoked when the user clicks

View File

@ -21,6 +21,7 @@ import com.google.gerrit.client.info.AccountPreferencesInfo;
import com.google.gerrit.client.info.ServerInfo;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArray;
import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.Window;
@ -296,6 +297,13 @@ public class ApiGlue {
}
}
public static final void fireEvent(String event, Element e) {
JsArray<JavaScriptObject> h = getEventHandlers(event);
for (int i = 0; i < h.length(); i++) {
invoke(h.get(i), e);
}
}
static final void fireEvent(String event, JavaScriptObject a, JavaScriptObject b) {
JsArray<JavaScriptObject> h = getEventHandlers(event);
for (int i = 0; i < h.length(); i++) {

View File

@ -15,6 +15,7 @@
package com.google.gerrit.client.change;
import com.google.gerrit.client.Dispatcher;
import com.google.gerrit.client.api.ApiGlue;
import com.google.gerrit.client.changes.CommentInfo;
import com.google.gerrit.client.diff.DisplaySide;
import com.google.gerrit.client.ui.CommentLinkProcessor;
@ -82,6 +83,7 @@ class LineComment extends Composite {
if (info.message() != null) {
message.setInnerSafeHtml(clp.apply(new SafeHtmlBuilder()
.append(info.message().trim()).wikify()));
ApiGlue.fireEvent("comment", message);
}
}

View File

@ -17,6 +17,7 @@ package com.google.gerrit.client.change;
import com.google.gerrit.client.AvatarImage;
import com.google.gerrit.client.FormatUtil;
import com.google.gerrit.client.Gerrit;
import com.google.gerrit.client.api.ApiGlue;
import com.google.gerrit.client.changes.CommentInfo;
import com.google.gerrit.client.changes.Util;
import com.google.gerrit.client.info.ChangeInfo.MessageInfo;
@ -96,6 +97,7 @@ class Message extends Composite {
summary.setInnerText(msg);
message.setInnerSafeHtml(history.getCommentLinkProcessor()
.apply(new SafeHtmlBuilder().append(msg).wikify()));
ApiGlue.fireEvent("comment", message);
} else {
reply.getElement().getStyle().setVisibility(Visibility.HIDDEN);
}

View File

@ -18,6 +18,7 @@ import com.google.gerrit.client.AvatarImage;
import com.google.gerrit.client.Dispatcher;
import com.google.gerrit.client.FormatUtil;
import com.google.gerrit.client.Gerrit;
import com.google.gerrit.client.api.ApiGlue;
import com.google.gerrit.client.change.ReplyBox;
import com.google.gerrit.client.changes.CommentApi;
import com.google.gerrit.client.changes.CommentInfo;
@ -100,6 +101,7 @@ class PublishedBox extends CommentBox {
summary.setInnerText(msg);
message.setInnerSafeHtml(clp.apply(
new SafeHtmlBuilder().append(msg).wikify()));
ApiGlue.fireEvent("comment", message);
}
fix.setVisible(open);