77 lines
2.4 KiB
JavaScript
77 lines
2.4 KiB
JavaScript
// Copyright (C) 2016 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';
|
||
|
||
// GWT JSNI uses $wnd to refer to window.
|
||
// http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html
|
||
window.$wnd = window;
|
||
|
||
function Plugin(opt_url) {
|
||
this._url = new URL(opt_url);
|
||
if (this._url.pathname.indexOf('/plugins') !== 0) {
|
||
console.warn('Plugin not being loaded from /plugins base path:',
|
||
this._url.href, '— Unable to determine name.');
|
||
return;
|
||
}
|
||
this._name = this._url.pathname.split('/')[2];
|
||
}
|
||
|
||
Plugin.prototype._name = '';
|
||
|
||
Plugin.prototype.getPluginName = function() {
|
||
return this._name;
|
||
};
|
||
|
||
Plugin.prototype.on = function(eventName, callback) {
|
||
document.createElement('gr-js-api-interface').addEventCallback(eventName,
|
||
callback);
|
||
};
|
||
|
||
Plugin.prototype.url = function(opt_path) {
|
||
return this._url.origin + '/plugins/' + this._name + (opt_path || '/');
|
||
};
|
||
|
||
var Gerrit = window.Gerrit || {};
|
||
|
||
Gerrit.getPluginName = function() {
|
||
console.warn('Gerrit.getPluginName is not supported in PolyGerrit.',
|
||
'Please use self.getPluginName() instead.');
|
||
};
|
||
|
||
Gerrit.css = function(rulesStr) {
|
||
if (!Gerrit._customStyleSheet) {
|
||
var styleEl = document.createElement('style');
|
||
document.head.appendChild(styleEl);
|
||
Gerrit._customStyleSheet = styleEl.sheet;
|
||
}
|
||
|
||
var name = '__pg_js_api_class_' + Gerrit._customStyleSheet.cssRules.length;
|
||
Gerrit._customStyleSheet.insertRule('.' + name + '{' + rulesStr + '}', 0);
|
||
return name;
|
||
};
|
||
|
||
Gerrit.install = function(callback, opt_src) {
|
||
// TODO(andybons): Polyfill currentScript for IE10/11 (edge supports it).
|
||
var src = opt_src || (document.currentScript && document.currentScript.src);
|
||
callback(new Plugin(src));
|
||
};
|
||
|
||
Gerrit.installGwt = function() {
|
||
// NOOP since PolyGerrit doesn’t support GWT plugins.
|
||
};
|
||
|
||
window.Gerrit = Gerrit;
|
||
})(window);
|