Revision: 499ab06d3c4b
Branch: default
Author: Pekka Klärck
Date: Thu Feb 6 11:03:45 2014 UTC
Log: report: Fixed search by url/hash containing special chars like &
and =.
Also cleaned up handling hash in general.
Update issue 1634
Fixed url/hash search with special chars. Search functionality is now ready
for testing/review.
http://code.google.com/p/robotframework/source/detail?r=499ab06d3c4b
Modified:
/src/robot/htmldata/rebot/report.html
=======================================
--- /src/robot/htmldata/rebot/report.html Thu Feb 6 10:02:03 2014 UTC
+++ /src/robot/htmldata/rebot/report.html Thu Feb 6 11:03:45 2014 UTC
@@ -108,53 +108,33 @@
function showDetailsByHash() {
if (window.location.hash == window.prevLocationHash)
return;
- // TODO: Should not decode here yet! And should never use decodeURI
- // but decodeURIComponen. Also, why '%' -> '%25'???
- var hash = window.location.hash.substring(1).replace('%', '%25');
- var hashParts = decodeURI(hash).split('_');
- var key = hashParts.shift();
- var arg = hashParts.join('_');
- var action = {'totals': showTotalSelector,
- 'tags': showTagSelector,
- 'suites': showSuiteSelector,
- 'search': urlSearch,
- 'total': totalDetailSelected,
- 'tag': tagDetailSelected,
- 'suite': suiteDetailSelected}[key];
+ var parts = window.location.hash.substring(1).split('?');
+ var name = parts.shift();
+ var query = parts.join('?');
+ if (name == 'search') {
+ var params = util.parseQueryString(query);
+ searchExecuted(params.suite, params.test, params.include,
params.exclude);
+ return
+ }
+ query = decodeURIComponent(query);
+ var action = {'totals': totalDetailSelected,
+ 'tags': tagDetailSelected,
+ 'suites': suiteDetailSelected}[name];
if (action)
- action(arg);
-}
-
-function showTotalSelector() {
- renderTotalSelector();
- scrollToSelector('totals');
-}
-
-function showTagSelector() {
- renderTagSelector();
- scrollToSelector('tags');
-}
-
-function showSuiteSelector() {
- renderSuiteSelector();
- scrollToSelector('suites');
-}
-
-function urlSearch(query) {
- var params = util.parseQueryString(query);
- searchExecuted(params.suite, params.test, params.include,
params.exclude);
+ action(query);
}
function totalDetailSelected(name) {
- if (!name) return;
renderTotalSelector(name);
- renderTotalDetails(name);
- updatePrintSelector(name == 'critical' ? 'Critical Tests' : 'All
Tests');
- scrollToSelector('total_'+name);
+ if (name) {
+ renderTotalDetails(name);
+ updatePrintSelector(name == 'critical' ? 'Critical Tests' : 'All
Tests');
+ }
+ scrollToSelector('totals', name);
}
function renderTotalSelector(name) {
- var args = {linkTarget: (name) ? 'total_'+name : 'totals',
+ var args = {linkTarget: (name) ? 'totals?'+name : 'totals',
totalTabStatus: 'detail-tab-selected'};
renderSelector(args, 'totalDetailsSelectorTemplate', {selected: name});
}
@@ -175,12 +155,13 @@
}
function tagDetailSelected(name) {
- if (!name) return;
renderTagSelector(name);
- var tag = findTag(name);
- renderTagDetails(tag);
- updatePrintSelector(name, tag.info);
- scrollToSelector('tag_'+name);
+ if (name) {
+ var tag = findTag(name);
+ renderTagDetails(tag);
+ updatePrintSelector(name, tag.info);
+ }
+ scrollToSelector('tags', name);
}
function findTag(name) {
@@ -193,7 +174,7 @@
}
function renderTagSelector(name) {
- var args = {linkTarget: (name) ? 'tag_'+name : 'tags',
+ var args = {linkTarget: (name) ? 'tags?'+name : 'tags',
tagTabStatus: 'detail-tab-selected'};
var stats = {tags: window.testdata.statistics().tag, selected: name};
renderSelector(args, 'tagDetailsSelectorTemplate', stats);
@@ -212,14 +193,14 @@
}
function suiteDetailSelected(id) {
- if (!id) return;
renderSuiteSelector(id);
- renderSuiteDetails(id);
- scrollToSelector('suite_'+id);
+ if (id)
+ renderSuiteDetails(id);
+ scrollToSelector('suites', id);
}
function renderSuiteSelector(id) {
- var args = {linkTarget: (id) ? 'suite_'+id : 'suites',
+ var args = {linkTarget: (id) ? 'suites?'+id : 'suites',
suiteTabStatus: 'detail-tab-selected'};
var stats = {suites: window.testdata.statistics().suite,
selected: id};
@@ -240,13 +221,17 @@
renderSearchSelector(suite, test, include, exclude);
if (suite || test || include || exclude) {
renderSearchDetails(suite, test, include, exclude);
- scrollToSelector('search_suite=' + suite + '&test=' + test
+ '&include=' + include + '&exclude=' + exclude);
+ scrollToSelector('search' +
+ '?suite=' + encodeURIComponent(suite) +
+ '&test=' + encodeURIComponent(test) +
+ '&include=' + encodeURIComponent(include) +
+ '&exclude=' + encodeURIComponent(exclude));
}
}
function renderSearchSelector(suite, test, include, exclude) {
var args = {linkTarget: (suite || test || include || exclude) ?
- ('search_suite=' + suite + '&test=' + test
+ '&include=' + include + '&exclude=' + exclude) :
+ ('search?suite=' + suite + '&test=' + test
+ '&include=' + include + '&exclude=' + exclude) :
'search',
searchTabStatus: 'detail-tab-selected'};
var search = {suite: suite, test: test, include: include, exclude:
exclude};
@@ -280,9 +265,10 @@
});
}
-function scrollToSelector(anchor) {
+function scrollToSelector(base, query) {
$('#test-details-container').css('min-height', $(window).height());
- window.prevLocationHash = "#"+anchor;
+ var anchor = query ? base + '?' + encodeURIComponent(query) : base;
+ window.prevLocationHash = '#' + anchor;
window.location.hash = anchor;
}
@@ -404,13 +390,13 @@
<tr>
<th>Status:</th>
{{if criticalFailed}}
- <td><a href="#total_critical"
onclick="totalDetailSelected('critical')"
+ <td><a href="#totals?critical"
onclick="totalDetailSelected('critical')"
class="fail">${criticalFailed} critical test{{if
criticalFailed != 1}}s{{/if}} failed</a></td>
{{else totalFailed}}
- <td><a href="#total_critical"
onclick="totalDetailSelected('critical')"
+ <td><a href="#totals?critical"
onclick="totalDetailSelected('critical')"
class="pass">All critical tests passed</a></td>
{{else}}
- <td><a href="#total_all" onclick="totalDetailSelected('all')"
+ <td><a href="#totals?all" onclick="totalDetailSelected('all')"
class="pass">All tests passed</a></td>
{{/if}}
</tr>
@@ -455,7 +441,7 @@
<tr onclick="totalDetailSelected('${type}')" class="row-${$item.index}">
<td class="stats-col-name">
<div class="stat-name">
- <a href="#total_${type}">{{html label}}</a>
+ <a href="#totals?${type}">{{html label}}</a>
</div>
</td>
{{tmpl($data) 'statColumnsTemplate'}}
@@ -466,7 +452,7 @@
<tr onclick="tagDetailSelected('${label}')" class="row-${$item.index}">
<td class="stats-col-name" title="${doc}">
<div class="stat-name">
- <a href="#tag_${label}">{{html label}}</a>
+ <a href="#tags?${label}">{{html label}}</a>
{{if info}}(${info}){{/if}}
</div>
<div class="tag-links">
@@ -484,7 +470,7 @@
<tr onclick="suiteDetailSelected('${id}')" class="row-${$item.index}">
<td class="stats-col-name" title="${label}">
<div class="stat-name">
- <a href="#suite_${id}"><span class="parent-name">{{html
formatParentName}}</span>{{html name}}</a>
+ <a href="#suites?${id}"><span class="parent-name">{{html
formatParentName}}</span>{{html name}}</a>
</div>
</td>
{{tmpl($data) 'statColumnsTemplate'}}
--
---
You received this message because you are subscribed to the Google Groups "robotframework-commit" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to robotframework-commit+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.