diff options
Diffstat (limited to 'polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-change-actions-js-api.js')
-rw-r--r-- | polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-change-actions-js-api.js | 90 |
1 files changed, 73 insertions, 17 deletions
diff --git a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-change-actions-js-api.js b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-change-actions-js-api.js index 6853a415b1..407a6a8b0c 100644 --- a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-change-actions-js-api.js +++ b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-change-actions-js-api.js @@ -1,80 +1,136 @@ -// 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. +/** + * @license + * 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'; + /** + * Ensure GrChangeActionsInterface instance has access to gr-change-actions + * element and retrieve if the interface was created before element. + * @param {!GrChangeActionsInterface} api + */ + function ensureEl(api) { + if (!api._el) { + const sharedApiElement = document.createElement('gr-js-api-interface'); + setEl(api, sharedApiElement.getElement( + sharedApiElement.Element.CHANGE_ACTIONS)); + } + } + + /** + * Set gr-change-actions element to a GrChangeActionsInterface instance. + * @param {!GrChangeActionsInterface} api + * @param {!Element} el gr-change-actions + */ + function setEl(api, el) { + if (!el) { + console.warn('changeActions() is not ready'); + return; + } + api._el = el; + api.RevisionActions = el.RevisionActions; + api.ChangeActions = el.ChangeActions; + api.ActionType = el.ActionType; + } + function GrChangeActionsInterface(plugin, el) { this.plugin = plugin; - this._el = el; - this.RevisionActions = el.RevisionActions; - this.ChangeActions = el.ChangeActions; - this.ActionType = el.ActionType; + setEl(this, el); } GrChangeActionsInterface.prototype.addPrimaryActionKey = function(key) { + ensureEl(this); if (this._el.primaryActionKeys.includes(key)) { return; } this._el.push('primaryActionKeys', key); }; GrChangeActionsInterface.prototype.removePrimaryActionKey = function(key) { + ensureEl(this); this._el.primaryActionKeys = this._el.primaryActionKeys.filter(k => { return k !== key; }); }; + GrChangeActionsInterface.prototype.hideQuickApproveAction = function() { + ensureEl(this); + this._el.hideQuickApproveAction(); + }; + GrChangeActionsInterface.prototype.setActionOverflow = function(type, key, overflow) { + ensureEl(this); return this._el.setActionOverflow(type, key, overflow); }; GrChangeActionsInterface.prototype.setActionPriority = function(type, key, priority) { + ensureEl(this); return this._el.setActionPriority(type, key, priority); }; GrChangeActionsInterface.prototype.setActionHidden = function(type, key, hidden) { + ensureEl(this); return this._el.setActionHidden(type, key, hidden); }; GrChangeActionsInterface.prototype.add = function(type, label) { + ensureEl(this); return this._el.addActionButton(type, label); }; GrChangeActionsInterface.prototype.remove = function(key) { + ensureEl(this); return this._el.removeActionButton(key); }; GrChangeActionsInterface.prototype.addTapListener = function(key, handler) { + ensureEl(this); this._el.addEventListener(key + '-tap', handler); }; GrChangeActionsInterface.prototype.removeTapListener = function(key, handler) { + ensureEl(this); this._el.removeEventListener(key + '-tap', handler); }; GrChangeActionsInterface.prototype.setLabel = function(key, text) { + ensureEl(this); this._el.setActionButtonProp(key, 'label', text); }; + GrChangeActionsInterface.prototype.setTitle = function(key, text) { + ensureEl(this); + this._el.setActionButtonProp(key, 'title', text); + }; + GrChangeActionsInterface.prototype.setEnabled = function(key, enabled) { + ensureEl(this); this._el.setActionButtonProp(key, 'enabled', enabled); }; + GrChangeActionsInterface.prototype.setIcon = function(key, icon) { + ensureEl(this); + this._el.setActionButtonProp(key, 'icon', icon); + }; + GrChangeActionsInterface.prototype.getActionDetails = function(action) { + ensureEl(this); return this._el.getActionDetails(action) || this._el.getActionDetails(this.plugin.getPluginName() + '~' + action); }; |