The change converts the following files to typescript: * elements/shared/gr-js-api-interface/gr-public-js-api.ts Change-Id: I07e48b9aa3078f90ac99e7addd58e8771bec4486
69 lines
2.1 KiB
TypeScript
69 lines
2.1 KiB
TypeScript
/**
|
|
* @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';
|
|
import '../../settings/gr-settings-view/gr-settings-menu-item';
|
|
import {PluginApi} from '../gr-plugin-types';
|
|
|
|
export class GrSettingsApi {
|
|
private _token: string;
|
|
|
|
private _title = '(no title)';
|
|
|
|
private _moduleName?: string;
|
|
|
|
constructor(readonly plugin: PluginApi) {
|
|
// Generate default screen URL token, specific to plugin, and unique(ish).
|
|
this._token = plugin.getPluginName() + Math.random().toString(36).substr(5);
|
|
}
|
|
|
|
title(newTitle: string) {
|
|
this._title = newTitle;
|
|
return this;
|
|
}
|
|
|
|
token(newToken: string) {
|
|
this._token = newToken;
|
|
return this;
|
|
}
|
|
|
|
module(newModuleName: string) {
|
|
this._moduleName = newModuleName;
|
|
return this;
|
|
}
|
|
|
|
build() {
|
|
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.setAttribute('href', `#${token}`);
|
|
el.appendChild(menuItem);
|
|
});
|
|
const moduleName = this._moduleName;
|
|
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(moduleName));
|
|
el.appendChild(item);
|
|
});
|
|
}
|
|
}
|