53 lines
1.3 KiB
JavaScript
53 lines
1.3 KiB
JavaScript
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;
|
|
}
|
|
};
|