blob: db61e1628ce528c0cf27ff3f069b4c1018ca1bc9 [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright 2016 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="/components/paper-button/paper-button.html">
<link rel="import" href="/dashboard/elements/bisect-form.html">
<link rel="import" href="/dashboard/static/simple_xhr.html">
<polymer-element name="bisect-button" attributes="bisectInfo bugId xsrfToken">
<template>
<style>
/*
* A special style for the "enabled" attribute is used because when style
* is applied to the button element, it seems to override the paper-button
* [disabled] style.
* The selector #button:enabled doesn't work because the underlying
* element inside paper-button is a div, not a form element.
*/
#button[enabled] {
background-color: #4285f4;
color: white;
}
/*
* Style for when this custom element when it has the class "mini".
* See: http://www.polymer-project.org/articles/styling-elements.html
*/
:host(.mini) #button {
height: 22px;
line-height: 0.5em;
margin-left: 5px;
padding-top: 0;
}
</style>
<paper-button raised
id="button"
disabled?={{!canBisect}}
enabled?={{canBisect}}
on-click="{{onBisect}}">Bisect</paper-button>
<bisect-form
id="bisect"
xsrfToken="{{xsrfToken}}"
earlierRevision="{{bisectInfo.goodRev}}"
laterRevision="{{bisectInfo.badRev}}"
testPath="{{bisectInfo.testPath}}"
bugId="{{bugId}}"></bisect-form>
</template>
<script>
'use strict';
(function() {
Polymer('bisect-button', {
/**
* Initializes this element; this is an element lifecycle callback.
*/
ready: function() {
this.update();
},
/**
* Updates the bisect button when the bisectInfo is set.
*/
bisectInfoChanged: function() {
this.update();
},
/**
* Updates the canBisect state based on the bisectInfo state.
*/
update: function() {
this.canBisect = false;
if (!this.bisectInfo) {
return;
}
var that = this;
simple_xhr.send(
'/can_bisect',
{
'test_path': this.bisectInfo.testPath,
'start_revision': this.bisectInfo.goodRev,
'end_revision': this.bisectInfo.badRev,
},
function loadCallback(responseBool) {
that.canBisect = responseBool;
},
function errorCallback(message) {
console.warn('Request to /can_bisect failed.', message);
that.canBisect = true;
});
},
/**
* Displays the bisect-form when the bisect button is clicked.
*/
onBisect: function() {
this.$.bisect.show();
}
});
})();
</script>
</polymer-element>