| /** |
| * @license |
| * Copyright (C) 2017 The Android Open Source Settings |
| * |
| * 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. |
| */ |
| import '../../settings/gr-settings-view/gr-settings-item.js'; |
| import '../../settings/gr-settings-view/gr-settings-menu-item.js'; |
| |
| /** @constructor */ |
| export function GrSettingsApi(plugin) { |
| this._title = '(no title)'; |
| // Generate default screen URL token, specific to plugin, and unique(ish). |
| this._token = |
| plugin.getPluginName() + Math.random().toString(36) |
| .substr(5); |
| this.plugin = plugin; |
| } |
| |
| GrSettingsApi.prototype.title = function(title) { |
| this._title = title; |
| return this; |
| }; |
| |
| GrSettingsApi.prototype.token = function(token) { |
| this._token = token; |
| return this; |
| }; |
| |
| GrSettingsApi.prototype.module = function(moduleName) { |
| this._moduleName = moduleName; |
| return this; |
| }; |
| |
| GrSettingsApi.prototype.build = function() { |
| if (!this._moduleName) { |
| throw new Error('Settings screen custom element not defined!'); |
| } |
| const token = `x/${this.plugin.getPluginName()}/${this._token}`; |
| this.plugin.hook('settings-menu-item').onAttached(el => { |
| const menuItem = document.createElement('gr-settings-menu-item'); |
| menuItem.title = this._title; |
| menuItem.href = `#${token}`; |
| el.appendChild(menuItem); |
| }); |
| |
| return this.plugin.hook('settings-screen').onAttached(el => { |
| const item = document.createElement('gr-settings-item'); |
| item.title = this._title; |
| item.anchor = token; |
| item.appendChild(document.createElement(this._moduleName)); |
| el.appendChild(item); |
| }); |
| }; |