blob: 689656b89a0fd307ff041474fb10e9c9d55f06ba [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright 2015 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<link rel="import" href="/dashboard/static/uri.html">
<script>
'use strict';
/**
* Module for alerts page.
* TODO(chrisphan): Convert this to Polymer element.
*/
var alerts = (function() {
var sheriffSelect_ = null;
var anomalyTable_ = null;
var stoppageAlertTable_ = null;
var triagedToggle_ = null;
var improvementsToggle_ = null;
/**
* Redirects to the page for the new sheriff when a new sheriff is selected.
* @param {Event} e The event for the select.
*/
var onSheriffChange_ = function(e) {
var sheriff = e['detail']['item'].getAttribute('label');
if (!sheriff) {
return;
}
var params = uri.getAllParameters();
params['sheriff'] = sheriff;
window.location.href = uri.getCurrentPathWithParams(params);
};
/**
* Updates an alerts-table elemenet from the URI parameters.
* @param {Element} alertsTable The alerts-table element to update.
*/
var updateFromURIParameters_ = function(alertsTable) {
if (!alertsTable) {
return;
}
alertsTable['sortBy'] = uri.getParameter('sortby', 'end_revision');
alertsTable['sortDirection'] = uri.getParameter('sortdirection', 'down');
var sheriff = uri.getParameter('sheriff', 'Chromium Perf Sheriff');
sheriffSelect_.select(sheriff);
// The show improvements and show triaged toggles are initially "off"; set
// them to on if the corresponding query parameter is set.
// The buttons are displayed differently if they have the "active"
// attribute.
if (uri.getParameter('improvements')) {
improvementsToggle_.setAttribute('active', '');
}
if (uri.getParameter('triaged')) {
triagedToggle_.setAttribute('active', '');
}
};
/**
* Pushes a new state into the history when an alerts-table is updated.
* @param {Element} alertsTable The alerts-table element that's being
* updated.
*/
var pushHistoryState_ = function(alertsTable) {
if (!alertsTable) {
return;
}
var params = uri.getAllParameters();
params['sortby'] = alertsTable['sortBy'];
params['sortdirection'] = alertsTable['sortDirection'];
var newUri = uri.getCurrentPathWithParams(params);
history.pushState(params, '', newUri);
};
/**
* Refreshes the UI from URI parameters when the history state is popped.
* @param {Event} e PopStateEvent.
* @private
*/
var onPopState_ = function(e) {
// Pop State event will have a non-null state if this came from an actual
// pop instead of the load event.
if (e['state']) {
updateFromURIParameters_(anomalyTable_);
updateFromURIParameters_(stoppageAlertTable_);
}
};
/**
* Updates the table content to include or exclude triaged alerts.
* @param {Event} e The event object.
*/
var onToggleTriaged_ = function(e) {
var params = uri.getAllParameters();
if (params['triaged']) {
delete params['triaged'];
} else {
params['triaged'] = 'true';
}
window.location.href = uri.getCurrentPathWithParams(params);
};
/**
* Updates the table to include or exclude improvement anomalies.
* @param {Event} e The event object.
*/
var onToggleImprovements_ = function(e) {
var params = uri.getAllParameters();
if (params['improvements']) {
delete params['improvements'];
} else {
params['improvements'] = 'true';
}
window.location.href = uri.getCurrentPathWithParams(params);
};
/**
* Finds an element in the DOM and initializes it with some properties.
* The element with the given ID is assumed to be an alerts-table element.
* @param {string} id alerts-table ID.
* @param {Array.<Object>} alertList List of alerts.
* @param {Array.<Object>} extraColumns List of extra columns.
* @return {Element} The alerts-table element.
*/
var initializeAlertsTable_ = function(id, alertList, extraColumns) {
var table = document.getElementById(id);
if (!table) {
return null;
}
var pushHistory = function() {
pushHistoryState_(table);
};
table.addEventListener('sortby', pushHistory, false);
table.addEventListener('sortdirection', pushHistory, false);
table['alertList'] = alertList;
table['extraColumns'] = extraColumns;
table['initialize']();
return table;
};
/**
* Initializes the page on the window load event.
* @param {Event} e The load event.
*/
var initialize = function(e) {
anomalyTable_ = initializeAlertsTable_(
'anomaly-table',
window['ANOMALY_LIST'],
[{'key': 'percent_changed', 'label': 'Delta %'}]);
stoppageAlertTable_ = initializeAlertsTable_(
'stoppage-alert-table',
window['STOPPAGE_ALERT_LIST'],
[{'key': 'last_row_date', 'label': 'Date'}]);
triagedToggle_ = document.getElementById('triaged-toggle');
triagedToggle_.addEventListener('click', onToggleTriaged_);
improvementsToggle_ = document.getElementById('improvements-toggle');
improvementsToggle_.addEventListener('click', onToggleImprovements_);
sheriffSelect_ = document.getElementById('sheriff-select');
sheriffSelect_['menuItems'] = window['SHERIFF_LIST'];
sheriffSelect_.addEventListener('core-activate', onSheriffChange_);
updateFromURIParameters_(anomalyTable_);
updateFromURIParameters_(stoppageAlertTable_);
window.addEventListener('popstate', onPopState_, true);
var autoTriageLog = document.getElementById('auto-triage-log');
var sheriff = sheriffSelect_['selected'];
autoTriageLog['initialize']('Auto triage', 'auto_triage', sheriff);
};
return {
initialize: initialize
};
})();
document.addEventListener('polymer-ready', alerts.initialize, false);
</script>