| = Gerrit Code Review - JavaScript API | 
 |  | 
 | Gerrit Code Review supports an API for JavaScript plugins to interact | 
 | with the web UI and the server process. | 
 |  | 
 | == Entry Point | 
 |  | 
 | JavaScript is loaded using a standard `<script src='...'>` HTML tag. | 
 | Plugins should protect the global namespace by defining their code | 
 | within an anonymous function passed to `Gerrit.install()`. The plugin | 
 | will be passed an object describing its registration with Gerrit: | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | Gerrit.install(function (self) { | 
 |   // ... plugin JavaScript code here ... | 
 | }); | 
 | ---- | 
 |  | 
 |  | 
 | [[self]] | 
 | == Plugin Instance | 
 |  | 
 | The plugin instance is passed to the plugin's initialization function | 
 | and provides a number of utility services to plugin authors. | 
 |  | 
 | [[self_getServerInfo]] | 
 | === self.getServerInfo() | 
 | Returns the server's link:rest-api-config.html#server-info[ServerInfo] | 
 | data. | 
 |  | 
 | [[self_getPluginName]] | 
 | === self.getPluginName() | 
 | Returns the name this plugin was installed as by the server | 
 | administrator. The plugin name is required to access REST API | 
 | views installed by the plugin, or to access resources. | 
 |  | 
 | [[self_on]] | 
 | === self.on() | 
 | Register a JavaScript callback to be invoked when events occur within | 
 | the web interface. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | self.on(event, callback); | 
 | ---- | 
 |  | 
 | * event: A supported event type. See below for description. | 
 |  | 
 | * callback: JavaScript function to be invoked when event happens. | 
 |   Arguments may be passed to this function, depending on the event. | 
 |  | 
 | Supported events: | 
 |  | 
 | * `history`: Invoked when the view is changed to a new screen within | 
 |   the Gerrit web application.  The token after "#" is passed as the | 
 |   argument to the callback function, for example "/c/42/" while | 
 |   showing change 42. | 
 |  | 
 | * `showchange`: Invoked when a change is made visible. A | 
 |   link:rest-api-changes.html#change-info[ChangeInfo] and | 
 |   link:rest-api-changes.html#revision-info[RevisionInfo] | 
 |   are passed as arguments. PolyGerrit provides a third parameter which | 
 |   is an object with a `mergeable` boolean. | 
 |  | 
 | * `submitchange`: Invoked when the submit button is clicked | 
 |   on a change. A link:rest-api-changes.html#change-info[ChangeInfo] | 
 |   and link:rest-api-changes.html#revision-info[RevisionInfo] are | 
 |   passed as arguments. Similar to a form submit validation, the | 
 |   function must return true to allow the operation to continue, or | 
 |   false to prevent it. The function may be called multiple times, for | 
 |   example, if submitting a change shows a confirmation dialog, this | 
 |   event may be called to validate that the check whether dialog can be | 
 |   shown, and called again when the submit is confirmed to check whether | 
 |   the actual submission action can proceed. | 
 |  | 
 | * `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. | 
 |  | 
 | * `highlightjs-loaded`: Invoked when the highlight.js library has | 
 |   finished loading. The global `hljs` object (also now accessible via | 
 |   `window.hljs`) is passed as an argument to the callback function. | 
 |   This event can be used to register a new language highlighter with | 
 |   the highlight.js library before syntax highlighting begins. | 
 |  | 
 | [[self_changeActions]] | 
 | === self.changeActions() | 
 | Returns an instance of ChangeActions API. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | self.changeActions(); | 
 | ---- | 
 |  | 
 | [[self_screen]] | 
 | === self.screen() | 
 | Register a module to be attached when the user navigates | 
 | to an extension screen provided by the plugin. Extension screens are | 
 | usually linked from the link:dev-plugins.html#top-menu-extensions[top menu]. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | self.screen(pattern, opt_moduleName); | 
 | ---- | 
 |  | 
 | * pattern: URL token pattern to identify the screen. Argument can be | 
 |   either a string (`'index'`) or a RegExp object (`/list\/(.*)/`). | 
 |   If a RegExp is used the matching groups will be available inside of | 
 |   the context as `token_match`. | 
 |  | 
 | * opt_moduleName: The module to load when the user navigates to | 
 |   the screen. The function will be passed a link:#ScreenContext[screen context]. | 
 |  | 
 | [[self_settings]] | 
 | === self.settings() | 
 | Returns the Settings API. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | self.settings(); | 
 | ---- | 
 |  | 
 | [[self_registerCustomComponent]] | 
 | === self.registerCustomComponent() | 
 | Register a custom component to a specific endpoint. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | self.registerCustomComponent(endpointName, opt_moduleName, opt_options); | 
 | ---- | 
 |  | 
 | * endpointName: The endpoint this plugin should be reigistered to. | 
 |  | 
 | * opt_moduleName: The module name the custom component will use. | 
 |  | 
 | * opt_options: Options to register this custom component. | 
 |  | 
 | [[self_url]] | 
 | === self.url() | 
 | Returns a URL within the plugin's URL space. If invoked with no | 
 | parameter the URL of the plugin is returned. If passed a string | 
 | the argument is appended to the plugin URL. | 
 |  | 
 | A plugin's URL is where this plugin is loaded, it doesn't | 
 | necessary to be the same as the Gerrit host. Use `window.location` | 
 | if you need to access the Gerrit host info. | 
 |  | 
 | For preloaded plugins, the plugin url is based on a global | 
 | configuration of where to load all plugins, default to current host. | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | self.url();                    // "https://gerrit-review.googlesource.com/plugins/demo/" | 
 | self.url('/static/icon.png');  // "https://gerrit-review.googlesource.com/plugins/demo/static/icon.png" | 
 | ---- | 
 |  | 
 | [[self_restApi]] | 
 | === self.restApi() | 
 | Returns an instance of the Plugin REST API. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | self.restApi(prefix_url) | 
 | ---- | 
 |  | 
 | * prefix_url: Base url for subsequent .get(), .post() etc requests. | 
 |  | 
 | [[PluginRestAPI]] | 
 | == Plugin Rest API | 
 |  | 
 | [[plugin_rest_delete]] | 
 | === restApi.delete() | 
 | Issues a DELETE REST API request to the Gerrit server. | 
 | Returns a promise with the response of the request. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | restApi.delete(url) | 
 | ---- | 
 |  | 
 | * url: URL relative to the base url. | 
 |  | 
 | [[plugin_rest_get]] | 
 | === restApi.get() | 
 | Issues a GET REST API request to the Gerrit server. | 
 | Returns a promise with the response of the request. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | restApi.get(url) | 
 | ---- | 
 |  | 
 | * url: URL relative to the base url. | 
 |  | 
 | [[plugin_rest_post]] | 
 | === restApi.post() | 
 | Issues a POST REST API request to the Gerrit server. | 
 | Returns a promise with the response of the request. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | restApi.post(url, opt_payload, opt_errFn, opt_contentType) | 
 | ---- | 
 |  | 
 | * url: URL relative to the base url. | 
 |  | 
 | * opt_payload: JavaScript object to serialize as the request payload. | 
 |  | 
 | * opt_errFn: JavaScript function to be invoked when error occured. | 
 |  | 
 | * opt_contentType: Content-Type to be sent along with the request. | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | restApi.post( | 
 |   '/my-servlet', | 
 |   {start_build: true, platform_type: 'Linux'}); | 
 | ---- | 
 |  | 
 | [[plugin_rest_put]] | 
 | === restApi.put() | 
 | Issues a PUT REST API request to the Gerrit server. | 
 | Returns a promise with the response of the request. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | restApi.put(url, opt_payload, opt_errFn, opt_contentType) | 
 | ---- | 
 |  | 
 | * url: URL relative to the base url. | 
 |  | 
 | * opt_payload: JavaScript object to serialize as the request payload. | 
 |  | 
 | * opt_errFn: JavaScript function to be invoked when error occured. | 
 |  | 
 | * opt_contentType: Content-Type to be sent along with the request. | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | restApi.put( | 
 |   '/builds', | 
 |   {start_build: true, platform_type: 'Linux'}); | 
 | ---- | 
 |  | 
 | [[ChangeActions]] | 
 | == Change Actions API | 
 | A new Change Actions API instance will be created when `changeActions()` | 
 | is invoked. | 
 |  | 
 | [[change_actions_add]] | 
 | === changeActions.add() | 
 | Adds a new action to the change actions section. | 
 | Returns the key of the newly added action. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | changeActions.add(type, label) | 
 | ---- | 
 |  | 
 | * type: The type of the action, either `change` or `revision`. | 
 |  | 
 | * label: The label to be used in UI for this action. | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | changeActions.add("change", "test") | 
 | ---- | 
 |  | 
 | [[change_actions_remove]] | 
 | === changeActions.remove() | 
 | Removes an action from the change actions section. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | changeActions.remove(key) | 
 | ---- | 
 |  | 
 | * key: The key of the action. | 
 |  | 
 | [[change_actions_addTapListener]] | 
 | === changeActions.addTapListener() | 
 | Adds a tap listener to an action that will be invoked when the action | 
 | is tapped. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | changeActions.addTapListener(key, callback) | 
 | ---- | 
 |  | 
 | * key: The key of the action. | 
 |  | 
 | * callback: JavaScript function to be invoked when action tapped. | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | changeActions.addTapListener("__key_for_my_action__", () => { | 
 |   // do something when my action gets clicked | 
 | }) | 
 | ---- | 
 |  | 
 | [[change_actions_removeTapListener]] | 
 | === changeActions.removeTapListener() | 
 | Removes an existing tap listener on an action. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | changeActions.removeTapListener(key, callback) | 
 | ---- | 
 |  | 
 | * key: The key of the action. | 
 |  | 
 | * callback: JavaScript function to be removed. | 
 |  | 
 | [[change_actions_setLabel]] | 
 | === changeActions.setLabel() | 
 | Sets the label for an action. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | changeActions.setLabel(key, label) | 
 | ---- | 
 |  | 
 | * key: The key of the action. | 
 |  | 
 | * label: The label of the action. | 
 |  | 
 | [[change_actions_setTitle]] | 
 | === changeActions.setTitle() | 
 | Sets the title for an action. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | changeActions.setTitle(key, title) | 
 | ---- | 
 |  | 
 | * key: The key of the action. | 
 |  | 
 | * title: The title of the action. | 
 |  | 
 | [[change_actions_setIcon]] | 
 | === changeActions.setIcon() | 
 | Sets an icon for an action. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | changeActions.setIcon(key, icon) | 
 | ---- | 
 |  | 
 | * key: The key of the action. | 
 |  | 
 | * icon: The name of the icon. | 
 |  | 
 | [[change_actions_setEnabled]] | 
 | === changeActions.setEnabled() | 
 | Sets an action to enabled or disabled. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | changeActions.setEnabled(key, enabled) | 
 | ---- | 
 |  | 
 | * key: The key of the action. | 
 |  | 
 | * enabled: The status of the action, true to enable. | 
 |  | 
 | [[change_actions_setActionHidden]] | 
 | === changeActions.setActionHidden() | 
 | Sets an action to be hidden. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | changeActions.setActionHidden(type, key, hidden) | 
 | ---- | 
 |  | 
 | * type: The type of the action. | 
 |  | 
 | * key: The key of the action. | 
 |  | 
 | * hidden: True to hide the action, false to show the action. | 
 |  | 
 | [[change_actions_setActionOverflow]] | 
 | === changeActions.setActionOverflow() | 
 | Sets an action to show in overflow menu. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | changeActions.setActionOverflow(type, key, overflow) | 
 | ---- | 
 |  | 
 | * type: The type of the action. | 
 |  | 
 | * key: The key of the action. | 
 |  | 
 | * overflow: True to move the action to overflow menu, false to move | 
 |   the action out of the overflow menu. | 
 |  | 
 | [[PanelContext]] | 
 | == Panel Context | 
 | A new panel context is passed to the `panel` callback function each | 
 | time a screen with the given extension point is loaded. | 
 |  | 
 | [[panel_body]] | 
 | === panel.body | 
 | Empty HTML `<div>` node the plugin should add the panel content to. | 
 | The node is already attached to the document. | 
 |  | 
 | [[PanelProperties]] | 
 | === Properties | 
 |  | 
 | The extension panel parameters that are described in the | 
 | link:dev-plugins.html#panels[plugin development documentation] are | 
 | contained in the context as properties. Which properties are available | 
 | depends on the extension point. | 
 |  | 
 | [[Gerrit]] | 
 | == Gerrit | 
 |  | 
 | The `Gerrit` object is the only symbol provided into the global | 
 | namespace by Gerrit Code Review. All top-level functions can be | 
 | accessed through this name. | 
 |  | 
 | [[Gerrit_css]] | 
 | === Gerrit.css() | 
 | [WARNING] | 
 | This method is deprecated. It doesn't work with Shadow DOM and | 
 | will be removed in the future. Please, use link:pg-plugin-dev.html#plugin-styles[plugin.styles] instead. | 
 |  | 
 | Creates a new unique CSS class and injects it into the document. | 
 | The name of the class is returned and can be used by the plugin. | 
 |  | 
 | Classes created with this function should be created once at install | 
 | time and reused throughout the plugin.  Repeatedly creating the same | 
 | class will explode the global stylesheet. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | Gerrit.install(function(self)) { | 
 |   var style = { | 
 |     name: Gerrit.css('background: #fff; color: #000;'), | 
 |   }; | 
 | }); | 
 | ---- | 
 |  | 
 | [[Gerrit_install]] | 
 | === Gerrit.install() | 
 | Registers a new plugin by invoking the supplied initialization | 
 | function. The function is passed the link:#self[plugin instance]. | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | Gerrit.install(function (self) { | 
 |   // ... plugin JavaScript code here ... | 
 | }); | 
 | ---- | 
 |  | 
 | GERRIT | 
 | ------ | 
 | Part of link:index.html[Gerrit Code Review] | 
 |  | 
 | SEARCHBOX | 
 | --------- |