summaryrefslogtreecommitdiff
path: root/Server/wwwroot/js/dialog.js
blob: 418962fda9a375494ebb828e216201a9962579a1 (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
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);

        var input = element.querySelector('input[type="text"]');
        if(input) {
            setTimeout(() => input.focus(), 100);
        }
    } 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++;
}

function dialogAddObjectReference(element, dialogObject) {
    if(!window.dialogObjects)
        window.dialogObjects = []

    window.dialogObjects.push({
        element: element,
        dialogObject: dialogObject
    });
}