/** * @license * 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'; /** * Plugin popup API. * Provides method for opening and closing popups from plugin. * opt_moduleName is a name of custom element that will be automatically * inserted on popup opening. * @param {!Object} plugin * @param {opt_moduleName=} string */ function GrPopupInterface(plugin, opt_moduleName) { this.plugin = plugin; this._openingPromise = null; this._popup = null; this._moduleName = opt_moduleName || null; } GrPopupInterface.prototype._getElement = function() { return Polymer.dom(this._popup); }; /** * Opens the popup, inserts it into DOM over current UI. * Creates the popup if not previously created. Creates popup content element, * if it was provided with constructor. * @returns {!Promise} */ GrPopupInterface.prototype.open = function() { if (!this._openingPromise) { this._openingPromise = this.plugin.hook('plugin-overlay').getLastAttached() .then(hookEl => { const popup = document.createElement('gr-plugin-popup'); if (this._moduleName) { const el = Polymer.dom(popup).appendChild( document.createElement(this._moduleName)); el.plugin = this.plugin; } this._popup = Polymer.dom(hookEl).appendChild(popup); Polymer.dom.flush(); return this._popup.open().then(() => this); }); } return this._openingPromise; }; /** * Hides the popup. */ GrPopupInterface.prototype.close = function() { if (!this._popup) { return; } this._popup.close(); this._openingPromise = null; }; window.GrPopupInterface = GrPopupInterface; })(window);