1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| 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;
| }
| };
|
|