File size: 3,162 Bytes
27867f1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
$(document).ready(function(){
});

function show_menu(_button, _menuid) {
    switch_display(_button, _menuid);
    reset_menu_posn(_button, _menuid);
    return false;
}

function reset_menu_posn(_el_button, _menuid) {
    menuid = '#' + _menuid;

    var _el_menu_rect = $(menuid)[0].getBoundingClientRect();
    var _el_button_rect = _el_button.getBoundingClientRect();
    var _el_menu_height = _el_menu_rect.height;
    var _el_button_height = _el_button_rect.height;
    var _el_button_left = _el_button.scrollLeft;

    if ( _el_button_rect.y + _el_button_height < _el_button_height ) {
        _top = _el_button.offsetTop - _el_button_rect.y;
    } else {
        _top = _el_button.offsetTop - _el_menu_height + _el_button_height;
    }
    var _el_button_width = _el_button_rect.width;
    var _el_menu_width = _el_menu_rect.width;

    var panel_width = _el_button.parentElement.getBoundingClientRect().width;
    if ( panel_width - _el_button_width - 5 < _el_menu_width ) {
        _left = _el_button_left + _el_button_width/2;
    } else {
        _left = _el_button_left + _el_button_width;
    }
    $(menuid).css({"top":_top+'px', "left":_left+'px'});

    var _el_menu_rect = $(menuid)[0].getBoundingClientRect();
    var _el_menu_height = _el_menu_rect.height;
    if ( _el_button_rect.y + _el_button_height < _el_menu_height ) {
        _top = _el_button.offsetTop - _el_button_rect.y;
    } else {
        _top = _el_button.offsetTop - _el_menu_height + _el_button_height;
    }
    $(menuid).css({"top":_top+'px', "left":_left+'px'});
}

function switch_display(_button, _menuid) {
    $('div#'+_menuid).each(function() {
        if ( $(this).hasClass("listItemHide") ) {
            $(this).removeClass("listItemHide");
            $(this).addClass("listItemShow");
            $(this).focus().select();
            $(document).on('click', function(e) {
                var _menu = $('#'+_menuid);
                var _button2 = $('.menuSection');
                if ( !$(e.target).closest(_menu).length ) {
                    if ( !$(e.target).closest(_button2).length ) {
                        switch_display(_button, _menuid);
                    }
                }
            });
            $('#menuForm').submit(function(e) { // catch the form's submit
                // ajax does not submit name/value of button, so use hidden input
                $('input:hidden[name=action]').val(e.originalEvent.submitter.value);
                $.ajax({
                    data: $(this).serialize(),
                    type: $(this).attr('method'), // GET or POST
                    url: $(this).attr('action'),
                    success: function(response) { // on success
                        $('#menuActionStatus').html(response);
                    }
                });
                return false; // cancel original submit event
            });
            
        } else {
            $(this).removeClass("listItemShow");
            $(this).addClass("listItemHide");
            $(document).prop('onclick', null).off("click"); 
            $('#menuForm').prop("onsubmit", null).off("submit");
        }
    });
    
}