summaryrefslogtreecommitdiff
path: root/lib/epub.js/src/utils/scrolltype.js
blob: 7d2e47b2184ef6ed8b1b13e40cabaa12ad651a35 (plain)
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
// Detect RTL scroll type
// Based on https://github.com/othree/jquery.rtl-scroll-type/blob/master/src/jquery.rtl-scroll.js
export default function scrollType() {
	var type = "reverse";
	var definer = createDefiner();
	document.body.appendChild(definer);

	if (definer.scrollLeft > 0) {
		type = "default";
	} else {
		if (typeof Element !== 'undefined' && Element.prototype.scrollIntoView) {
			definer.children[0].children[1].scrollIntoView();
			if (definer.scrollLeft < 0) {
				type = "negative";
			}
		} else {
			definer.scrollLeft = 1;
			if (definer.scrollLeft === 0) {
				type = "negative";
			}
		}
	}

	document.body.removeChild(definer);
	return type;
}

export function createDefiner() {
	var definer = document.createElement('div');
	definer.dir="rtl";

	definer.style.position = "fixed";
	definer.style.width = "1px";
	definer.style.height = "1px";
	definer.style.top = "0px";
	definer.style.left = "0px";
	definer.style.overflow = "hidden";

	var innerDiv = document.createElement('div');
	innerDiv.style.width = "2px";

	var spanA = document.createElement('span');
	spanA.style.width = "1px";
	spanA.style.display = "inline-block";

	var spanB = document.createElement('span');
	spanB.style.width = "1px";
	spanB.style.display = "inline-block";

	innerDiv.appendChild(spanA);
	innerDiv.appendChild(spanB);
	definer.appendChild(innerDiv);

	return definer;
}