blob: 12612c0bf1a381a29b9cd0c9cb2343c024257ecf [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 m from 'mithril';
import {channelChanged, getNextChannel, setChannel} from '../common/channels';
import {Anchor} from '../widgets/anchor';
import {HotkeyGlyphs} from '../widgets/hotkey_glyphs';
import {globals} from './globals';
import {createPage} from './pages';
export class Hints implements m.ClassComponent {
view() {
return m(
'.home-page-hints',
m('.tagline', 'New!'),
m(
'ul',
m(
'li',
'New updated ',
m(
Anchor,
{
href: 'https://perfetto.dev/docs/visualization/perfetto-ui#tabs-v2',
},
'tabs',
),
' are extensible and user friendly.',
),
m(
'li',
'Use ',
m(HotkeyGlyphs, {hotkey: 'W'}),
m(HotkeyGlyphs, {hotkey: 'A'}),
m(HotkeyGlyphs, {hotkey: 'S'}),
m(HotkeyGlyphs, {hotkey: 'D'}),
' to navigate the trace.',
),
m(
'li',
'Try the ',
m(
Anchor,
{
href: 'https://perfetto.dev/docs/visualization/perfetto-ui#command-palette',
},
'command palette,',
),
' press ',
m(HotkeyGlyphs, {hotkey: '!Mod+Shift+P'}),
'.',
),
),
);
}
}
export const HomePage = createPage({
view() {
return m(
'.page.home-page',
m(
'.home-page-center',
m(
'.home-page-title',
m(`img.logo[src=${globals.root}assets/logo-3d.png]`),
'Perfetto',
),
m(Hints),
m(
'.channel-select',
m('', 'Feeling adventurous? Try our bleeding edge Canary version'),
m('fieldset', mkChan('stable'), mkChan('canary'), m('.highlight')),
m(
`.home-page-reload${channelChanged() ? '.show' : ''}`,
'You need to reload the page for the changes to have effect',
),
),
),
m(
'a.privacy',
{href: 'https://policies.google.com/privacy', target: '_blank'},
'Privacy policy',
),
);
},
});
function mkChan(chan: string) {
const checked = getNextChannel() === chan ? '[checked=true]' : '';
return [
m(`input[type=radio][name=chan][id=chan_${chan}]${checked}`, {
onchange: () => {
setChannel(chan);
},
}),
m(`label[for=chan_${chan}]`, chan),
];
}