Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 31 additions & 59 deletions bugherder/js/bugherder.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,10 @@ var bugherder = {

// Display an appropriate error, then display the cset form
errorPage: function mcM_errorPage(params) {
var errorType = params['error'];
var errorType = params.get('error');
var errorText = 'Unknown error';
var cset = 'cset' in params ? ' ' + UI.htmlEncode(params['cset'][0]) : '';
var treeName = 'tree' in params ? ' ' + UI.htmlEncode(params['tree'][0]) : '';
var cset = params.has('cset') ? ' ' + UI.htmlEncode(params.get('cset')) : '';
var treeName = params.has('tree') ? ' ' + UI.htmlEncode(params.get('tree')) : '';

var dataType = 'pushlog';
if (this.loading == 'bz')
Expand Down Expand Up @@ -466,24 +466,20 @@ var bugherder = {

var query = document.location.search;
if (query) {
var paramsObj = this.chunkQuery(query);
if ('debug' in paramsObj)
this.debug = (paramsObj['debug'][0] == '1');
if ('expand' in paramsObj)
this.expand = (paramsObj['expand'][0] == '1');
if ('remap' in paramsObj)
this.remap = (paramsObj['remap'][0] == '1');
if ('resume' in paramsObj)
this.resume = (paramsObj['resume'][0] == '1');

if ('error' in paramsObj)
var paramsObj = new URLSearchParams(query);
this.persistingParams.forEach((param) => {
if (paramsObj.has(param))
this[param] = (paramsObj.get(param) == '1');
}, this);

if (paramsObj.has('error'))
return self.errorPage(paramsObj);

if ('cset' in paramsObj) {
var cset = paramsObj['cset'][0];
if (paramsObj.has('cset')) {
var cset = paramsObj.get('cset');

if ('tree' in paramsObj) {
var treeName = paramsObj['tree'][0].toLowerCase();
if (paramsObj.has('tree')) {
var treeName = paramsObj.get('tree').toLowerCase();
if (!(treeName in Config.treeInfo) && !(treeName in Config.rewriteTrees)) {
var replace = document.location.href.indexOf('error') != -1;
this.go('error=treename&tree=' + treeName, replace);
Expand Down Expand Up @@ -511,55 +507,31 @@ var bugherder = {
return self.acquireChangeset();
},

// Create an object that contains all parameters from a search/query string
// The properties are arrays to make room for a future of multi-tree/cset marking
chunkQuery: function mcM_chunkQuery(query) {
query = query.substring(1);
var params = query.split('&');
var paramsObj = {}
for (var x in params) {
var p = params[x].split('=');
if(!paramsObj[p[0]]) {
paramsObj[p[0]] = [p[1]];
} else {
paramsObj[p[0]].push(p[1]);
}
}
return paramsObj;
},

// Parameters maintained across page loads
persistingParams: ['debug', 'expand', 'remap', 'resume'],

// Push a new URL onto history
go: function mcM_go(query, replace) {
var maintained = [];
function persist(prop) {
if (this[prop])
maintained.push(prop + '=1');
}

// Maintain various parameters across page loads
var persisted = ['debug', 'expand', 'remap', 'resume'];
persisted.forEach(persist, this);
var params = new URLSearchParams(query);
this.persistingParams.forEach((param) => {
if (this[param]) {
params.append(param, '1');
}
}, this);

var newQueryString = params.toString();
var newURL = document.location.href.split('?')[0];
if (query)
newURL = newURL + '?' + query;

var maintainedQuery = maintained.join('&');
if (!query && maintainedQuery.length > 0)
newURL += '?';
else if (query && maintainedQuery.length > 0)
newURL += '&';
newURL += maintainedQuery;
if (newQueryString)
newURL = newURL + '?' + newQueryString;

// Put the cset and tree parameters back in no matter what if present
var currentURLSearch = this.chunkQuery(document.location.search);
var newURLSearch = this.chunkQuery(newURL.split('?')[1]);
if (currentURLSearch['cset'] && !newURLSearch['cset']) {
newURL = newURL + '&cset=' + currentURLSearch['cset'][0];
var currentURLSearch = new URLSearchParams(document.location.search);
var newURLSearch = new URLSearchParams(newURL.split('?')[1]);
if (currentURLSearch.has('cset') && !newURLSearch.has('cset')) {
newURL = newURL + '&cset=' + currentURLSearch.get('cset');
}
if (currentURLSearch['tree'] && !newURLSearch['tree']) {
newURL = newURL + '&tree=' + currentURLSearch['tree'][0];
if (currentURLSearch.has('tree') && !newURLSearch.has('tree')) {
newURL = newURL + '&tree=' + currentURLSearch.get('tree');
}

if (Config.supportsHistory) {
Expand Down