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:

committed by
Dave Borowitz

parent
023d79107f
commit
daefed068f
@@ -176,6 +176,13 @@ Supported events:
|
|||||||
function must return true to allow the operation to continue, or
|
function must return true to allow the operation to continue, or
|
||||||
false to prevent it.
|
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]]
|
||||||
=== self.onAction()
|
=== self.onAction()
|
||||||
Register a JavaScript callback to be invoked when the user clicks
|
Register a JavaScript callback to be invoked when the user clicks
|
||||||
|
@@ -21,6 +21,7 @@ import com.google.gerrit.client.info.AccountPreferencesInfo;
|
|||||||
import com.google.gerrit.client.info.ServerInfo;
|
import com.google.gerrit.client.info.ServerInfo;
|
||||||
import com.google.gwt.core.client.JavaScriptObject;
|
import com.google.gwt.core.client.JavaScriptObject;
|
||||||
import com.google.gwt.core.client.JsArray;
|
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.History;
|
||||||
import com.google.gwt.user.client.Window;
|
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) {
|
static final void fireEvent(String event, JavaScriptObject a, JavaScriptObject b) {
|
||||||
JsArray<JavaScriptObject> h = getEventHandlers(event);
|
JsArray<JavaScriptObject> h = getEventHandlers(event);
|
||||||
for (int i = 0; i < h.length(); i++) {
|
for (int i = 0; i < h.length(); i++) {
|
||||||
|
@@ -15,6 +15,7 @@
|
|||||||
package com.google.gerrit.client.change;
|
package com.google.gerrit.client.change;
|
||||||
|
|
||||||
import com.google.gerrit.client.Dispatcher;
|
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.changes.CommentInfo;
|
||||||
import com.google.gerrit.client.diff.DisplaySide;
|
import com.google.gerrit.client.diff.DisplaySide;
|
||||||
import com.google.gerrit.client.ui.CommentLinkProcessor;
|
import com.google.gerrit.client.ui.CommentLinkProcessor;
|
||||||
@@ -82,6 +83,7 @@ class LineComment extends Composite {
|
|||||||
if (info.message() != null) {
|
if (info.message() != null) {
|
||||||
message.setInnerSafeHtml(clp.apply(new SafeHtmlBuilder()
|
message.setInnerSafeHtml(clp.apply(new SafeHtmlBuilder()
|
||||||
.append(info.message().trim()).wikify()));
|
.append(info.message().trim()).wikify()));
|
||||||
|
ApiGlue.fireEvent("comment", message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -17,6 +17,7 @@ package com.google.gerrit.client.change;
|
|||||||
import com.google.gerrit.client.AvatarImage;
|
import com.google.gerrit.client.AvatarImage;
|
||||||
import com.google.gerrit.client.FormatUtil;
|
import com.google.gerrit.client.FormatUtil;
|
||||||
import com.google.gerrit.client.Gerrit;
|
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.CommentInfo;
|
||||||
import com.google.gerrit.client.changes.Util;
|
import com.google.gerrit.client.changes.Util;
|
||||||
import com.google.gerrit.client.info.ChangeInfo.MessageInfo;
|
import com.google.gerrit.client.info.ChangeInfo.MessageInfo;
|
||||||
@@ -96,6 +97,7 @@ class Message extends Composite {
|
|||||||
summary.setInnerText(msg);
|
summary.setInnerText(msg);
|
||||||
message.setInnerSafeHtml(history.getCommentLinkProcessor()
|
message.setInnerSafeHtml(history.getCommentLinkProcessor()
|
||||||
.apply(new SafeHtmlBuilder().append(msg).wikify()));
|
.apply(new SafeHtmlBuilder().append(msg).wikify()));
|
||||||
|
ApiGlue.fireEvent("comment", message);
|
||||||
} else {
|
} else {
|
||||||
reply.getElement().getStyle().setVisibility(Visibility.HIDDEN);
|
reply.getElement().getStyle().setVisibility(Visibility.HIDDEN);
|
||||||
}
|
}
|
||||||
|
@@ -18,6 +18,7 @@ import com.google.gerrit.client.AvatarImage;
|
|||||||
import com.google.gerrit.client.Dispatcher;
|
import com.google.gerrit.client.Dispatcher;
|
||||||
import com.google.gerrit.client.FormatUtil;
|
import com.google.gerrit.client.FormatUtil;
|
||||||
import com.google.gerrit.client.Gerrit;
|
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.change.ReplyBox;
|
||||||
import com.google.gerrit.client.changes.CommentApi;
|
import com.google.gerrit.client.changes.CommentApi;
|
||||||
import com.google.gerrit.client.changes.CommentInfo;
|
import com.google.gerrit.client.changes.CommentInfo;
|
||||||
@@ -100,6 +101,7 @@ class PublishedBox extends CommentBox {
|
|||||||
summary.setInnerText(msg);
|
summary.setInnerText(msg);
|
||||||
message.setInnerSafeHtml(clp.apply(
|
message.setInnerSafeHtml(clp.apply(
|
||||||
new SafeHtmlBuilder().append(msg).wikify()));
|
new SafeHtmlBuilder().append(msg).wikify()));
|
||||||
|
ApiGlue.fireEvent("comment", message);
|
||||||
}
|
}
|
||||||
|
|
||||||
fix.setVisible(open);
|
fix.setVisible(open);
|
||||||
|
Reference in New Issue
Block a user