Files
gerrit/polygerrit-ui/app/elements/plugins/gr-theme-api/gr-theme-api.js
Viktar Donich 8d36970418 Provide JS API to plugin to replace DOM endpoint content
Allows plugins to replace parts of PolyGerrit with plugin-provided
custom elements that use HTML/CSS for purposes of theming.

Also adds an intent-based API method for replacing logo and title only:

<dom-module id="chromium-style">
  <script>
    Gerrit.install(function(plugin) {
      plugin.theme().setHeaderLogoAndTitle(
          plugin.url('/static/my_logo.png'), 'My Title');
    });
  </script>
</dom-module>

Advanced example: plugin replacing contents of header title section.

<dom-module id="my-style">
  <script>
    Gerrit.install(function(plugin) {
        plugin.registerCustomComponent(
          'header-title', 'my-header', {replace: true});
    });
</script>
</dom-module>

<dom-module id="my-header">
  <template>
    <style>
      /* styles go here */
    </style>
    <span>
      <img src="">
      <span>My Custom Title</span>
    </span>
  </template>
  <script>
    Polymer({is: 'my-header'});
  </script>
</dom-module>

Change-Id: I4c5410ba84891db864f1a5ab733291c1481f4496
2017-07-25 15:56:59 -07:00

35 lines
1.1 KiB
JavaScript

// Copyright (C) 2017 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
(function(window) {
'use strict';
// Prevent redefinition.
if (window.GrThemeApi) { return; }
function GrThemeApi(plugin) {
this.plugin = plugin;
}
GrThemeApi.prototype.setHeaderLogoAndTitle = function(logoUrl, title) {
this.plugin.getDomHook('header-title', {replace: true}).then(element => {
const customHeader = document.createElement('gr-custom-plugin-header');
customHeader.logoUrl = logoUrl;
customHeader.title = title;
element.appendChild(customHeader);
});
};
window.GrThemeApi = GrThemeApi;
})(window);