-
-
Notifications
You must be signed in to change notification settings - Fork 45
/
utilities.js
48 lines (42 loc) · 1.5 KB
/
utilities.js
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
export function calcOuterHeight(element){
var height;
height = element.getBoundingClientRect().height;
height += getStyleValue(element, 'marginTop');
height += getStyleValue(element, 'marginBottom');
return height;
}
export function calcScrollHeight(element){
var height;
height = element.getBoundingClientRect().height;
height -= getStyleValue(element, 'borderTopWidth');
height -= getStyleValue(element, 'borderBottomWidth');
return height;
}
function getStyleValue(element, style){
var currentStyle, styleValue;
currentStyle = element.currentStyle || window.getComputedStyle(element);
styleValue = parseInt(currentStyle[style]);
return Number.isNaN(styleValue) ? 0 : styleValue;
}
export function moveViewFirst(view, scrollView) {
// TODO Better support for table
if(scrollView.localName === 'table') {
scrollView = scrollView.firstElementChild;
}
insertBeforeNode(view, scrollView, scrollView.childNodes[1]);
}
export function moveViewLast(view, scrollView, numberOfDomElements) {
// TODO Better support for table
if(scrollView.localName === 'table') {
scrollView = scrollView.firstElementChild;
}
insertBeforeNode(view, scrollView, scrollView.children[numberOfDomElements]);
}
function insertBeforeNode(view, scrollView, node) {
let viewStart = view.firstChild;
let element = viewStart.nextSibling;
let viewEnd = view.lastChild;
scrollView.insertBefore(viewEnd, node);
scrollView.insertBefore(element, viewEnd);
scrollView.insertBefore(viewStart, element);
}