summaryrefslogtreecommitdiff
path: root/resources/dynmenu.js
blob: a10296b2a4d309c4a19871fdbc63201b47a7cdac (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);

}