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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
document.addEventListener('DOMContentLoaded', function() {
var sessionStorage = window.sessionStorage;
if(!sessionStorage) {
sessionStorage = {
setItem: function() {},
getItem: function() {},
removeItem: function() {}
};
}
var repositoryName = document.getElementById('repository-name').getAttribute('content');
var typesList = document.getElementById('types-list');
var searchInput = document.getElementById('search-input');
var parents = document.querySelectorAll('#types-list li.parent');
for(var i = 0; i < parents.length; i++) {
var _parent = parents[i];
_parent.addEventListener('click', function(e) {
e.stopPropagation();
if(e.target.tagName.toLowerCase() == 'li') {
if(e.target.className.match(/open/)) {
sessionStorage.removeItem(e.target.getAttribute('data-id'));
e.target.className = e.target.className.replace(/ +open/g, '');
} else {
sessionStorage.setItem(e.target.getAttribute('data-id'), '1');
if(e.target.className.indexOf('open') == -1) {
e.target.className += ' open';
}
}
}
});
if(sessionStorage.getItem(_parent.getAttribute('data-id')) == '1') {
_parent.className += ' open';
}
};
var childMatch = function(type, regexp){
var types = type.querySelectorAll("ul li");
for (var j = 0; j < types.length; j ++) {
var t = types[j];
if(regexp.exec(t.getAttribute('data-name'))){ return true; };
};
return false;
};
var searchTimeout;
searchInput.addEventListener('keyup', function() {
clearTimeout(searchTimeout);
searchTimeout = setTimeout(function() {
var text = searchInput.value;
var types = document.querySelectorAll('#types-list li');
var words = text.toLowerCase().split(/\s+/).filter(function(word) {
return word.length > 0;
});
var regexp = new RegExp(words.join('|'));
for(var i = 0; i < types.length; i++) {
var type = types[i];
if(words.length == 0 || regexp.exec(type.getAttribute('data-name')) || childMatch(type, regexp)) {
type.className = type.className.replace(/ +hide/g, '');
var is_parent = new RegExp("parent").exec(type.className);
var is_not_opened = !(new RegExp("open").exec(type.className));
if(childMatch(type,regexp) && is_parent && is_not_opened){
type.className += " open";
};
} else {
if(type.className.indexOf('hide') == -1) {
type.className += ' hide';
};
};
if(words.length == 0){
type.className = type.className.replace(/ +open/g, '');
};
}
}, 200);
});
typesList.onscroll = function() {
var y = typesList.scrollTop;
sessionStorage.setItem(repositoryName + '::types-list:scrollTop', y);
};
var initialY = parseInt(sessionStorage.getItem(repositoryName + '::types-list:scrollTop') + "", 10);
if(initialY > 0) {
typesList.scrollTop = initialY;
}
});
|