blob: 158c3db232c030019102b6ad730e73d5cead6035 [file] [log] [blame]
<!--
The common.js file must be included before this file.
This in an HTML Import-able file that contains the definition
of the following elements:
<alert-sk>
To use this file import it:
<link href="/res/imp/alert-sk.html" rel="import" />
Usage:
<alert-sk></alert-sk>
Properties:
alert: Object, Expected to have the following attributes:
id: Number
message: String
name: String
comments: Array of comment Objects.
selected: Boolean
snoozedUntil: Number
allow_edit: Boolean, Whether or not to allow edits for users with edit rights.
compact: Boolean, If true, minimal information about alerts is displayed.
Methods:
None
Events:
submit - Fired when the alert is changed by the user through the alert
controls.
-->
<link rel="import" href="/res/imp/bower_components/iron-flex-layout/iron-flex-layout-classes.html">
<link rel="import" href="/res/imp/bower_components/paper-checkbox/paper-checkbox.html">
<link rel="import" href="/res/common/imp/alert-controls-sk.html">
<link rel="import" href="/res/common/imp/comments-sk.html">
<link rel="import" href="/res/common/imp/human-date-sk.html">
<link rel="import" href="/res/common/imp/linkify-sk.html">
<dom-module id="alert-sk">
<template>
<style include="iron-flex iron-flex-alignment iron-positioning">
#wrapper {
padding: 20px;
margin: 10px;
border-radius: 10px;
background-color: #F5F5F5;
color: #000000;
}
div.message {
overflow-wrap: word-break;
overflow: hidden;
text-overflow: ellipsis;
}
div.message[disabled] {
color: #AAAAAA;
}
h3 {
margin-top: 0px;
}
#commentContainer {
margin-top: 15px;
}
paper-checkbox {
margin-right: 10px;
}
</style>
<div id="wrapper" class="vertical horizontal center">
<div class="horizontal layout start">
<template is="dom-if" if="[[_editRights]]">
<paper-checkbox id="checkbox" on-change="_selectedChanged" checked="{{alert.selected}}"></paper-checkbox>
</template>
<div class="message flex">
<h3>[[alert.name]]</h3>
<linkify-sk text="[[alert.message]]"></linkify-sk>
</div>
<template is="dom-if" if="[[_isSnoozed(alert)]]">
<div class="message">Snoozed for <human-date-sk date="[[alert.snoozedUntil]]" diff seconds></human-date-sk></div>
</template>
</div>
<template is="dom-if" if="[[!compact]]">
<div id="commentContainer">
<comments-sk comments="[[alert.comments]]" collapsible></comments-sk>
<template is="dom-if" if="[[_editRights]]">
<alert-controls-sk
id="controls"
alert_name="[[alert.name]]"
alert_url="[[_getAlertUrl(alert)]]"
show_snooze="[[!_isSnoozed(alert)]]"
show_unsnooze="[[_isSnoozed(alert)]]"
on-submit="_submit">
</alert-controls-sk>
</template>
</div>
</template>
</div>
</template>
<script>
Polymer({
is: "alert-sk",
properties: {
/**
* The alert object. Expected to have the following attributes:
* id: Number
* message: String
* name: String
* comments: Array of comment objects.
* selected: Boolean
* snoozedUntil: Number
*/
alert: {
type: Object,
value: function() { return {}; },
},
/**
* Whether or not to allow edits for users with edit rights.
*/
allow_edit: {
type: Boolean,
value: false,
},
/**
* If true, minimal information about alerts is displayed.
*/
compact: {
type: Boolean,
value: false,
},
_editRights: {
type: Boolean,
computed: "_canEdit(allow_edit, _loggedInUser)",
},
_loggedInUser: {
type: Boolean,
value: false,
},
},
ready: function() {
sk.Login.then(function (status) {
var email = status["Email"];
if (sk.isGoogler(email)) {
this._loggedInUser = true;
}
}.bind(this));
},
_canEdit: function(allow_edit, _loggedInUser) {
return allow_edit && _loggedInUser;
},
_selectedChanged: function(e) {
e.stopPropagation();
this.fire("select-changed", {
id: this.alert.id,
selected: this.alert.selected
});
return true;
},
_isSnoozed: function(alert) {
return alert.snoozedUntil > 0;
},
_getAlertUrl: function(alert) {
return "/json/alerts/" + alert.id;
},
_submit: function(e) {
this.dispatchEvent(new CustomEvent("submit", e));
},
});
</script>
</dom-module>