summaryrefslogtreecommitdiff
path: root/wwwroot/js/dialog.js
blob: 7ea141e8f84186492db956d7f29c29b224bc5482 (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
function dialogMouseDown(e) {
    bumpDialog(e.currentTarget);
}

function dialogTitleMouseDown(e) {
    e = e || window.event;
    e.preventDefault();
    var element = e.currentTarget.parentElement;
    var ds = element.dataset;
    ds.lastX  = e.clientX;
    ds.lastY  = e.clientY;

    window.dragDialog    = element;
    document.onmouseup   = dragMouseUp;
    document.onmousemove = dragMouseMove;
}

function dragMouseUp() {
    window.dragDialog    = null;
    document.onmouseup   = null;
    document.onmousemove = null;
}

function dragMouseMove(e) {
    e = e || window.event;
    e.preventDefault();
    var element = window.dragDialog;
    var ds = element.dataset;
    deltaX = ds.lastX - e.clientX;
    deltaY = ds.lastY - e.clientY;
    ds.lastX = e.clientX;
    ds.lastY = e.clientY;
    element.style.left = (element.offsetLeft - deltaX) + 'px';
    element.style.top  = (element.offsetTop  - deltaY) + 'px';
}

function setDialogVisibility(element, visible) {
    if(visible) {
        element.style.left       = null;
        element.style.top        = null;
        element.style.opacity    = 1;
        element.style.visibility = 'visible';
        bumpDialog(element);
    } else {
        element.style.opacity    = 0;
        element.style.visibility = 'hidden';
    }
}

function bumpDialog(element) {
    var dialogs = Array
        .from(document.querySelectorAll('div.dialog'))
        .map(e => ({ zIndex: parseInt(e.style.zIndex), element: e }))
        .sort((a, b) => a.zIndex - b.zIndex)
        .map(d => d.element)
        .filter(e => e != element);

    dialogs.push(element);

    var z = 900;
    for(var d of dialogs)
        d.style.zIndex = z++;
}