| = 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_delete]] | 
 | === self.delete() / self.del() | 
 | Issues a DELETE REST API request to the Gerrit server. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | Gerrit.delete(url, callback) | 
 | Gerrit.del(url, callback) | 
 | ---- | 
 |  | 
 | * url: URL relative to the plugin's URL space. The JavaScript | 
 |   library prefixes the supplied URL with `/plugins/{getPluginName}/`. | 
 |  | 
 | * callback: JavaScript function to be invoked with the parsed | 
 |   JSON result of the API call. DELETE methods often return | 
 |   `204 No Content`, which is passed as null. | 
 |  | 
 | [[self_get]] | 
 | === self.get() | 
 | Issues a GET REST API request to the Gerrit server. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | self.get(url, callback) | 
 | ---- | 
 |  | 
 | * url: URL relative to the plugin's URL space. The JavaScript | 
 |   library prefixes the supplied URL with `/plugins/{getPluginName}/`. | 
 |  | 
 | * callback: JavaScript function to be invoked with the parsed JSON | 
 |   result of the API call. If the API returns a string the result is | 
 |   a string, otherwise the result is a JavaScript object or array, | 
 |   as described in the relevant REST API documentation. | 
 |  | 
 | [[self_getServerInfo]] | 
 | === self.getServerInfo() | 
 | Returns the server's link:rest-api-config.html#server-info[ServerInfo] | 
 | data. | 
 |  | 
 | [[self_getCurrentUser]] | 
 | === self.getCurrentUser() | 
 | Returns the currently signed in user's AccountInfo data; empty account | 
 | data if no user is currently signed in. | 
 |  | 
 | [[Gerrit_getUserPreferences]] | 
 | === Gerrit.getUserPreferences() | 
 | Returns the preferences of the currently signed in user; the default | 
 | preferences if no user is currently signed in. | 
 |  | 
 | [[Gerrit_refreshUserPreferences]] | 
 | === Gerrit.refreshUserPreferences() | 
 | Refreshes the preferences of the current user. | 
 |  | 
 | [[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_post]] | 
 | === self.post() | 
 | Issues a POST REST API request to the Gerrit server. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | self.post(url, input, callback) | 
 | ---- | 
 |  | 
 | * url: URL relative to the plugin's URL space. The JavaScript | 
 |   library prefixes the supplied URL with `/plugins/{getPluginName}/`. | 
 |  | 
 | * input: JavaScript object to serialize as the request payload. | 
 |  | 
 | * callback: JavaScript function to be invoked with the parsed JSON | 
 |   result of the API call. If the API returns a string the result is | 
 |   a string, otherwise the result is a JavaScript object or array, | 
 |   as described in the relevant REST API documentation. | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | self.post( | 
 |   '/my-servlet', | 
 |   {start_build: true, platform_type: 'Linux'}, | 
 |   function (r) {}); | 
 | ---- | 
 |  | 
 | [[self_put]] | 
 | === self.put() | 
 | Issues a PUT REST API request to the Gerrit server. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | self.put(url, input, callback) | 
 | ---- | 
 |  | 
 | * url: URL relative to the plugin's URL space. The JavaScript | 
 |   library prefixes the supplied URL with `/plugins/{getPluginName}/`. | 
 |  | 
 | * input: JavaScript object to serialize as the request payload. | 
 |  | 
 | * callback: JavaScript function to be invoked with the parsed JSON | 
 |   result of the API call. If the API returns a string the result is | 
 |   a string, otherwise the result is a JavaScript object or array, | 
 |   as described in the relevant REST API documentation. | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | self.put( | 
 |   '/builds', | 
 |   {start_build: true, platform_type: 'Linux'}, | 
 |   function (r) {}); | 
 | ---- | 
 |  | 
 | [[self_on]] | 
 | === self.on() | 
 | Register a JavaScript callback to be invoked when events occur within | 
 | the web interface. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | Gerrit.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. | 
 |  | 
 | * `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. | 
 |  | 
 | * `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 | 
 | on a button associated with a server side `UiAction`. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | self.onAction(type, view_name, callback); | 
 | ---- | 
 |  | 
 | * type: `'change'`, `'edit'`, `'revision'`, `'project'`, or `'branch'` | 
 |   indicating which type of resource the `UiAction` was bound to | 
 |   in the server. | 
 |  | 
 | * view_name: string appearing in URLs to name the view. This is the | 
 |   second argument of the `get()`, `post()`, `put()`, and `delete()` | 
 |   binding methods in a `RestApiModule`. | 
 |  | 
 | * callback: JavaScript function to invoke when the user clicks. The | 
 |   function will be passed a link:#ActionContext[action context]. | 
 |  | 
 | [[self_screen]] | 
 | === self.screen() | 
 | Register a JavaScript callback to be invoked 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]. | 
 | The callback can populate the DOM with the screen's contents. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | self.screen(pattern, callback); | 
 | ---- | 
 |  | 
 | * 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`. | 
 |  | 
 | * callback: JavaScript function to invoke when the user navigates to | 
 |   the screen. The function will be passed a link:#ScreenContext[screen context]. | 
 |  | 
 | [[self_settingsScreen]] | 
 | === self.settingsScreen() | 
 | Register a JavaScript callback to be invoked when the user navigates | 
 | to an extension settings screen provided by the plugin. Extension settings | 
 | screens are automatically linked from the settings menu under the given | 
 | menu entry. | 
 | The callback can populate the DOM with the screen's contents. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | self.settingsScreen(path, menu, callback); | 
 | ---- | 
 |  | 
 | * path: URL path to identify the settings screen. | 
 |  | 
 | * menu: The name of the menu entry in the settings menu that should | 
 |   link to the settings screen. | 
 |  | 
 | * callback: JavaScript function to invoke when the user navigates to | 
 |   the settings screen. The function will be passed a | 
 |   link:#SettingsScreenContext[settings screen context]. | 
 |  | 
 | [[self_panel]] | 
 | === self.panel() | 
 | Register a JavaScript callback to be invoked when a screen with the | 
 | given extension point is loaded. | 
 | The callback can populate the DOM with the panel's contents. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | self.panel(extensionpoint, callback); | 
 | ---- | 
 |  | 
 | * extensionpoint: The name of the extension point that marks the | 
 |   position where the panel is added to an existing screen. The | 
 |   available extension points are described in the | 
 |   link:dev-plugins.html#panels[plugin development documentation]. | 
 |  | 
 | * callback: JavaScript function to invoke when a screen with the | 
 |   extension point is loaded. The function will be passed a | 
 |   link:#PanelContext[panel context]. | 
 |  | 
 | [[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. | 
 |  | 
 | [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" | 
 | ---- | 
 |  | 
 |  | 
 | [[ActionContext]] | 
 | == Action Context | 
 | A new action context is passed to the `onAction` callback function | 
 | each time the associated action button is clicked by the user. A | 
 | context is initialized with sufficient state to issue the associated | 
 | REST API RPC. | 
 |  | 
 | [[context_action]] | 
 | === context.action | 
 | An link:rest-api-changes.html#action-info[ActionInfo] object instance | 
 | supplied by the server describing the UI button the user used to | 
 | invoke the action. | 
 |  | 
 | [[context_call]] | 
 | === context.call() | 
 | Issues the REST API call associated with the action. The HTTP method | 
 | used comes from `context.action.method`, hiding the JavaScript from | 
 | needing to care. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | context.call(input, callback) | 
 | ---- | 
 |  | 
 | * input: JavaScript object to serialize as the request payload. This | 
 |   parameter is ignored for GET and DELETE methods. | 
 |  | 
 | * callback: JavaScript function to be invoked with the parsed JSON | 
 |   result of the API call. If the API returns a string the result is | 
 |   a string, otherwise the result is a JavaScript object or array, | 
 |   as described in the relevant REST API documentation. | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | context.call( | 
 |   {message: "..."}, | 
 |   function (result) { | 
 |     // ... use result here ... | 
 |   }); | 
 | ---- | 
 |  | 
 | [[context_change]] | 
 | === context.change | 
 | When the action is invoked on a change a | 
 | link:rest-api-changes.html#change-info[ChangeInfo] object instance | 
 | describing the change. Available fields of the ChangeInfo may vary | 
 | based on the options used by the UI when it loaded the change. | 
 |  | 
 | [[context_delete]] | 
 | === context.delete() | 
 | Issues a DELETE REST API call to the URL associated with the action. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | context.delete(callback) | 
 | ---- | 
 |  | 
 | * callback: JavaScript function to be invoked with the parsed | 
 |   JSON result of the API call. DELETE methods often return | 
 |   `204 No Content`, which is passed as null. | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | context.delete(function () {}); | 
 | ---- | 
 |  | 
 | [[context_get]] | 
 | === context.get() | 
 | Issues a GET REST API call to the URL associated with the action. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | context.get(callback) | 
 | ---- | 
 |  | 
 | * callback: JavaScript function to be invoked with the parsed JSON | 
 |   result of the API call. If the API returns a string the result is | 
 |   a string, otherwise the result is a JavaScript object or array, | 
 |   as described in the relevant REST API documentation. | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | context.get(function (result) { | 
 |   // ... use result here ... | 
 | }); | 
 | ---- | 
 |  | 
 | [[context_go]] | 
 | === context.go() | 
 | Go to a screen. Shorthand for link:#Gerrit_go[`Gerrit.go()`]. | 
 |  | 
 | [[context_hide]] | 
 | === context.hide() | 
 | Hide the currently visible popup displayed by | 
 | link:#context_popup[`context.popup()`]. | 
 |  | 
 | [[context_post]] | 
 | === context.post() | 
 | Issues a POST REST API call to the URL associated with the action. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | context.post(input, callback) | 
 | ---- | 
 |  | 
 | * input: JavaScript object to serialize as the request payload. | 
 |  | 
 | * callback: JavaScript function to be invoked with the parsed JSON | 
 |   result of the API call. If the API returns a string the result is | 
 |   a string, otherwise the result is a JavaScript object or array, | 
 |   as described in the relevant REST API documentation. | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | context.post( | 
 |   {message: "..."}, | 
 |   function (result) { | 
 |     // ... use result here ... | 
 |   }); | 
 | ---- | 
 |  | 
 | [[context_popup]] | 
 | === context.popup() | 
 |  | 
 | Displays a small popup near the activation button to gather | 
 | additional input from the user before executing the REST API RPC. | 
 |  | 
 | The caller is always responsible for closing the popup with | 
 | link#context_hide[`context.hide()`]. Gerrit will handle closing a | 
 | popup if the user presses `Escape` while keyboard focus is within | 
 | the popup. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | context.popup(element) | 
 | ---- | 
 |  | 
 | * element: an HTML DOM element to display as the body of the | 
 |   popup. This is typically a `div` element but can be any valid HTML | 
 |   element. CSS can be used to style the element beyond the defaults. | 
 |  | 
 | A common usage is to gather more input: | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | self.onAction('revision', 'start-build', function (c) { | 
 |   var l = c.checkbox(); | 
 |   var m = c.checkbox(); | 
 |   c.popup(c.div( | 
 |     c.div(c.label(l, 'Linux')), | 
 |     c.div(c.label(m, 'Mac OS X')), | 
 |     c.button('Build', {onclick: function() { | 
 |       c.call( | 
 |         { | 
 |           commit: c.revision.name, | 
 |           linux: l.checked, | 
 |           mac: m.checked, | 
 |         }, | 
 |         function() { c.hide() }); | 
 |     }); | 
 | }); | 
 | ---- | 
 |  | 
 | [[context_put]] | 
 | === context.put() | 
 | Issues a PUT REST API call to the URL associated with the action. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | context.put(input, callback) | 
 | ---- | 
 |  | 
 | * input: JavaScript object to serialize as the request payload. | 
 |  | 
 | * callback: JavaScript function to be invoked with the parsed JSON | 
 |   result of the API call. If the API returns a string the result is | 
 |   a string, otherwise the result is a JavaScript object or array, | 
 |   as described in the relevant REST API documentation. | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | context.put( | 
 |   {message: "..."}, | 
 |   function (result) { | 
 |     // ... use result here ... | 
 |   }); | 
 | ---- | 
 |  | 
 | [[context_refresh]] | 
 | === context.refresh() | 
 | Refresh the current display. Shorthand for | 
 | link:#Gerrit_refresh[`Gerrit.refresh()`]. | 
 |  | 
 | [[context_revision]] | 
 | === context.revision | 
 | When the action is invoked on a specific revision of a change, | 
 | a link:rest-api-changes.html#revision-info[RevisionInfo] | 
 | object instance describing the revision. Available fields of the | 
 | RevisionInfo may vary based on the options used by the UI when it | 
 | loaded the change. | 
 |  | 
 | [[context_project]] | 
 | === context.project | 
 | When the action is invoked on a specific project, | 
 | the name of the project. | 
 |  | 
 | === HTML Helpers | 
 | The link:#ActionContext[action context] includes some HTML helper | 
 | functions to make working with DOM based widgets less painful. | 
 |  | 
 | * `br()`: new `<br>` element. | 
 |  | 
 | * `button(label, options)`: new `<button>` with the string `label` | 
 |   wrapped inside of a `div`. The optional `options` object may | 
 |   define `onclick` as a function to be invoked upon clicking. This | 
 |   calling pattern avoids circular references between the element | 
 |   and the onclick handler. | 
 |  | 
 | * `checkbox()`: new `<input type='checkbox'>` element. | 
 | * `div(...)`: a new `<div>` wrapping the (optional) arguments. | 
 | * `hr()`: new `<hr>` element. | 
 |  | 
 | * `label(c, label)`: a new `<label>` element wrapping element `c` | 
 |   and the string `label`. Used to wrap a checkbox with its label, | 
 |   `label(checkbox(), 'Click Me')`. | 
 |  | 
 | * `prependLabel(label, c)`: a new `<label>` element wrapping element `c` | 
 |   and the string `label`. Used to wrap an input field with its label, | 
 |   `prependLabel('Greeting message', textfield())`. | 
 |  | 
 | * `textarea(options)`: new `<textarea>` element. The options | 
 |   object may optionally include `rows` and `cols`. The textarea | 
 |   comes with an onkeypress handler installed to play nicely with | 
 |   Gerrit's keyboard binding system. | 
 |  | 
 | * `textfield()`: new `<input type='text'>` element.  The text field | 
 |   comes with an onkeypress handler installed to play nicely with | 
 |   Gerrit's keyboard binding system. | 
 |  | 
 | * `select(a,i)`: a new `<select>` element containing one `<option>` | 
 |   element for each entry in the provided array `a`.  The option with | 
 |   the index `i` will be pre-selected in the drop-down-list. | 
 |  | 
 | * `selected(s)`: returns the text of the `<option>` element that is | 
 |   currently selected in the provided `<select>` element `s`. | 
 |  | 
 | * `span(...)`: a new `<span>` wrapping the (optional) arguments. | 
 |  | 
 | * `msg(label)`: a new label. | 
 |  | 
 |  | 
 | [[ScreenContext]] | 
 | == Screen Context | 
 | A new screen context is passed to the `screen` callback function | 
 | each time the user navigates to a matching URL. | 
 |  | 
 | [[screen_body]] | 
 | === screen.body | 
 | Empty HTML `<div>` node the plugin should add its content to.  The | 
 | node is already attached to the document, but is invisible.  Plugins | 
 | must call `screen.show()` to display the DOM node.  Deferred display | 
 | allows an implementor to partially populate the DOM, make remote HTTP | 
 | requests, finish populating when the callbacks arrive, and only then | 
 | make the view visible to the user. | 
 |  | 
 | [[screen_token]] | 
 | === screen.token | 
 | URL token fragment that activated this screen.  The value is identical | 
 | to `screen.token_match[0]`.  If the URL is `/#/x/hello/list` the token | 
 | will be `"list"`. | 
 |  | 
 | [[screen_token_match]] | 
 | === screen.token_match | 
 | Array of matching subgroups from the pattern specified to `screen()`. | 
 | This is identical to the result of RegExp.exec. Index 0 contains the | 
 | entire matching expression; index 1 the first matching group, etc. | 
 |  | 
 | [[screen_onUnload]] | 
 | === screen.onUnload() | 
 | Configures an optional callback to be invoked just before the screen | 
 | is deleted from the browser DOM.  Plugins can use this callback to | 
 | remove event listeners from DOM nodes, preventing memory leaks. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | screen.onUnload(callback) | 
 | ---- | 
 |  | 
 | * callback: JavaScript function to be invoked just before the | 
 |   `screen.body` DOM element is removed from the browser DOM. | 
 |   This event happens when the user navigates to another screen. | 
 |  | 
 | [[screen.setTitle]] | 
 | === screen.setTitle() | 
 | Sets the heading text to be displayed when the screen is visible. | 
 | This is presented in a large bold font below the menus, but above the | 
 | content in `screen.body`.  Setting the title also sets the window | 
 | title to the same string, if it has not already been set. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | screen.setPageTitle(titleText) | 
 | ---- | 
 |  | 
 | [[screen.setWindowTitle]] | 
 | === screen.setWindowTitle() | 
 | Sets the text to be displayed in the browser's title bar when the | 
 | screen is visible.  Plugins should always prefer this method over | 
 | trying to set `window.title` directly.  The window title defaults to | 
 | the title given to `setTitle`. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | screen.setWindowTitle(titleText) | 
 | ---- | 
 |  | 
 | [[screen_show]] | 
 | === screen.show() | 
 | Destroy the currently visible screen and display the plugin's screen. | 
 | This method must be called after adding content to `screen.body`. | 
 |  | 
 | [[SettingsScreenContext]] | 
 | == Settings Screen Context | 
 | A new settings screen context is passed to the `settingsScreen` callback | 
 | function each time the user navigates to a matching URL. | 
 |  | 
 | [[settingsScreen_body]] | 
 | === settingsScreen.body | 
 | Empty HTML `<div>` node the plugin should add its content to.  The | 
 | node is already attached to the document, but is invisible.  Plugins | 
 | must call `settingsScreen.show()` to display the DOM node.  Deferred | 
 | display allows an implementor to partially populate the DOM, make | 
 | remote HTTP requests, finish populating when the callbacks arrive, and | 
 | only then make the view visible to the user. | 
 |  | 
 | [[settingsScreen_onUnload]] | 
 | === settingsScreen.onUnload() | 
 | Configures an optional callback to be invoked just before the screen | 
 | is deleted from the browser DOM.  Plugins can use this callback to | 
 | remove event listeners from DOM nodes, preventing memory leaks. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | settingsScreen.onUnload(callback) | 
 | ---- | 
 |  | 
 | * callback: JavaScript function to be invoked just before the | 
 |   `settingsScreen.body` DOM element is removed from the browser DOM. | 
 |   This event happens when the user navigates to another screen. | 
 |  | 
 | [[settingsScreen.setTitle]] | 
 | === settingsScreen.setTitle() | 
 | Sets the heading text to be displayed when the screen is visible. | 
 | This is presented in a large bold font below the menus, but above the | 
 | content in `settingsScreen.body`. Setting the title also sets the | 
 | window title to the same string, if it has not already been set. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | settingsScreen.setPageTitle(titleText) | 
 | ---- | 
 |  | 
 | [[settingsScreen.setWindowTitle]] | 
 | === settingsScreen.setWindowTitle() | 
 | Sets the text to be displayed in the browser's title bar when the | 
 | screen is visible.  Plugins should always prefer this method over | 
 | trying to set `window.title` directly.  The window title defaults to | 
 | the title given to `setTitle`. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | settingsScreen.setWindowTitle(titleText) | 
 | ---- | 
 |  | 
 | [[settingsScreen_show]] | 
 | === settingsScreen.show() | 
 | Destroy the currently visible screen and display the plugin's screen. | 
 | This method must be called after adding content to | 
 | `settingsScreen.body`. | 
 |  | 
 | [[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() | 
 | 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. | 
 | See link:#Gerrit_html[`Gerrit.html()`] for an easy way to use | 
 | generated class names. | 
 |  | 
 | 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_delete]] | 
 | === Gerrit.delete() | 
 | Issues a DELETE REST API request to the Gerrit server. For plugin | 
 | private REST API URLs see link:#self_delete[self.delete()]. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | Gerrit.delete(url, callback) | 
 | ---- | 
 |  | 
 | * url: URL relative to the Gerrit server. For example to access the | 
 |   link:rest-api-changes.html[changes REST API] use `'/changes/'`. | 
 |  | 
 | * callback: JavaScript function to be invoked with the parsed | 
 |   JSON result of the API call. DELETE methods often return | 
 |   `204 No Content`, which is passed as null. | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | Gerrit.delete( | 
 |   '/changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/topic', | 
 |   function () {}); | 
 | ---- | 
 |  | 
 | [[Gerrit_get]] | 
 | === Gerrit.get() | 
 | Issues a GET REST API request to the Gerrit server. For plugin | 
 | private REST API URLs see link:#self_get[self.get()]. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | Gerrit.get(url, callback) | 
 | ---- | 
 |  | 
 | * url: URL relative to the Gerrit server. For example to access the | 
 |   link:rest-api-changes.html[changes REST API] use `'/changes/'`. | 
 |  | 
 | * callback: JavaScript function to be invoked with the parsed JSON | 
 |   result of the API call. If the API returns a string the result is | 
 |   a string, otherwise the result is a JavaScript object or array, | 
 |   as described in the relevant REST API documentation. | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | Gerrit.get('/changes/?q=status:open', function (open) { | 
 |   for (var i = 0; i < open.length; i++) { | 
 |     console.log(open[i].change_id); | 
 |   } | 
 | }); | 
 | ---- | 
 |  | 
 | [[Gerrit_getCurrentUser]] | 
 | === Gerrit.getCurrentUser() | 
 | Returns the currently signed in user's AccountInfo data; empty account | 
 | data if no user is currently signed in. | 
 |  | 
 | [[Gerrit_getPluginName]] | 
 | === Gerrit.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. | 
 |  | 
 | Unlike link:#self_getPluginName[`self.getPluginName()`] this method | 
 | must guess the name from the JavaScript call stack. Plugins are | 
 | encouraged to use `self.getPluginName()` whenever possible. | 
 |  | 
 | [[Gerrit_go]] | 
 | === Gerrit.go() | 
 | Updates the web UI to display the screen identified by the supplied | 
 | URL token. The URL token is the text after `#` in the browser URL. | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | Gerrit.go('/admin/projects/'); | 
 | ---- | 
 |  | 
 | If the URL passed matches `http://...`, `https://...`, or `//...` | 
 | the current browser window will navigate to the non-Gerrit URL. | 
 | The user can return to Gerrit with the back button. | 
 |  | 
 | [[Gerrit_html]] | 
 | === Gerrit.html() | 
 | Parses an HTML fragment after performing template replacements.  If | 
 | the HTML has a single root element or node that node is returned, | 
 | otherwise it is wrapped inside a `<div>` and the div is returned. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | Gerrit.html(htmlText, options, wantElements); | 
 | ---- | 
 |  | 
 | * htmlText: string of HTML to be parsed.  A new unattached `<div>` is | 
 |   created in the browser's document and the innerHTML property is | 
 |   assigned to the passed string, after performing replacements.  If | 
 |   the div has exactly one child, that child will be returned instead | 
 |   of the div. | 
 |  | 
 | * options: optional object reference supplying replacements for any | 
 |   `{name}` references in htmlText.  Navigation through objects is | 
 |   supported permitting `{style.bar}` to be replaced with `"foo"` if | 
 |   options was `{style: {bar: "foo"}}`.  Value replacements are HTML | 
 |   escaped before being inserted into the document fragment. | 
 |  | 
 | * wantElements: if options is given and wantElements is also true | 
 |   an object consisting of `{root: parsedElement, elements: {...}}` is | 
 |   returned instead of the parsed element. The elements object contains | 
 |   a property for each element using `id={name}` in htmlText. | 
 |  | 
 | .Example | 
 | [source,javascript] | 
 | ---- | 
 | var style = {bar: Gerrit.css('background: yellow')}; | 
 | Gerrit.html( | 
 |   '<span class="{style.bar}">Hello {name}!</span>', | 
 |   {style: style, name: "World"}); | 
 | ---- | 
 |  | 
 | Event handlers can be automatically attached to elements referenced | 
 | through an attribute id.  Object navigation is not supported for ids, | 
 | and the parser strips the id attribute before returning the result. | 
 | Handler functions must begin with `on` and be a function to be | 
 | installed on the element.  This approach is useful for onclick and | 
 | other handlers that do not want to create circular references that | 
 | will eventually leak browser memory. | 
 |  | 
 | .Example | 
 | [source,javascript] | 
 | ---- | 
 | var options = { | 
 |   link: { | 
 |     onclick: function(e) { window.close() }, | 
 |   }, | 
 | }; | 
 | Gerrit.html('<a href="javascript:;" id="{link}">Close</a>', options); | 
 | ---- | 
 |  | 
 | When using options to install handlers care must be taken to not | 
 | accidentally include the returned element into the event handler's | 
 | closure.  This is why options is built before calling `Gerrit.html()` | 
 | and not inline as a shown above with "Hello World". | 
 |  | 
 | DOM nodes can optionally be returned, allowing handlers to access the | 
 | elements identified by `id={name}` at a later point in time. | 
 |  | 
 | .Example | 
 | [source,javascript] | 
 | ---- | 
 | var w = Gerrit.html( | 
 |     '<div>Name: <input type="text" id="{name}"></div>' | 
 |   + '<div>Age: <input type="text" id="{age}"></div>' | 
 |   + '<button id="{submit}"><div>Save</div></button>', | 
 |   { | 
 |     submit: { | 
 |       onclick: function(s) { | 
 |         var e = w.elements; | 
 |         window.alert(e.name.value + " is " + e.age.value); | 
 |       }, | 
 |     }, | 
 |   }, true); | 
 | ---- | 
 |  | 
 | To prevent memory leaks `w.root` and `w.elements` should be set to | 
 | null when the elements are no longer necessary.  Screens can use | 
 | link:#screen_onUnload[screen.onUnload()] to define a callback function | 
 | to perform this cleanup: | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | var w = Gerrit.html(...); | 
 | screen.body.appendElement(w.root); | 
 | screen.onUnload(function() { w.clear() }); | 
 | ---- | 
 |  | 
 | [[Gerrit_injectCss]] | 
 | === Gerrit.injectCss() | 
 | Injects CSS rules into the document by appending onto the end of the | 
 | existing rule list.  CSS rules are global to the entire application | 
 | and must be manually scoped by each plugin.  For an automatic scoping | 
 | alternative see link:#Gerrit_css[`css()`]. | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | Gerrit.injectCss('.myplugin_bg {background: #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_post]] | 
 | === Gerrit.post() | 
 | Issues a POST REST API request to the Gerrit server. For plugin | 
 | private REST API URLs see link:#self_post[self.post()]. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | Gerrit.post(url, input, callback) | 
 | ---- | 
 |  | 
 | * url: URL relative to the Gerrit server. For example to access the | 
 |   link:rest-api-changes.html[changes REST API] use `'/changes/'`. | 
 |  | 
 | * input: JavaScript object to serialize as the request payload. | 
 |  | 
 | * callback: JavaScript function to be invoked with the parsed JSON | 
 |   result of the API call. If the API returns a string the result is | 
 |   a string, otherwise the result is a JavaScript object or array, | 
 |   as described in the relevant REST API documentation. | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | Gerrit.post( | 
 |   '/changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/topic', | 
 |   {topic: 'tests', message: 'Classify work as for testing.'}, | 
 |   function (r) {}); | 
 | ---- | 
 |  | 
 | [[Gerrit_put]] | 
 | === Gerrit.put() | 
 | Issues a PUT REST API request to the Gerrit server. For plugin | 
 | private REST API URLs see link:#self_put[self.put()]. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | Gerrit.put(url, input, callback) | 
 | ---- | 
 |  | 
 | * url: URL relative to the Gerrit server. For example to access the | 
 |   link:rest-api-changes.html[changes REST API] use `'/changes/'`. | 
 |  | 
 | * input: JavaScript object to serialize as the request payload. | 
 |  | 
 | * callback: JavaScript function to be invoked with the parsed JSON | 
 |   result of the API call. If the API returns a string the result is | 
 |   a string, otherwise the result is a JavaScript object or array, | 
 |   as described in the relevant REST API documentation. | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | Gerrit.put( | 
 |   '/changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/topic', | 
 |   {topic: 'tests', message: 'Classify work as for testing.'}, | 
 |   function (r) {}); | 
 | ---- | 
 |  | 
 | [[Gerrit_onAction]] | 
 | === Gerrit.onAction() | 
 | Register a JavaScript callback to be invoked when the user clicks | 
 | on a button associated with a server side `UiAction`. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | Gerrit.onAction(type, view_name, callback); | 
 | ---- | 
 |  | 
 | * type: `'change'`, `'edit'`, `'revision'`, `'project'` or `'branch'` | 
 |   indicating what sort of resource the `UiAction` was bound to in the server. | 
 |  | 
 | * view_name: string appearing in URLs to name the view. This is the | 
 |   second argument of the `get()`, `post()`, `put()`, and `delete()` | 
 |   binding methods in a `RestApiModule`. | 
 |  | 
 | * callback: JavaScript function to invoke when the user clicks. The | 
 |   function will be passed a link:#ActionContext[ActionContext]. | 
 |  | 
 | [[Gerrit_screen]] | 
 | === Gerrit.screen() | 
 | Register a JavaScript callback to be invoked 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]. | 
 | The callback can populate the DOM with the screen's contents. | 
 |  | 
 | .Signature | 
 | [source,javascript] | 
 | ---- | 
 | Gerrit.screen(pattern, callback); | 
 | ---- | 
 |  | 
 | * 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`. | 
 |  | 
 | * callback: JavaScript function to invoke when the user navigates to | 
 |   the screen. The function will be passed link:#ScreenContext[screen context]. | 
 |  | 
 | [[Gerrit_refresh]] | 
 | === Gerrit.refresh() | 
 | Redisplays the current web UI view, refreshing all information. | 
 |  | 
 | [[Gerrit_refreshMenuBar]] | 
 | === Gerrit.refreshMenuBar() | 
 | Refreshes Gerrit's menu bar. | 
 |  | 
 | [[Gerrit_isSignedIn]] | 
 | === Gerrit.isSignedIn() | 
 | Checks if user is signed in. | 
 |  | 
 | [[Gerrit_url]] | 
 | === Gerrit.url() | 
 | Returns the URL of the Gerrit Code Review server. If invoked with | 
 | no parameter the URL of the site is returned. If passed a string | 
 | the argument is appended to the site URL. | 
 |  | 
 | [source,javascript] | 
 | ---- | 
 | Gerrit.url();        // "https://gerrit-review.googlesource.com/" | 
 | Gerrit.url('/123');  // "https://gerrit-review.googlesource.com/123" | 
 | ---- | 
 |  | 
 | For a plugin specific version see link:#self_url()[`self.url()`]. | 
 |  | 
 | [[Gerrit_showError]] | 
 | === Gerrit.showError(message) | 
 | Displays the given message in the Gerrit ErrorDialog. | 
 |  | 
 | GERRIT | 
 | ------ | 
 | Part of link:index.html[Gerrit Code Review] | 
 |  | 
 | SEARCHBOX | 
 | --------- |