blob: 1c8fc2616678db35faf4b26af8384ed43aa063eb [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Performance Dashboard is Loading...</title>
<link rel="prefetch" href="../data/manifest.json">
<script type="application/json" src="../data/manifest.json"></script>
<script>
function redirectToV3IfNeeded()
{
var hash = window.location.hash;
if (hash.startsWith('#/analysis') || hash.startsWith('#/dashboard'))
window.location.pathname = '/v3/';
}
window.onhashchange = redirectToV3IfNeeded;
redirectToV3IfNeeded();
</script>
<link rel="stylesheet" href="app.css">
<link rel="stylesheet" href="chart-pane.css">
<script src="js/jquery.min.js" defer></script>
<script src="js/jquery.min.js" defer></script>
<script src="js/handlebars.js" defer></script>
<script src="js/ember.js" defer></script>
<script src="js/ember-data.js" defer></script>
<script src="js/d3/d3.min.js" defer></script>
<script src="../shared/statistics.js" defer></script>
<script src="statistics-strategies.js" defer></script>
<script src="data.js" defer></script>
<script src="app.js" defer></script>
<script src="manifest.js" defer></script>
<script src="analysis.js" defer></script>
<script src="popup.js" defer></script>
<script src="interactive-chart.js" defer></script>
<script src="commits-viewer.js" defer></script>
<script type="text/x-handlebars" data-template-name="dashboard">
<header id="header">
{{partial "navbar"}}
{{view App.NumberOfDaysControlView tagName="ul" numberOfDays=numberOfDays}}
<ul class="controls">
<li>
<a href="javascript:false" class="control-button" {{action toggleEditMode}}>
{{#if controller.editMode}}
Finish editing
{{else}}
Edit
{{/if}}
</a>
</li>
</ul>
</header>
<table {{bind-attr class=":dashboard editMode:editMode:readonly"}}>
<thead>
<tr>
<td></td>
{{#each headerColumns}}
{{#if controller.editMode}}
<th>
<a href="javascript:false" title="Remove column" {{action "removeColumn" index}}>
{{partial "close-button"}}
</a>
{{input value=label}}
</th>
{{else}}
<th>{{label}}</th>
{{/if}}
{{/each}}
{{#if controller.editMode}}
<td>{{input value=newColumnHeader action="addColumn" placeholder="Add a column"}}</td>
{{/if}}
</tr>
</thead>
<tbody>
{{#each rows}}
<tr>
{{#if controller.editMode}}
<th>
<a href="javascript:false" title="Remove row" {{action "removeRow" this}}>
{{partial "close-button"}}
</a>
{{input value=header}}
</th>
{{else}}
<th><span class="label">{{header}}</span></th>
{{/if}}
{{#each cells}}
<td>
{{#if empty}}
{{#if controller.editMode}}
{{view App.PopupView list=pickerData label='Choose'}}
{{/if}}
{{else}}
{{#if chartData}}
<div class="dashboard-status">
{{#if latestStatus}}
{{latestStatus.currentValue}}{{chartData.unit}}
{{#if latestStatus.label}}
<span {{bind-attr class=":status-label latestStatus.className"}}>{{latestStatus.label}}</span>
{{/if}}
{{/if}}
</div>
{{#link-to 'charts' (query-params paneList=paneList since=controller.since)}}
{{interactive-chart
chartData=chartData
domain=controller.sharedDomain
enableSelection=false}}
{{/link-to}}
{{else}}
{{#if failure}}
<div class="failure">{{failure}}</div>
{{else}}
<div class="progress">{{partial "spinner"}}</div>
{{/if}}
{{/if}}
{{#if controller.editMode}}
<a href="javascript:false" title="Reset pane" class="reset" {{action "resetPane" this}}>
{{partial "close-button"}}
</a>
{{/if}}
{{/if}}
</td>
{{/each}}
{{#if controller.editMode}}
<td></td>
{{/if}}
</tr>
{{/each}}
{{#if controller.editMode}}
<tr>
<td>{{input value=newRowHeader action="addRow" placeholder="Add a row"}}</td>
{{#each emptyRow}}
<td></td>
{{/each}}
<td></td>
</tr>
{{/if}}
</tbody>
</table>
</script>
<script type="text/x-handlebars" data-template-name="charts">
<header id="header">
{{partial "navbar"}}
<ul class="controls">
<li>{{view App.PopupView list=platforms label='Add pane'}}</li>
</ul>
<ul class="controls">
<li>{{view App.StartTimeSliderView startTime=startTime oldestStartTime=oldestStartTime}}</li>
</ul>
</header>
{{#each panes itemController="pane"}}
<section class="chart-pane in-charts" tabindex="0">
<header>
<h1 {{action "toggleDetails"}}>{{metric.fullName}} - {{platform.name}}</h1>
<a href="javascript:false" title="Close" class="close-button" {{action "close"}}>{{partial "close-button"}}</a>
{{#if movingAverageStrategies}}
<a href="javascript:false" title="Statistical Tools" class="stat-button" {{action "toggleStatPane"}}>{{partial "stat-button"}}</a>
{{/if}}
<a href="javascript:false" {{bind-attr title=showOutlierTitle class=":outlier-button showOutlier:show:hide"}}
{{action "toggleShowOutlier"}}>
{{partial "outlier-button"}}
</a>
<a href="javascript:false" title="Analyze the selected range" class="analysis-button" {{action "toggleBugsPane"}}>
{{partial "analysis-button"}}
</a>
{{#if App.Manifest.repositoriesWithReportedCommits}}
<a href="javascript:false" title="Search commits by a keyword" class="search-button" {{action "toggleSearchPane"}}>{{partial "search-button"}}</a>
{{/if}}
</header>
<div class="body">
<div class="svg-container">
{{#if chartData}}
{{interactive-chart
chartData=chartData
ranges=ranges
domain=mainPlotDomain
interactive=true
currentItem=hoveredOrSelectedItem
currentTime=sharedTime
selectedItem=selectedItem
highlightedItems=highlightedItems
rangeRoute="analysisTask"
selection=timeRange
selectedPoints=selectedPoints
showFullYAxis=showFullYAxis
zoomable=true
zoom="zoomed"}}
{{else}}
{{#if failure}}
<div class="failure">{{failure}}</div>
{{else}}
<div class="progress">{{partial "spinner"}}</div>
{{/if}}
{{/if}}
</div>
<div class="details">
<div class="overview">
{{#if chartData}}
{{interactive-chart
chartData=chartData
showYAxis=false
domain=overviewDomain
selection=overviewSelection}}
{{/if}}
</div>
<div class="details-table-container">
{{partial "chart-details"}}
</div>
</div>
</div>
<div {{bind-attr class=":popup-pane :analysis-pane showingAnalysisPane::hidden"}}>
<section class="analysis-option-option">
<h1>Start A/B testing or associate bugs</h1>
<label>Name: {{input type=text value=newAnalysisTaskName}} <button {{action "createAnalysisTask"}} {{bind-attr disabled=cannotAnalyze}}>Analyze</button></label>
</section>
<section class="analysis-option-option">
<h1>Marking outliers</h1>
<label>{{input type=checkbox checked=selectedItemIsMarkedOutlier disabled=cannotMarkOutlier}} Mark as an outlier and hide it.</label>
</section>
</div>
<form {{bind-attr class=":popup-pane :search-pane showingSearchPane::hidden"}}>
<span class="repositories">
{{view Ember.Select
content=App.Manifest.repositoriesWithReportedCommits
optionValuePath='content.id'
optionLabelPath='content.name'
selection=commitSearchRepository}}
</span>
{{input action="searchCommit" placeholder="Name or email" value=commitSearchKeyword}}
</form>
{{partial "stat-pane"}}
<nav class="alternative-pane-actions">
<ul>
{{#each alternativePanes}}
<li><a href="javascript:false" {{action "addAlternativePanes" pane platform metrics}}>{{label}}</a></li>
{{/each}}
</ul>
</nav>
</section>
{{/each}}
</script>
<script type="text/x-handlebars" data-template-name="components/interactive-chart">
{{#if interactive}}
<div class="selection-toolbar" style="display: none;">
<a href="javascript:false" class="button" {{action "zoom"}}>
<svg class="zoom" viewBox="0 0 100 100">
<g stroke-width="0" stroke="none">
<polygon points="25,25 5,50 25,75"/>
<polygon points="75,25 95,50 75,75"/>
</g>
<line x1="20" y1="50" x2="80" y2="50" stroke-width="10"></line>
</svg>
</a>
</div>
{{/if}}
<div class="rangeBarsContainerInlineStyle">
{{#each rangeBars}}
{{#link-to linkRoute linkId title=label}}
<span {{bind-attr class=":rangeBar status" style=inlineStyle}}></span>
{{/link-to}}
{{/each}}
</div>
</script>
<script type="text/x-handlebars" data-template-name="chart-details">
{{#if details}}
<table class="details-table">
<tbody class="bugs">
{{#each details.bugTrackers}}
{{#if bugs}}
<tr>
<th>{{label}}</th>
<td>
[{{bugUrl}}]
<a {{bind-attr href=bugUrl}} target="_blank">{{bugNumber}}</a>
</td>
</tr>
{{/if}}
{{/each}}
</tbody>
<tbody class="status">
<tr>
<th>Current</th>
<td>
{{details.status.currentValue}} {{chartData.unit}}
{{#if details.status.valueDelta}}
({{details.status.valueDelta}} {{chartData.unit}} / {{details.status.relativeDelta}})
{{/if}}
{{#if details.status.label}}
<br>
<span {{bind-attr class=details.status.className}}>{{details.status.label}}</span>
{{/if}}
</td>
</tr>
</tbody>
<tbody>
{{#if details.buildNumber}}
<tr>
<th>Build</th>
<td>
{{#if details.buildURL}}
<a {{bind-attr href=details.buildURL}} target="_blank">{{details.buildNumber}}</a>
{{else}}
{{details.buildNumber}}
{{/if}}
({{details.buildTime}})
</td>
</tr>
{{/if}}
{{#each details.revisions}}
<tr>
<th>{{name}}</th>
<td>
{{#if url}}
<a {{bind-attr href=url}} target="_blank">{{label}}</a>
{{else}}
{{label}}
{{/if}}
</td>
</tr>
{{/each}}
</tbody>
</table>
<div class="commits">
{{#each details.revisions}}
{{commits-viewer repository=repository revisionInfo=this caption=name}}
{{/each}}
</div>
{{/if}}
</script>
<script type="text/x-handlebars" data-template-name="components/commits-viewer">
{{#if commits}}
<table {{bind-attr class=":commits-viewer visible::hidden"}}>
{{#if caption}}
<caption {{action toggleVisibility}}>{{caption}} commits</caption>
{{/if}}
{{#if visible}}
<tbody>
{{#each commits}}
<tr>
<th>
{{#if url}}
<a {{bind-attr href=url}} target="_blank">{{revision}}</a>
{{else}}
{{revision}}
{{/if}}
</th>
<th>{{author}}</th>
<td>{{message}}</td>
</tr>
{{/each}}
</tbody>
{{/if}}
</table>
{{/if}}
</script>
<script type="text/x-handlebars" data-template-name="close-button">
<svg class="close-button icon-button" viewBox="0 0 100 100">
<g stroke="black" stroke-width="10">
<circle cx="50" cy="50" r="45" fill="transparent"/>
<polygon points="30,30 70,70" />
<polygon points="30,70 70,30" />
</g>
</svg>
</script>
<script type="text/x-handlebars" data-template-name="stat-button">
<svg class="stat-button icon-button" viewBox="10 0 110 100">
<g stroke="none" stroke-width="0" fill="black">
<path id="upper-sigma" d="M 5 5 H 95 V 40 h -10 c -5 -20 -5 -20 -25 -20 H 35 L 60 50 l -20 0" />
<use xlink:href="#upper-sigma" transform="translate(0, 100) scale(1, -1)" />
</g>
</svg>
</script>
<script type="text/x-handlebars" data-template-name="stat-pane">
<section {{bind-attr class=":popup-pane :stat-pane showingStatPane::hidden"}}>
<section class="stat-option">
<h1>Moving average</h1>
<label>Type: {{view Ember.Select
content=movingAverageStrategies
optionValuePath='content'
optionLabelPath='content.label'
selection=chosenMovingAverageStrategy}}</label>
{{#if chosenMovingAverageStrategy.description}}
<p class="description">{{chosenMovingAverageStrategy.description}}</p>
{{/if}}
{{#each chosenMovingAverageStrategy.parameterList}}
<label>{{label}}: {{input type="number" value=value min=min max=max step=step}}</label>
{{/each}}
</section>
{{#if chosenMovingAverageStrategy.execute}}
<section class="stat-option">
<h1>Envelope</h1>
<label>Type: {{view Ember.Select
content=envelopingStrategies
optionValuePath='content'
optionLabelPath='content.label'
selection=chosenEnvelopingStrategy}}</label>
{{#if chosenEnvelopingStrategy.description}}
<p class="description">{{chosenEnvelopingStrategy.description}}</p>
{{/if}}
{{#each chosenEnvelopingStrategy.parameterList}}
<label>{{label}}: <input type="number" {{bind-attr value=value min=min max=max step=step}}></label>
{{/each}}
</section>
{{/if}}
{{#if chosenMovingAverageStrategy.isSegmentation}}
<section class="stat-option">
<h1>A/B Test Range Selection</h1>
<label>Type: {{view Ember.Select
content=testRangeSelectionStrategies
optionValuePath='content'
optionLabelPath='content.label'
selection=chosenTestRangeSelectionStrategy}}</label>
{{#if chosenTestRangeSelectionStrategy.description}}
<p class="description">{{chosenTestRangeSelectionStrategy.description}}</p>
{{/if}}
</section>
{{/if}}
{{#if chosenEnvelopingStrategy.execute}}
<section class="stat-option">
<h1>Anomaly Detection</h1>
{{#each anomalyDetectionStrategies}}
<label {{bind-attr title=description}}>{{input type="checkbox" name=id checked=enabled}}{{label}}</label>
{{/each}}
</section>
{{/if}}
</section>
</script>
<script type="text/x-handlebars" data-template-name="outlier-button">
<svg class="outlier-button icon-button" viewBox="0 0 100 100">
<g stroke="black" fill="black" stroke-width="15">
<line x1="0" y1="70" x2="40" y2="70"/>
<circle cx="15" cy="70" r="8"/>
<circle cx="45" cy="70" r="8"/>
<circle cx="85" cy="70" r="8"/>
<line x1="85" y1="70" x2="100" y2="70"/>
<g class="show-outlier-icon">
<line x1="45" y1="70" x2="65" y2="20"/>
<line x1="65" y1="20" x2="85" y2="70"/>
<circle cx="65" cy="20" r="8"/>
</g>
<g class="hide-outlier-icon">
<line x1="45" y1="70" x2="85" y2="70"/>
</g>
</g>
</svg>
</script>
<script type="text/x-handlebars" data-template-name="analysis-button">
<svg class="analysis-button icon-button" viewBox="0 0 100 100">
<g stroke="black" fill="black" stroke-width="15">
<circle cx="50" cy="50" r="40" fill="transparent"/>
<line x1="50" y1="25" x2="50" y2="55"/>
<circle cx="50" cy="67.5" r="10" stroke="none"/>
</g>
</svg>
</script>
<script type="text/x-handlebars" data-template-name="search-button">
<svg class="search-button icon-button" viewBox="0 0 100 100">
<g stroke="black" stroke-width="15">
<circle cx="60" cy="40" r="30" fill="transparent"/>
<line x1="10" y1="90" x2="40" y2="60"/>
</g>
</svg>
</script>
<script type="text/x-handlebars" data-template-name="spinner">
<svg class="spinner" viewBox="0 0 100 100">
<line x1="10" y1="50" x2="30" y2="50" stroke="black" stroke-width="10" stroke-linecap="round"/>
<line x1="21.72" y1="21.72" x2="35.86" y2="35.86" stroke="black" stroke-width="10" stroke-linecap="round"/>
<line x1="50" y1="10" x2="50" y2="30" stroke="black" stroke-width="10" stroke-linecap="round"/>
<line x1="78.28" y1="21.72" x2="64.14" y2="35.86" stroke="black" stroke-width="10" stroke-linecap="round"/>
<line x1="70" y1="50" x2="90" y2="50" stroke="black" stroke-width="10" stroke-linecap="round"/>
<line x1="65.86" y1="65.86" x2="78.28" y2="78.28" stroke="black" stroke-width="10" stroke-linecap="round"/>
<line x1="50" y1="70" x2="50" y2="90" stroke="black" stroke-width="10" stroke-linecap="round"/>
<line x1="21.72" y1="78.28" x2="35.86" y2="65.86" stroke="black" stroke-width="10" stroke-linecap="round"/>
</svg>
</script>
<script type="text/x-handlebars" data-template-name="navbar">
<nav id="navigation" role="navigation">
<h1><a href="#">{{App.Manifest.siteTitle}}</a></h1>
<ul>
{{#each App.Manifest.dashboards}}
{{#if name}}
{{#link-to 'dashboard' name tagName='li'}}
{{#link-to 'dashboard' name}}{{label}}{{/link-to}}
{{/link-to}}
{{/if}}
{{/each}}
{{#link-to 'charts' tagName='li'}}
{{#link-to 'charts'}}Charts{{/link-to}}
{{/link-to}}
{{#link-to 'analysis' tagName='li'}}
{{#link-to 'analysis'}}Analysis{{/link-to}}
{{/link-to}}
</ul>
</nav>
</script>
<script type="text/x-handlebars" data-template-name="number-of-days-controls">
<li class="numberOfDaysIs1">
<a href="javascript:false" class="control-button" {{action "setNumberOfDays" 1}}>1D</a>
</li>
<li class="numberOfDaysIs7">
<a href="javascript:false" class="control-button" {{action "setNumberOfDays" 7}}>1W</a>
</li>
<li class="numberOfDaysIs30">
<a href="javascript:false" class="control-button" {{action "setNumberOfDays" 30}}>1M</a>
</li>
<li class="numberOfDaysIs90">
<a href="javascript:false" class="control-button" {{action "setNumberOfDays" 90}}>3M</a>
</li>
<li class="numberOfDaysIs183">
<a href="javascript:false" class="control-button" {{action "setNumberOfDays" 183}}>6M</a>
</li>
<li class="numberOfDaysIs365">
<a href="javascript:false" class="control-button" {{action "setNumberOfDays" 365}}>1Y</a>
</li>
</script>
<script type="text/x-handlebars" data-template-name="start-time-slider">
<label><input type="range"> <span class="numberOfDays">X</span> days</label>
</script>
<script type="text/x-handlebars" data-template-name="popup">
<span class="label">{{view App.PopupButtonView tagName="a" label=view.label }}</span>
{{view view.popupListContainerView viewName="popupListContainerViewInstance"}}
</script>
<script type="text/x-handlebars" data-template-name="popup-list">
{{#each view.list}}
{{#if isSeparator}}
<li><hr></li>
{{else }} {{#if children}}
<li>{{view App.PopupView list=children label=label}}</li>
{{else}}
<li>
{{#if actionName}}
<a href="javascript:false" class="label" {{action actionName actionArgument}}>{{label}}</a>
{{else}}
<a class="label">{{label}}</a>
{{/if}}
</li>
{{/if}} {{/if}}
{{/each}}
</script>
<script type="text/x-handlebars" data-template-name="analysis">
<header id="header">
{{partial "navbar"}}
</header>
<table id="analysis-tasks">
<thead>
<tr>
<td>Name</td>
<td>Status</td>
<td>Author</td>
<td>Created at</td>
<td>Platform</td>
<td>Test</td>
</tr>
</thead>
<tbody>
{{#each model.tasks}}
<tr>
<td class="task-name">{{#link-to 'analysisTask' id}}{{name}}{{/link-to}}</td>
<td class="status">{{statusLabel}}</td>
<td class="author">{{author}}</td>
<td class="created-at">{{formattedCreatedAt}}</td>
<td class="platform-name">{{platform.label}}</td>
<td class="test-name">{{metric.fullName}}</td>
</tr>
{{/each}}
</tbody>
</table>
</script>
<script type="text/x-handlebars" data-template-name="analysisTask">
<header id="header">
{{partial "navbar"}}
</header>
<h2 id="analysis-task-title">{{label}}</h2>
{{#if platform.label}}
<h3 id="analysis-task-testname">{{metric.fullName}} - {{platform.label}}</h3>
{{/if}}
{{#if pane}}
<section class="analysis-chart-pane chart-pane" tabindex="0">
<div class="svg-container">
{{interactive-chart
chartData=pane.chartData
ranges=pane.ranges
domain=overviewDomain
interactive=true
currentItem=pane.hoveredOrSelectedItem
selectedPoints=pane.selectedPoints
selection=timeRange
highlightedItems=highlightedItems
rangeRoute="analysisTask"}}
</div>
<div class="details">
<div class="details-table-container">
{{#if details}}
{{partial "chart-details"}}
{{else}}
{{partial "analysisStatusForm"}}
{{/if}}
</div>
</div>
</section>
{{/if}}
{{partial "testGroupForm"}}
{{#each testGroupPanes}}
{{partial "testGroup"}}
{{/each}}
</script>
<script type="text/x-handlebars" data-template-name="testGroup">
<section class="analysis-group">
<h1>{{name}}</h1>
<div class="table-container">
<table class="results">
<thead>
<tr>
<td colspan="2">Configuration</td>
<td>Results</td>
<td>Status</td>
{{#each repositories}}
<td>{{name}}</td>
{{/each}}
</tr>
</thead>
{{#each configurations}}
<tbody {{bind-attr class="showRequestList::hideRequests"}}>
<tr class="summary" {{action toggleShowRequestList this}}>
<td class="config-letter" colspan="2">{{summary.configLetter}}</td>
{{#with summary}}
{{partial "testGroupRow"}}
{{/with}}
</tr>
{{#each requests}}
<tr class="request">
{{#with ../this}}
<td class="config-letter" {{action toggleShowRequestList this}}></td>
{{/with}}
<td>Run {{orderLabel}}</td>
{{partial "testGroupRow"}}
</tr>
{{/each}}
</tbody>
{{/each}}
{{#each comparisons}}
<tbody>
<tr>
<td colspan="2">{{label}}</td>
<td>{{difference}}</td>
<td>{{result}}</td>
{{#with ../this}}
{{#each repositories}}
<td></td>
{{/each}}
{{/with}}
</tr>
</tbody>
{{/each}}
</table>
</div>
<div class="reference-chart">
{{#if referenceChart}}
{{interactive-chart
chartData=referenceChart.data
domain=overviewDomain
showYAxis=false
enableSelection=false
highlightedItems=referenceChart.highlightedItems}}
{{/if}}
</div>
</section>
</script>
<script type="text/x-handlebars" data-template-name="testGroupRow">
<td>
{{#if value}}
{{box-plot range=valueRange value=value delta=delta}}
{{/if}}
{{formattedValue}}
</td>
<td>
<a {{bind-attr href=url title=buildLabel}}>{{statusLabel}}</a>
</td>
{{#each revisionList}}
<td>{{this}}</td>
{{/each}}
</script>
<script type="text/x-handlebars" data-template-name="testGroupForm">
{{#if rootConfigurations}}
<form method="POST" {{action "createTestGroup" newTestGroupName repetitionCount on="submit"}}>
<section class="analysis-group">
<h1>{{input name="name" value=newTestGroupName placeholder="Test group name" required=true type="text"}}</h1>
<table>
<thead>
<tr>
<th>Configuration</th>
{{#each configurations}}
<th>{{this}}</th>
{{/each}}
</tr>
</thead>
<tbody>
{{#each rootConfigurations}}
<tr>
<th>{{name}}</th>
{{#each sets}}
<td>
{{view Ember.Select name=name content=options
optionValuePath="content.value" optionLabelPath="content.label"
selection=selection}}
{{#if selection.isCustom}}
{{input name="customValue" type=text value=customValue}}
{{/if}}
</td>
{{/each}}
</tr>
{{/each}}
</tbody>
</table>
<label>Number of runs {{view Ember.Select content=possibleRepetitionCounts value=repetitionCount}}</label>
<button type="submit">Start A/B testing</button>
</section>
</form>
{{/if}}
</script>
<script type="text/x-handlebars" data-template-name="analysisStatusForm">
<table class="analysis-bugs">
<tbody>
{{#each model.bugs}}
<tr>
<th>{{bugTracker.name}}</th>
<td>
<a {{bind-attr href=url}} target="_blank">{{number}}</a>
<a href="javascript:false" {{action "deleteBug" this}}>{{partial "close-button"}}</a>
</td>
</tr>
{{/each}}
{{#if bugTrackers}}
<tr>
<td>
{{view Ember.Select content=bugTrackers optionValuePath="content" optionLabelPath="content.name" value=chosenBugTracker}}
</td>
<td>
{{input id=elementId type=text value=editedBugNumber}}
<button {{action "addBug" chosenBugTracker editedBugNumber}}>Add</button>
</td>
</tr>
{{/if}}
</tbody>
<tbody>
<tr>
<th><label for="analysis-status">Status<label></th>
<td>
<form class="analysis-bugs" {{action "saveStatus" on="submit"}}>
{{view Ember.Select id="analysis-status" content=analysisResultOptions optionValuePath="content"
optionLabelPath="content.label" selection=chosenAnalysisResult}}
<input type="submit" value="Save"><br>
<label {{bind-attr class="needsFeedback::hidden"}}>{{input type=checkbox checked=notNeeded}} This should not have been created</label>
</form>
</td>
</tr>
</tbody>
</table>
</script>
</head>
<body>
</body>
</html>