blob: 06bff8cda2d0dd9cdd163a25377c23a525ff1b91 [file] [log] [blame]
// Copyright (C) 2018 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.
import * as m from 'mithril';
import {Actions} from '../common/actions';
import {globals} from './globals';
import {Sidebar} from './sidebar';
import {Topbar} from './topbar';
function renderPermalink(): m.Children {
const permalink = globals.state.permalink;
if (!permalink.requestId || !permalink.hash) return null;
const url = `${self.location.origin}/#!/?s=${permalink.hash}`;
return m('.alert-permalink', [
m('div', 'Permalink: ', m(`a[href=${url}]`, url)),
m('button',
{
onclick: () => globals.dispatch(Actions.clearPermalink({})),
},
m('i.material-icons', 'close')),
]);
}
class Alerts implements m.ClassComponent {
view() {
return m('.alerts', renderPermalink());
}
}
const TogglePerfDebugButton = {
view() {
return m(
'.perf-monitor-button',
m('button',
{
onclick: () => globals.frontendLocalState.togglePerfDebug(),
},
m('i.material-icons',
{
title: 'Toggle Perf Debug Mode',
},
'assessment')));
}
};
const PerfStats: m.Component = {
view() {
const perfDebug = globals.frontendLocalState.perfDebug;
const children = [m(TogglePerfDebugButton)];
if (perfDebug) {
children.unshift(m('.perf-stats-content'));
}
return m(`.perf-stats[expanded=${perfDebug}]`, children);
}
};
/**
* Wrap component with common UI elements (nav bar etc).
*/
export function createPage(component: m.Component): m.Component {
const pageComponent = {
view() {
return [
m(Sidebar),
m(Topbar),
m(Alerts),
m(component),
m(PerfStats),
];
},
};
return pageComponent;
}