ae42464225
Instead of this function Gerrit.on('history', f) should be used. gerrit_addHistoryHook(f) is deprecated since Gerrit 2.9. It's time to remove it. Change-Id: I87b23b2d7e404c4a43974d9fff202d11965aad6c Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
142 lines
5.1 KiB
Plaintext
142 lines
5.1 KiB
Plaintext
= Gerrit Code Review - Themes
|
|
|
|
Gerrit supports some customization of the HTML it sends to
|
|
the browser, allowing organizations to alter the look and
|
|
feel of the application to fit with their general scheme.
|
|
|
|
Configuration can either be sitewide or per-project. Projects without a
|
|
specified theme inherit from their parents, or from the sitewide theme
|
|
for `All-Projects`.
|
|
|
|
Sitewide themes are stored in `'$site_path'/etc`, and per-project
|
|
themes are stored in `'$site_path'/themes/{project-name}`. Files are
|
|
only served from a single theme directory; if you want to modify or
|
|
extend an inherited theme, you must copy it into the appropriate
|
|
per-project directory.
|
|
|
|
== HTML Header/Footer
|
|
|
|
At startup Gerrit reads the following files (if they exist) and
|
|
uses them to customize the HTML page it sends to clients:
|
|
|
|
* `<theme-dir>/GerritSiteHeader.html`
|
|
+
|
|
HTML is inserted below the menu bar, but above any page content.
|
|
This is a good location for an organizational logo, or links to
|
|
other systems like bug tracking.
|
|
|
|
* `<theme-dir>/GerritSiteFooter.html`
|
|
+
|
|
HTML is inserted at the bottom of the page, below all other content,
|
|
but just above the footer rule and the "Powered by Gerrit Code
|
|
Review (v....)" message shown at the extreme bottom.
|
|
|
|
* `<theme-dir>/GerritSite.css`
|
|
+
|
|
The CSS rules are inlined into the top of the HTML page, inside
|
|
of a `<style>` tag. These rules can be used to support styling
|
|
the elements within either the header or the footer.
|
|
|
|
The *.html files must be valid XHTML, with one root element,
|
|
typically a single `<div>` tag. The server parses it as XML, and
|
|
then inserts the root element into the host page. If a file has
|
|
more than one root level element, Gerrit will not start.
|
|
|
|
== Static Images
|
|
|
|
Static image files can also be served from `'$site_path'/static`,
|
|
and may be referenced in `GerritSite{Header,Footer}.html`
|
|
or `GerritSite.css` by the relative URL `static/$name`
|
|
(e.g. `static/logo.png`).
|
|
|
|
To simplify security management, files are only served from
|
|
`'$site_path'/static`. Subdirectories are explicitly forbidden from
|
|
being served from this location by enforcing the rule that file names
|
|
cannot contain `/` or `\`. (Client requests for `static/foo/bar`
|
|
will result in 404 Not Found responses.)
|
|
|
|
== HTTP Caching
|
|
|
|
The header, footer, and CSS files are inlined into the host page,
|
|
which is always sent with a no-cache header. Clients will see any
|
|
changes immediately after they are made.
|
|
|
|
Assets under `'$site_path'/static` whose file name matches one of the
|
|
following patterns are served with a 1 year expiration, permitting
|
|
very aggressive caching by clients and edge-proxies:
|
|
|
|
* `*.cache.html`
|
|
* `*.cache.gif`
|
|
* `*.cache.png`
|
|
* `*.cache.css`
|
|
* `*.cache.jar`
|
|
* `*.cache.swf`
|
|
|
|
All other assets under `'$site_path'/static` are served with a 5
|
|
minute expire, permitting some (limited) caching. It may take up
|
|
to 5 minutes after making a change, before clients see the changes.
|
|
|
|
It is recommended that static images used in the site header
|
|
or footer be named with a unique caching file name, for example
|
|
`my_logo1.cache.png`, to allow browsers to take advantage of their
|
|
disk cache. If the image needs to be modified, create a new file,
|
|
`my_logo2.cache.png` and update the header (or footer) HTML to
|
|
reference the new image path.
|
|
|
|
== Google Analytics Integration
|
|
|
|
To connect Gerrit to Google Analytics add the following to your
|
|
`GerritSiteFooter.html`:
|
|
|
|
====
|
|
<div>
|
|
<!-- standard analytics code -->
|
|
<script type="text/javascript">
|
|
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
|
|
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
|
|
</script>
|
|
<script type="text/javascript">
|
|
var pageTracker = _gat._getTracker("UA-nnnnnnn-n");
|
|
pageTracker._trackPageview();
|
|
</script>
|
|
be <!-- /standard analytics code -->
|
|
|
|
<script type="text/javascript">
|
|
window.onload = function() {
|
|
var p = window.location.pathname;
|
|
Gerrit.on('history', function (s) {
|
|
pageTracker._trackPageview(p + '/' + s)
|
|
});
|
|
};
|
|
</script>
|
|
</div>
|
|
====
|
|
|
|
Please consult the Google Analytics documentation for the correct
|
|
setup code (the first two script tags). The above is shown only
|
|
as a reference example.
|
|
|
|
If your footer is otherwise empty, wrap all of the script tags into
|
|
a single `<div>` tag (like above) to ensure it is a well-formed
|
|
XHTML document file.
|
|
|
|
The global function `Gerrit.on("history")` accepts functions that
|
|
accept a string parameter. These functions are put into a list and
|
|
invoked any time Gerrit shifts URLs. You'll see page names like
|
|
`/c/123` be passed to these functions, which in turn are handed off
|
|
to Google Analytics for tracking. Our example hook above uses '/'
|
|
instead of '#' because Analytics won't track anchors.
|
|
|
|
The `window.onload` callback is necessary to ensure that the
|
|
`Gerrit.on()` function has actually been defined by the
|
|
page. Because GWT loads the module asynchronously any `<script>`
|
|
block in the header or footer will execute before Gerrit has defined
|
|
the function and is ready to register the hook callback.
|
|
|
|
GERRIT
|
|
------
|
|
Part of link:index.html[Gerrit Code Review]
|
|
|
|
SEARCHBOX
|
|
---------
|