blob: 599d123c05703ed75d9ad7a8869681164f4b6eca [file] [log] [blame]
<!--
Copyright 2016 The LUCI Authors. All rights reserved.
Use of this source code is governed under the Apache License, Version 2.0
that can be found in the LICENSE file.
-->
<link rel="import" href="../../inc/bower_components/polymer/polymer.html">
<!-- Inline our main TypeScript -->
<script src="../../inc/apps/logdog-view/main.js"></script>
<link rel="import" href="../../inc/bower_components/paper-styles/default-theme.html">
<link rel="import" href="../../inc/bower_components/paper-styles/typography.html">
<link rel="import" href="../../inc/logdog-app-base/logdog-app-base.html">
<link rel="import" href="../../inc/logdog-stream-view/logdog-stream-view.html">
<link rel="import" href="../../inc/auth/auth-signin.html">
<link rel="stylesheet" href="../../styles/main.css">
<!--
An element for the LogDog lightweight view app of a single set of streams.
The streams are specified by full path using the "s=" query parameter.
-->
<dom-module id="logdog-view">
<template>
<style>
:host {
@apply(--paper-font-common-base);
}
#banner {
background-color: #FAFAFA;
overflow: hidden;
border-color: lightcoral;
border-width: 0px 0px 2px 0px;
border-style: solid;
}
.banner-content {
width: auto;
display: inline-block;
padding-left: 5px;
padding-right: 5px;
overflow: hidden;
}
.banner-content h1 {
font-size: 18px;
}
#auth-bubble {
float: right;
display: inline-block;
border: none;
}
</style>
<div>
<div id="banner">
<span class="banner-content">
<h1><a href="/">LogDog</a>
<template is="dom-if" if="{{_hasStreams}}">
<template is="dom-if" if="{{streamLinkUrl}}">
: <a href="{{streamLinkUrl}}">[[streams]]</a>
</template>
<template is="dom-if" if="{{!streamLinkUrl}}">
: [[streams]]
</template>
</template>
<template is="dom-if" if="{{!_hasStreams}}">
(No Streams Provided)
</template>
</h1>
</span>
<template is="dom-if" if="{{clientId}}">
<span id="auth-bubble">
<auth-signin
client-id="[[clientId]]"></auth-signin>
</span>
</template>
</div>
<logdog-stream-view
id="streamView"
host="[[host]]"
mobile="[[mobile]]"
metadata="[[metadata]]"
streams="[[streams]]"
stream-link-url="{{streamLinkUrl}}"></logdog-stream-view>
</div>
</template>
</dom-module>
<script>
Polymer({
is: "logdog-view",
properties: {
host: {
type: String,
notify: true,
value: null,
},
clientId: {
type: String,
value: null,
},
streams: {
type: Array,
value: [],
readOnly: true,
},
streamLinkUrl: {
type: String,
value: null,
notify: true,
},
metadata: {
type: String,
value: false,
readOnly: true,
},
mobile: {
type: Boolean,
value: false,
},
_hasStreams: {
computed: '_arrayHasElements(streams)',
},
},
observers: [
'_updatePageTitle(streams)',
],
ready: function() {
// Test if we're mobile.
this.mobile = false;
if ( window.matchMedia ) {
this.mobile = window.matchMedia(
"only screen and (max-width: 760px)").maches;
}
// Parse the stream names from the "s" query parameter.
var queryString = window.location.search.replace(/^\?/, "");
var streams = logdog.getQueryValues(queryString, "s").
map(logdog.correctStreamPath);
this._setStreams(streams);
// Parse the metadata option.
this._setMetadata(!!logdog.getQueryValue(queryString, "m", false));
// Parse the host option.
var host = logdog.getQueryValue(queryString, "h", undefined);
if (host) {
this.host = host;
}
},
_onSignin: function(e) {
this._setAccessToken(e.detail.access_token);
},
_onSignout: function(e) {
this._setAccessToken(null);
},
_arrayHasElements: function(v) {
return (v && v.length);
},
_updatePageTitle: function(streams) {
var paths = (streams || []).map(s => LogDog.StreamPath.splitProject(s));
var commonProject = this._getCommonStreamField(paths, p => p.project);
var commonPrefix = this._getCommonStreamField(paths, p => p.prefix);
var title = 'LogDog';
if (commonProject) {
title += '(' + commonProject + '): ';
if (commonPrefix) {
title += commonPrefix + '/+/ ';
}
} else {
title += ': ';
}
if (paths.length) {
var vals = paths.map(p => {
if (commonProject) {
if (commonPrefix) {
return p.name;
}
return p.path;
}
return p.fullName();
});
if (commonProject && commonPrefix) {
title += vals.join('&');
} else {
title += vals.join(' ');
}
}
document.title = title;
},
_getCommonStreamField: function(paths, fn) {
var commonValue;
paths.forEach((path, idx) => {
var v = fn(path);
if (idx === 0) {
commonValue = v;
} else if (commonValue !== v) {
commonValue = undefined;
return false;
}
return true;
});
return commonValue;
},
});
(function(i,s,o,g,r,a,m){i['CrDXObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://storage.googleapis.com/crdx-feedback.appspot.com/feedback.js','crdx');
crdx('setFeedbackButtonLink', 'https://bugs.chromium.org/p/chromium/issues/entry?components=Infra>Platform>LogDog&labels=Infra-DX');
</script>