1// Copyright (C) 2018 The Android Open Source Project 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15import * as m from 'mithril'; 16 17import {Actions} from '../common/actions'; 18 19import {CookieConsent} from './cookie_consent'; 20import {globals} from './globals'; 21import {Sidebar} from './sidebar'; 22import {Topbar} from './topbar'; 23 24function renderPermalink(): m.Children { 25 const permalink = globals.state.permalink; 26 if (!permalink.requestId || !permalink.hash) return null; 27 const url = `${self.location.origin}/#!/?s=${permalink.hash}`; 28 29 return m('.alert-permalink', [ 30 m('div', 'Permalink: ', m(`a[href=${url}]`, url)), 31 m('button', 32 { 33 onclick: () => globals.dispatch(Actions.clearPermalink({})), 34 }, 35 m('i.material-icons.disallow-selection', 'close')), 36 ]); 37} 38 39class Alerts implements m.ClassComponent { 40 view() { 41 return m('.alerts', renderPermalink()); 42 } 43} 44 45/** 46 * Wrap component with common UI elements (nav bar etc). 47 */ 48export function createPage(component: m.Component): m.Component { 49 const pageComponent = { 50 view() { 51 const children = [ 52 m(Sidebar), 53 m(Topbar), 54 m(Alerts), 55 m(component), 56 m(CookieConsent), 57 ]; 58 if (globals.frontendLocalState.perfDebug) { 59 children.push(m('.perf-stats')); 60 } 61 return children; 62 }, 63 }; 64 65 return pageComponent; 66} 67