summaryrefslogtreecommitdiff
path: root/resources/dynmenu.js
blob: db387275b17c740a8002e1ab047581db9f7134fe (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
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
90
91

var last_popped = null;
var popped_in_use = false;

var last_timeout = null;

function prepareLastPopped(evt) {

	last_popped.onmouseleave = removeLastPopped;

	popped_in_use = true;

}

function removeLastPopped(evt) {

	if (last_popped != null) {

		last_popped.parentNode.removeChild(last_popped);
		last_popped = null;

	}

}

function forcePoppedHiding(evt) {

	function cancelPopping() {

		last_timeout = null;

		if (!popped_in_use) {

			removeLastPopped(null);

		}

	}

	last_timeout = setTimeout(cancelPopping, 500);

}

function showMenu(target, inner) {

	function waitForEvent(evt) {

		if (last_timeout != null) {

			clearTimeout(last_timeout);
			last_timeout = null;

		}

		removeLastPopped(null);

		if (inner == null)
			return;

		var menubar = document.createElement('div');

		menubar.id = 'myMenu';
		menubar.className = 'menu_arrow_box'
		menubar.innerHTML = inner ;
		document.body.insertBefore(menubar, document.body.childNodes[0]);

		var rect = target.getBoundingClientRect();
		var menu_rect = menubar.getBoundingClientRect();

		menubar.style.left = (rect.left - (menu_rect.width - rect.width) / 2) + "px";
		menubar.style.top = (rect.bottom + 20) + "px";

		last_popped = menubar;
		popped_in_use = false;

		menubar.onmouseenter = prepareLastPopped;
		target.onmouseleave = forcePoppedHiding;

	}

	return waitForEvent;

}

function addMenuToID(id, inner) {

	var target = document.getElementById(id);

	target.onmouseenter = showMenu(target, inner);

}