blob: 355eb5f4dcafa2ebae2c3648d97220a3972e67d8 [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 {onClickCopy} from './clipboard';
import {CookieConsent} from './cookie_consent';
import {globals} from './globals';
import {fullscreenModalContainer} from './modal';
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}`;
const linkProps = {title: 'Click to copy the URL', onclick: onClickCopy(url)};
return m('.alert-permalink', [
m('div', 'Permalink: ', m(`a[href=${url}]`, linkProps, url)),
m('button',
{
onclick: () => globals.dispatch(Actions.clearPermalink({})),
},
m('i.material-icons.disallow-selection', 'close')),
]);
}
class Alerts implements m.ClassComponent {
view() {
return m('.alerts', renderPermalink());
}
}
/**
* Wrap component with common UI elements (nav bar etc).
*/
export function createPage(component: m.Component<PageAttrs>):
m.Component<PageAttrs> {
const pageComponent = {
view({attrs}: m.Vnode<PageAttrs>) {
const children = [
m(Sidebar),
m(Topbar),
m(Alerts),
m(component, attrs),
m(CookieConsent),
fullscreenModalContainer.render(),
];
if (globals.state.perfDebug) {
children.push(m('.perf-stats'));
}
return children;
},
};
return pageComponent;
}
export interface PageAttrs {
subpage?: string;
}