exports.setLocation = function setLocation( isReplace, activeSort, isFlat, activeFilters, fileFilter, expandedLines ) { const params = [ activeSort.sortKey, activeSort.order, isFlat, activeFilters.low, activeFilters.medium, activeFilters.high, encodeURIComponent(fileFilter), expandedLines.map(encodeURIComponent).join(',') ]; const newUrl = `#${params.join('/')}`; if (newUrl === location.hash) { return; } window.history[isReplace ? 'replaceState' : 'pushState'](null, '', newUrl); }; exports.decodeLocation = function decodeLocation() { const items = location.hash.substr(1).split('/'); if (items.length !== 8) { return null; } try { return { activeSort: { sortKey: items[0], order: items[1] }, isFlat: JSON.parse(items[2]), activeFilters: { low: JSON.parse(items[3]), medium: JSON.parse(items[4]), high: JSON.parse(items[5]) }, fileFilter: decodeURIComponent(items[6]), expandedLines: items[7].split(',').map(decodeURIComponent) }; } catch (e) { return null; } };