Index: options.html |
=================================================================== |
--- options.html (revision 63762) |
+++ options.html (working copy) |
@@ -4,14 +4,11 @@ |
<script src="jst/util.js" type="text/javascript"></script> |
<script src="jst/jsevalcontext.js" type="text/javascript"></script> |
<script src="jst/jstemplate.js" type="text/javascript"></script> |
- <script src="jst/jstemplate_example.js" type="text/javascript"></script> |
<script src="jquery/jquery-1.4.2.min.js" type="text/javascript"></script> |
- <script src="jquery/jquery-ui-1.8.4.custom.min.js" type="text/javascript"></script> |
- <script src="jquery/jquery.flot.js" type="text/javascript"></script> |
+ <script src="jquery/jquery.flot.min.js" type="text/javascript"></script> |
<script src="jquery/jquery.flot.dashes.js" type="text/javascript"></script> |
- <script src="jquery/jquery.flot.navigate.js" type="text/javascript"></script> |
- <script src="jquery/jquery.flot.valuelabels.js" type="text/javascript"></script> |
- <script src="jquery/jquery.client.js" type="text/javascript"></script> |
+ <script src="util/table2CSV.js" type="text/javascript"></script> |
+ <script src="util/sorttable.js" type="text/javascript"></script> |
<style> |
body { |
@@ -61,16 +58,16 @@ |
display: inline; |
} |
-table.list { |
+table.sortable { |
font-size: 84%; |
table-layout: fixed; |
} |
-table.list:not([class*='filtered']) tr:nth-child(odd) td:not([class*='filtered']) { |
+table.sortable:not([class*='filtered']) tr:nth-child(even) td:not([class*='filtered']) { |
background: #eff3ff; |
} |
-table.list th { |
+.nobg { |
padding: 0 0.5em; |
vertical-align: bottom; |
font-weight: bold; |
@@ -79,6 +76,20 @@ |
text-align: center; |
} |
+.bg{ |
+ padding: 0 0.5em; |
+ vertical-align: bottom; |
+ font-weight: bold; |
+ color: #315d94; |
+ color: black; |
+ text-align: center; |
+ cursor: pointer; |
+} |
+ |
+.bg:hover { |
+ background: #eff3aa; |
+} |
+ |
.avg { |
font-weight: bold; |
text-align: center; |
@@ -90,13 +101,12 @@ |
} |
.bggraph { |
- background-color: #faa; |
white-space: nowrap; |
} |
-.file_input_div |
+.file_input |
{ |
- position: relative; |
+ position: absolute; |
width: 140px; |
height: 26px; |
overflow: hidden; |
@@ -116,16 +126,10 @@ |
right: 0px; |
top: 0px; |
opacity: 0; |
- |
- filter: alpha(opacity=0); |
- -ms-filter: "alpha(opacity=0)"; |
- -khtml-opacity: 0; |
- -moz-opacity: 0; |
} |
</style> |
<script> |
- |
var max_sample = 0; |
Array.max = function(array) { |
@@ -532,17 +536,18 @@ |
} |
} |
-// Enable/disable button according to checkbox change. |
+// Enable/Disable buttons according to checkbox change. |
function checkSelected () { |
var checkboxArr = document.getElementsByName("checkboxArr"); |
if (checkAmount(checkboxArr) !=0) { |
+ document.getElementById("clearSelected").disabled = false; |
document.getElementById("compare").disabled = false; |
} else { |
+ document.getElementById("clearSelected").disabled = true; |
document.getElementById("compare").disabled = true; |
} |
} |
- |
// Object to summarize everything |
var totals = {}; |
@@ -781,11 +786,34 @@ |
function showConfirm() { |
var r = confirm("Are you sure to clear results?"); |
if (r) { |
- clearResults(); |
+ // Find out the event source element. |
+ var evtSrc = window.event.srcElement; |
+ if (evtSrc.value == "Clear Selected") { |
+ clearSelected(); |
+ } else if (evtSrc.value == "Clear All") { |
+ clearResults(); |
+ } |
} |
} |
-// Clear the results |
+// Clear the selected results |
+function clearSelected() { |
+ var extension = chrome.extension.getBackgroundPage(); |
+ var checkboxArr = document.getElementsByName("checkboxArr"); |
+ var rowIndexArr = getSelectedIndex(checkboxArr); |
+ var currIndex; |
+ for (var i = 0; i < rowIndexArr.length; i++) { |
+ currIndex = rowIndexArr[i]; |
+ // Update the index of the original row in the modified array. |
+ currIndex -= i; |
+ extension.results.data.splice(currIndex, 1); |
+ document.location.reload(true); |
+ updateChart(this); |
+ jsinit(); |
+ } |
+} |
+ |
+// Clear all the results |
function clearResults() { |
var extension = chrome.extension.getBackgroundPage(); |
extension.results = {}; |
@@ -796,6 +824,13 @@ |
jsinit(); |
} |
+// Export html table into CSV format. |
+function export() { |
+ var checkboxArr = document.getElementsByName("checkboxArr"); |
+ var rowNum = checkboxArr.length + 1; // # of data rows plus total-stats row. |
+ $('#t').table2CSV(rowNum); |
+} |
+ |
// Toggle display of an element |
function toggle(id) { |
var elt = document.getElementById(id); |
@@ -821,59 +856,60 @@ |
Clear Cache?<input id="clearcache" type="checkbox"> |
Enable Spdy?<input id="enablespdy" type="checkbox"> |
<br> |
-<span>URLs to load</span> <input type="text" id="testurl" size="100"> |
-<div class="file_input_div"> |
+<span>URLs to load</span> <input type="text" id="testurl" size="80"> |
+<span class="file_input"> |
<input class="file_input_button" type="button" value="Load URLs From File" /> |
<input class="file_input_hidden" type="file" id="files" name="files[]" multiple /> |
-</div> |
-<form onsubmit="config();run()" style="display:inline"> |
+</span> |
+<form onsubmit="config();run()"> |
<input type="submit" value="Run"> |
</form> |
-<input type="button" value="Clear Results" onclick="showConfirm()"> |
<p> |
<h1>Results</h1> |
<input id="expand" type="button" value="Show More Details" onclick="expand()"> |
- |
-<table id="t" class="list" width="100%"> |
+<input id="clearSelected" type="button" value="Clear Selected" disabled="true" onclick="showConfirm()"> |
+<input id="clearAll" type="button" value="Clear All" onclick="showConfirm()"> |
+<input type="button" value="Export As .csv" onclick="export()"> |
+<table id="t" class="sortable" width="100%"> |
<tr> |
- <th width=35></th> |
- <th width=150>url</th> |
- <th width=80 style="display:none">timestamp</th> |
- <th width=50>iterations</th> |
- <th width=50 >via spdy</th> |
- <th width=50 style="display:none">start load mean</th> |
- <th width=50 style="display:none">commit load mean</th> |
- <th width=50>doc load mean</th> |
- <th width=50>paint mean</th> |
- <th width=50>total load mean</th> |
- <th width=50>stddev</th> |
- <th width=50 style="display:none">stderr</th> |
- <th width=50 style="display:none">95% CI-low</th> |
- <th width=50 style="display:none">95% CI-high</th> |
- <th width=50 style="display:none">min</th> |
- <th width=50 style="display:none">max</th> |
- <th width=50 style="display:none"># Requests</th> |
- <th width=50 style="display:none"># Connects</th> |
- <th width=50 style="display:none"># SPDY Sessions</th> |
- <th width=50 style="display:none">Read KB</th> |
- <th width=50 style="display:none">Write KB</th> |
- <th width=50>Read KBps</th> |
- <th width=50>Write KBps</th> |
- <th width=50># DOM</th> |
- <th width=70 style="display:none">max DOM depth</th> |
- <th width=30 style="display:none">min</th> |
- <th width=30 style="display:none">avg</th> |
- <th samples style="display:none"></th> |
+ <th width=35 class="nobg"></th> |
+ <th width=215 class="nobg">url</th> |
+ <th width=110 class="nobg" style="display:none">timestamp</th> |
+ <th width=50 class="nobg">iterations</th> |
+ <th width=50 class="nobg">via spdy</th> |
+ <th width=50 class="bg" style="display:none">start load mean</th> |
+ <th width=50 class="bg" style="display:none">commit load mean</th> |
+ <th width=50 class="bg">doc load mean</th> |
+ <th width=50 class="bg">paint mean</th> |
+ <th width=50 class="bg">total load mean</th> |
+ <th width=50 class="bg">stddev</th> |
+ <th width=50 class="bg" style="display:none">stderr</th> |
+ <th width=50 class="bg" style="display:none">95% CI-low</th> |
+ <th width=50 class="bg" style="display:none">95% CI-high</th> |
+ <th width=50 class="bg" style="display:none">min</th> |
+ <th width=50 class="bg" style="display:none">max</th> |
+ <th width=60 class="bg" style="display:none"># Requests</th> |
+ <th width=60 class="bg" style="display:none"># Connects</th> |
+ <th width=50 class="bg" style="display:none"># SPDY Sessions</th> |
+ <th width=50 class="bg" style="display:none">Read KB</th> |
+ <th width=50 class="bg" style="display:none">Write KB</th> |
+ <th width=50 class="bg">Read KBps</th> |
+ <th width=50 class="bg">Write KBps</th> |
+ <th width=50 class="bg"># DOM</th> |
+ <th width=70 class="bg" style="display:none">max DOM depth</th> |
+ <th width=30 class="bg" style="display:none">min</th> |
+ <th width=30 class="bg" style="display:none">avg</th> |
+ <th samples class="nobg" style="display:none">total loan time samples</th> |
</tr> |
<tr id="t.total" jsselect="totals"> |
<td class="avg" jseval="1"></td> |
<td class="url">TOTALS <span jscontent="url"></span></td> |
+ <td class="avg" style="display:none"></td> |
<td class="avg" jseval="1"></td> |
<td class="avg" jseval="1"></td> |
- <td class="avg" jseval="1"></td> |
<td class="avg" style="display:none"><span jseval="val = startLoadMean.toFixed(1)" jscontent="val"></span></td> |
<td class="avg" style="display:none"><span jseval="val = commitLoadMean.toFixed(1)" jscontent="val"></span></td> |
<td class="avg"><span jseval="val = docLoadMean.toFixed(1)" jscontent="val"></span></td> |
@@ -889,6 +925,13 @@ |
<td class="avg" jseval="1"></td> |
<td class="avg" jseval="1"></td> |
<td class="avg" jseval="1"></td> |
+ <td class="avg" jseval="1"></td> |
+ <td class="avg" jseval="1"></td> |
+ <td class="avg" jseval="1"></td> |
+ <td class="avg" jseval="1"></td> |
+ <td class="avg" jseval="1"></td> |
+ <td class="avg" jseval="1"></td> |
+ <td class="avg" jseval="1"></td> |
<td class="data"></td> |
</tr> |
@@ -923,7 +966,7 @@ |
<td class="data" style="display:none"><span jsselect="totalResults"><span jscontent="$this"></span>,</span> </td> |
</tr> |
<tr jsdisplay="data.length == 0"> |
- <td colspan=11>No tests have been run yet.</td> |
+ <td colspan=2>No tests have been run yet.</td> |
</tr> |
<tr jsdisplay="data.length > 1"> |
<td width=25 jseval="1"></td> |